0

0

Lsass memory dump

星夢妙者

星夢妙者

发布时间:2025-08-01 08:06:13

|

593人浏览过

|

来源于php中文网

原创

lsass内存转储

lsass是Windows系统中处理本地安全和登录策略的重要进程,几乎所有的Windows身份认证程序都离不开lsass进程。因此,lsass的内存中会保存用户相关的凭证。它是Windows主机中认证的重要组成部分,因此获取lsass内存也是MITRE ATT&CK框架中Credential Access战术下的重要技术点。

Lsass memory dump 在整个unified kill chain中,Credential Access的环节起着重要的作用。在稳定获得初始化立足点后,需要获取目标主机上的相关凭证,并通过这些凭证进行后续的横向移动。当凭证获取不足时,无疑会加大后续的横向移动难度,因此Credential Access也是攻防对抗的重要战场。

Lsass memory dump 在lsass内存获取中,最容易想到的就是mimikatz,直接通过mimikatz就能获取lsass中保存的所有凭证,但是通常杀软会对mimikatz进行严格的监控与防御。在mimikatz运行过程中,主要分为两步,第一步获取lsass内存,第二步解析lsass内存获取密码或者hash。其中第二步可以离线进行,因此对抗点就出现在了第一步获取lsass内存的行为中。

本文主要介绍dump lsass内存的相关技术、免杀对抗,帮助读者更好地理解lsass内存dump和相关的免杀对抗技巧。

一、使用签名程序dump lsass内存 许多带签名的正常程序通常需要用到内存dump功能,让用户能查看进程在内存中的信息。此方法主要是通过签名程序,利用程序的正常功能来获取Windows lsass中的内存。

Procdump Procdump是由SysInternal团队开发的一个Windows进程和CPU监控程序,后由微软对其进行签名。在此工具的正常功能中,需要在CPU峰值期间生成崩溃转储文件,方便管理员来确定峰值原因,通过以下命令就能直接生成转储文件。

使用命令:procdump.exe -ma LsassPid

Process Explorer Procexp也是SysInternal团队开发的Windows进程监控工具,此工具主要对Windows的进程进行监控,包括进程相关文件、进程属性、进程状态等进行监控。在此工具的正常功能中,需要对进程内存进行dump,来查看进程运行过程中的内存。

此工具直接通过图形界面来创建dump文件。

SQLDumper SQLDumper是Microsoft SQL Server程序的一部分,主要是为了调试SQL Server和相关进程的内存。

使用命令:sqldump.exe LsassPid 0 0x01100

ProcessDump 思科Cisco Jabber会在C:\program file (86)\cisco systems\cisco jabber\x64\目录下存放processdump.exe,jabber会使用此程序来进行内存转储。

使用命令:processdump.exe (ps lsass).id c:\lsass.dmp

二、使用Windows自带的应用/命令来dump lsass内存Task Manager Windows任务管理器,可直接通过图形化界面打开Windows任务管理器,后直接右键单击相关进程,可直接dump出lsass的进程。

Comsvcs.dll 此方法主要是通过rundll32来调用comsvcs.dll中的MiniDump来直接dump相关内存。

MiniDumpW通过OpenProcess+CreateFileW+MiniDumpWriteDump函数来dump内存。

Lsass memory dump使用命令:rundll32 C:\windows\system32\comsvcs.dll MiniDump "LsassPid dump.bin full"

rdrleakdiag 该程序是Windows自带的Microsoft Windows Resource Leak Diagnostic,主要用于Windows诊断相关资源泄露,它默认安装在Windows 7、Windows 8、Windows 10、Windows Server 2012以上中。

使用命令:rdrleakdiag /p LsassPid /O C:\ /fullmemdmp /wait 1

三、使用Windows机制来dump内存SlientProcessExit 此方法是通过Windows API函数让Windows的WerFault.exe(Windows错误报告进程)程序dump进程内存。

Silent Process Exit机制 在Windows 7中引入了一个Silent Process Exit机制,此机制的目的是为了监控Windows的进程终止(通常是两种方式,一种是自己调用ExitProcess()终止,另一种是其他进程调用TerminateProcess()来终止此程序)。并提供在Silent Process Exit之后的处理行为,主要有以下三种。

