新闻中心

用7-Zip从物理磁盘绕过Windows对SAM的锁定

在Windows上拿到本地管理员后,尝试用 reg save HKLM\SAM C:\temp\SAM 提取凭证时常会遇到一个熟悉的问题:系统报错“ERROR: The process cannot access the file because it is being used by another process”。这是因为SAM、SYSTEM、SECURITY等注册表配置单元被内核以独占方式打开,在文件系统层面会返回共享冲突(STATUS_SHARING_VIOLATION)。常见的应对办法包括尝试VSS快照或让磁盘脱机,但VSS可能被禁用或受监控,脱机通常需要重启或物理接触。

有一个更直接的思路:根本不通过文件系统API去访问这些文件,而是直接读取物理磁盘。一次实战中,队友发现7-Zip能够做到这一点:以管理员身份运行7-Zip,在地址栏输入 \\.\PhysicalDrive0\ 后,7-Zip会把整块磁盘当作一个大“压缩包”来浏览分区。可以直接定位到 Windows\System32\config\,像复制普通文件那样把SAM、SYSTEM和SECURITY拷出来。

为什么可行?关键在于7-Zip并没有针对 C:\Windows\System32\config\SAM 调用NtCreateFile;它是对设备路径 \\.\PhysicalDrive0 调用 CreateFile,然后在用户态或应用逻辑中手动解析NTFS的引导扇区、$MFT记录和数据运行(data runs),重组出文件内容。这个过程工作在磁盘驱动层次之下(disk.sys),低于文件系统驱动(ntfs.sys),因此在文件系统层施加的独占锁对它不起作用。此外,7-Zip是被签名的常见合法软件,多数EDR不会把这类行为默认视为恶意;而一些拦截文件系统IRP的微过滤驱动并不会挂接到 \Device\HarddiskX,从而难以捕获这种行为。 球友会

基于相同原理,出现了专门的工具“Sam The Butcher”。它是单文件的独立Windows可执行程序,体积很小(约40–60 KB),无需Python、.NET或其他依赖,拷到U盘上直接运行即可。其基本工作流程包括: - 打开 \\.\PhysicalDrive0(需要管理员权限); - 使用 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 枚举分区,定位NTFS分区; - 读取NTFS引导扇区,获取簇大小和MFT的逻辑簇号(MFT_LCN); - 读取并解析 $MFT(从记录0开始),解析 $DATA 的数据运行以在内存中重建整个MFT; - 基于MFT构建父子文件树,解析出Windows路径并提取目标文件(比如SAM)。

本质上这不是“破解”文件锁,而是换一层去读:文件锁在ntfs.sys层生效,但磁盘上的数据结构保持原样。只要绕过文件系统栈、直接解析物理磁盘上的NTFS结构,就可以避开那些基于文件API的保护。

对红队而言,这意味着在取得本地管理员权限后,可以在不依赖VSS、不需重启、不需将磁盘脱机的情况下提取凭据。对防守方的启示是:检测与防护不能只盯着高层的文件API调用。如果某个进程——即便是签名良好的程序——突然开始读 \\.\PhysicalDrive0,这本身就应该引起警觉。防御措施应包括对原始磁盘设备访问的监控、限制不必要的管理员权限、以及使用磁盘加密(如BitLocker)来降低直接从物理磁盘读取敏感数据的风险。 球友会

about image