在红队的工作中,获得Windows系统的本地管理员权限后,尝试提取哈希值的过程常常伴随着挫败感。在使用命令 reg save HKLM\SAM C:\temp\SAM 时,系统却返回一个错误提示,指明文件因被其他进程占用而无法访问。这是因为SAM、SYSTEM和SECURITY注册表单元被内核独占地打开,标准的文件系统API根本无法接近,随即便遭遇 STATUS_SHARING_VIOLATION 的障碍。虽然可以尝试使用vssadmin,但VSS通常被禁用或监控;而将磁盘脱机则需重启或物理接触。有无其他方式,能够直接读取这些文件而不需请求文件系统的许可呢?
最近的一次行动中,名为Коля “KL3FT3Z”的合作伙伴提出了一个简便的解决方案:利用7-Zip打开原始的物理磁盘。以管理员身份运行7-Zip并在地址栏中输入 \\.\PhysicalDrive0\,软件便将整块磁盘视作一个庞大的压缩文件。用户可以浏览分区,轻松找到 Windows\System32\config\,如同复制普通文件一样提取出SAM、SYSTEM和SECURITY。
那么,为什么7-Zip能够实现这一点?因为它没有直接调用NtCreateFile来访问C:\Windows\System32\config\SAM,而是通过对 \\.\PhysicalDrive0 调用CreateFile,手动解析NTFS引导扇区、MFT记录和数据运行。这一操作是在磁盘驱动层(disk.sys)上完成的,完全处于文件系统栈(ntfs.sys)之下,因此在这个层面上,内核对SAM的独占锁是不存在的。此外,7-Zip本身是一个合法的软件,经过签名,并且几乎每台工作站中都有安装,绝大多数EDR方案不会对此行为产生警告。微过滤驱动并没有拦截 \Device\HarddiskX 的文件系统IRP。
这一发现引发了一个问题:是否有可能开发出一个专用工具,能够更快、更隐蔽,并且能在线解密哈希?于是,Sam The Butcher 应运而生。这个工具是一个独立的Windows可执行程序,大小仅在40至60KB之间。它无需Python或.NET运行时,说明只需将 stb.exe 放在U盘中即可使用。
该工具的操作流程十分简洁:首先打开 \\.\PhysicalDrive0(需要管理员权限),然后调用 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 以枚举分区,接着读取NTFS引导扇区以获取簇大小和MFT_LCN,之后读取 $MFT 记录0并解析 $DATA 运行,将整颗MFT重组到内存中,并从MFT构建父子文件树,解析出Windows路径。这一思路的关键在于,不是“破解”文件锁,而是通过换个层级进行读取。文件锁在ntfs.sys层面生效,但磁盘上的数据结构依然存在。只要绕过文件系统栈,直接从物理磁盘层解析NTFS结构,那么锁的限制便失去意义。
对于红队而言,这一技术使得在获得本地管理员权限后提取凭据不再依赖于VSS、重启或脱机磁盘。而对于防守方而言,这则提醒我们:监控不能仅仅依赖于文件系统API的调用。如果某个合法进程突然开始读取 \\.\PhysicalDrive0,那么这种行为可能比任何可疑的reg save命令都更需要引起重视。