• 启动一个新的进程• messagebox展示• 创建dump文件 此机制的目的是为了方便对Windows异常进程debug操作,发现Windows异常原因。在Windows中的具体进程是WerFault.exe。

dump lsass进程 在一个正常的Silent Process Exit机制中,需要进程异常崩溃或者退出,但是对于lsass进程,一但崩溃或者退出,将会导致系统重新启动,因此无法采用正常的Windows业务逻辑来dump lsass。

既然无法使用正常的业务逻辑,那如何才能不退出lsass进程,dump内存呢?在Windows中,有个RtlReportSilentProcessExit() API,此API的作用主要是通知Windows错误报告服务,哪个进程正在执行静默退出。接收到此信号后,WerFault.exe就会dump该程序的内存。通过此方法,就不需要lsass退出了。

在dump lsass之前,还需要修改以下两个注册表值,来通知计算机对哪个进程执行Silent Process Exit机制。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lsass.exe

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\lsass.exe

相关工具见:https://www.php.cn/link/bafe5a19bbef4152f217efc037c1be59

LsassShtinkering 这个方法是今年defcon大会上分享的一种dump lsass的方法。此方法主要通过ALPC模拟正常的lsass异常信息发送到WerFault.exe来dump lsass内存,相比于SlientProcessExit机制dump内存,它有更好的隐秘性(Windows日志记录不会保存相关恶意进程,从日志分析整个过程就像lsass主动dump内存),能够更好的规避杀软。

讯飞星火
讯飞星火

科大讯飞推出的多功能AI智能助手

下载

相关原理见ppt:https://www.php.cn/link/0e8b25d538721f754c135daf02eb8a64

原作者的项目是个demo形式,我添加了注册表修改和令牌伪造,变成了自动化工具。

工具地址:https://www.php.cn/link/63a82e1bc44f8cf90a9189b4632951df

四、免杀对抗了解了上述的相关技术后,我们重新来看下dump lsass技术的关键步骤。

• 1、OpenProcess获取lsass进程句柄。

• 2、通过MiniDumpWriteDump读取lsass进程内存,并将结果保存到文件。

MiniDumpWriteDump的一系列核心流程,如图所示(具体实现在dbgcore.dll中)

Lsass memory dump读取内存的函数:

Lsass memory dumpLsass memory dump申请内存的函数:

Lsass memory dump写入文件的函数:

Lsass memory dump因此对抗中存在两个点:

• 对抗点一:通过OpenProcess获取lsass进程句柄的操作,当OpenProcess进程时,会注册句柄回调,通过回调就很容易发现调用lsass的恶意进程。• 对抗点二:是MiniDumpWriteDump函数dump进程内存的操作中,当dump内存时,会涉及到读取lsass内存和创建文件并将内存写入文件。下面我们来看看针对这些行为,怎么进行相关攻防。

Dumpert 此工具仍然使用MiniDumpWriteDump函数来对内存进行dump,但是相比与传统的dump,它先使用hook的方式对NtReadVirtualMemory函数解edr的hook,后通过syscall的方式调用ZwOpenProcess+NtCreateFile+MiniDumpWriteDump来进行内存dump,能有效的规避用户层的杀软。

项目地址:https://www.php.cn/link/e5b5b8d9882f4831304d99c39e49da4f

PssCaptureSnapshot API通过PsscaptureSnapshot函数可以创建lsass的进程快照,后通过MiniDumpWriteDump来直接从进程快照中来dump lsass快照内存,规避了对抗点二中edr针对lsass的内存读写保护。

pypykatz pypykatz中主要解决了对抗点一的问题,在不直接通过OpenProcess函数获取lsass进程句柄的情况下,通过复制其他进程对lsass进程的访问句柄来间接获取lsass进程句柄。下面是它的具体方法:

  1. 获取SeDebugPrivilege权限,让该进程能获取其他进程的句柄2. 通过NtQuerySystemInformation来获取所有进程打开的句柄及句柄的PID信息。3. OpenProcess以PROCESS_DUP_HANDLE(复制句柄权限)权限打开进程。4. 通过NtDuplicateObject来获取其他进程副本。5. 通过NtQueryObject来判断是否是句柄。6. 如果是句柄,则通过QueryFullProcessImageName来显示出句柄的可执行文件路径,如果是lsass.exe文件,则调用后续的MiniDumpWriteDump来获取lsass内存。MirrorDump • 针对OpenProcess获取进程句柄的监控,MirrorDump通过将获取lsass进程句柄的操作通过加载SSP的dll来实现。SSP的认证过程是由LSASS进程完成的,在SSP加载完dll后,在dll中获取MirrDump的进程句柄,并将当前进程句柄复制给MirrDump进程。因为加载SSP dll的进程是lsass,因此MirrDump就获取到了lsass的进程句柄。

在系统中的具体行为表现为:LSASS进程通过OpenProcess获取自己的进程句柄,并将句柄复制给MirrorDump进程。

• 针对文件的写,MirrorDump通过MinHook来对MiniDumpWriteDump中涉及到的SetFilePointer、GetFileSize、WriteFile函数进行hook,从而改变相关行为,规避杀软查杀。

MirrorDump具体流程:

Lsass memory dumpMalSeclogon • 针对OpenProcess获取进程句柄的监控,MalSeclogon采用两种方法来获取lsass进程的句柄,第一种是通过CreateProcessWithLogonW/CreateProcessWithTokenW的父进程欺骗和CreateProcessWithLogonW函数的句柄泄露来从其他进程中寻找lsass泄露的句柄。第二种是在CreateProcessWithLogonW/CreateProcessWithTokenW进行父进程欺骗时,会打开lsass进程句柄,通过条件竞争获取到此lsass进程句柄。下面将详细介绍两种方法。

方法一:

  1. 枚举进程句柄并找到lsass打开的句柄。2. 修改当前进程TEB中的pid为lsass的PID。3. 将LOGON_NETCREDENTIALS_ONLY指定为dwLogonFlags参数;设置dwFlags为STARTF_USESTDHANDLES;设置hStdInput、hStdOutput、hStdError为lsass打开的句柄。4. 调用CreateProcessWithLogonW5. 检查新进程是否是lsass的handle,并复制handle。Lsass memory dump方法二:

  2. 修改当前进程TEB中的pid为lsass的PID。2. 在任意文件A中设置OpLock锁(工具中默认license.rtf)。3. 使用CreateProcessWithLogonW来打开文件A。4. 通过GetOverlappedResult来捕获CreateProcessWithLogonW访问文件A时的OpLock事件。(此处解决了父进程欺骗打开lsass进程句柄的瞬时问题)5. 找到seclogon服务PID。6. 枚举进程句柄并找到seclogon打开的句柄。7. 通过DuplicateHandle复制seclogon打开lsass的句柄。Lsass memory dump • 针对lsass内存的监控,MalSeclogon通过调用NtCreateProcessEx来复制进程内存到一个新的进程。(前提是句柄具有PROCESS_CREATE_PROCESS权限,SectionHandle设置为0)

整体代码思维导图:

Lsass memory dump小结 本节主要总结了在edr对关键进程LSASS的OpenProcess和MiniDumpWriteDump的保护下,如何绕过保护dump内存的方法。

Lsass memory dump五、防护 针对lsass内存dump的重要防护手段是微软的PPL(Protected Process Light),当开启lsass的PPL之后,没有特定微软签名的二进制文件将无法访问lsass(上方所有的方法都无法获取lsass的句柄)。但是打开lsass的ppl后,不但恶意程序无法获取lsass句柄,同时非微软签名的程序也无法获取lsass进程句柄,有可能会影响正常业务。

六、参考文章https://googleprojectzero.blogspot.com/2016/03/exploiting-leaked-thread-handle.html``https://skelsec.medium.com/duping-av-with-handles-537ef985eb03``https://splintercod3.blogspot.com/p/the-hidden-side-of-seclogon-part-2.html``https://splintercod3.blogspot.com/p/the-hidden-side-of-seclogon-part-3.html``https://skelsec.medium.com/duping-av-with-handles-537ef985eb03``https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/``https://googleprojectzero.blogspot.com/2018/08/windows-exploitation-tricks-exploiting.html

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

771

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

350

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1324

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

362

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

901

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

425

2024.04.29

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

30

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.2万人学习

Excel 教程
Excel 教程

共162课时 | 14.9万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号