Dump LSASS的已知方法及新方法
dump LSASS的已知方法
微软签名工具
在所有可用的方法中,使用Microsoft签名的二进制文件是一种隐蔽获取LSASS内存转储的便捷的方法,尤其是当目标上已经存在它们时。使用这些方法可以阻止蓝队检测,因为像ProcDump这样的东西很难添加到黑名单中。
- 1.0 任务管理器
内置的任务管理器具有用于过程的转储机制:
打开任务管理器,找到lsass进程
右键 — 创建转储文件
成功转储会返回一个文件路径
- 2.0 ProcExp.exe
Sysinternals工具ProcExp.exe工具也可以用于进程转储:
这个工具可以在微软中下载
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
这里一共有两种转储方式
miniDump:
应用程序可以生成用户模式的小型转储文件,其中包含故障转储文件中包含的信息的有用子集。应用程序可以非常快速有效地创建小型转储文件。由于小型转储文件很小,因此可以轻松地将其通过Internet发送给该应用程序的技术支持。
full dump:
这里我们导出Full Dump
可以自定义转储文件位置
- 3.0 ProcDump
Sysinternals工具ProcDump.exe可能是恶意软件最常使用的工具,因为它具有命令行功能,并且不专门用于转储LSASS进程,因此,它会将LSASS进程转储到磁盘。尽管必须使用“ .dmp”扩展名,但可以在参数中控制其余的转储文件名:
ProcDump是一个命令行实用程序,其主要目的是监视应用程序中的CPU尖峰并在尖峰期间生成崩溃转储,管理员或开发人员可以使用它来确定尖峰原因。ProcDump还包括挂起的窗口监视(使用Windows和Task
Manager使用的相同的窗口挂起定义),未处理的异常监视,并且可以基于系统性能计数器的值生成转储。它也可以用作常规流程转储实用程序,您可以将其嵌入其他脚本中。
可以在微软中下载
https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
语法
procdump.exe -ma lsass.exe [文件位置]
使用-r
开关将ProcDump创建lsass.exe的克隆并将其转储到磁盘
procdump.exe -ma -r lsass.exe [文件位置]
- 4.0 SQLDumper
SQLDumper.exe包含在Microsoft SQL和Office中,并且能够生成完整的转储文件。
在微软文档中我们可以找到:
https://docs.microsoft.com/en-us/troubleshoot/sql/tools/use-sqldumper-generate-dump-file
文件路径
C:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe
C:\Program Files (x86)\Microsoft Office\root\vfs\ProgramFilesX86\Microsoft Analysis\AS OLEDB\140\SQLDumper.exe
语法:
通过PID转储过程并创建一个转储文件(创建一个名为SQLDmprXXXX.mdmp的转储文件)。
sqldumper.exe [lsass PID] 0 0x01100
所需特权:管理员
操作系统:Windows
使用powershell来查看一下lsass.exe的pid
然后使用sqldumper.exe
40标志将创建Mimikatz兼容的转储文件。
sqldumper.exe 540 0 0x01100:40
所需特权:管理员
操作系统:Windows
- 5.0 Comsvcs.dll
可以在每个Windows系统中找到“ comsvcs.dll”,并且具有可用于通过其PID转储进程的导出。
通过rundll32
语法
rundll32.exe comsvcs.dll MiniDump<输出路径> full
请注意,该进程需要具有调试特权
在dump指定进程内存文件时,需要开启SeDebugPrivilege权限
管理员权限的cmd下,默认支持SeDebugPrivilege权限,但是状态为Disabled,如下图
所以说,直接在cmd下执行rundll32的命令尝试dump指定进程内存文件时,由于无法开启SeDebugPrivilege权限,所以会失败
在cmd中我找不到打开SeDebugPrivilege的方法
所以我们可以所以powershell进行滥用,在管理员权限的powershell中默认打开SeDebugPrivilege
powershell.exe rundll32.exe comsvcs.dll MiniDump<输出路径> full
全内存转储
将整个RAM转储到磁盘是从LSASS获取凭证的另一种方法。这种方法用得不多,因为生成完整的转储会花费一些时间并占用大量磁盘空间。
实时内存转储
有一些签名的内核驱动程序可以遍历整个内存并将其转储到磁盘。例如,WinPmem由Google签名,并允许创建全内存转储。Physmem2profit将WinPmem与C2服务器一起使用,以允许通过WinPmem驱动程序读取LSASS内存,而无需将全部内存保存到磁盘上。
NTFS卷中复制
可以使用RawCopy之类的工具复制hiberfil.sys以提取凭据
https://diverto.github.io/2019/11/05/Extracting-Passwords-from-hiberfil-and-memdumps
https://github.com/jschicht/RawCopy
VMEM / VMSN文件
可以为虚拟机快照或挂起快照时从创建的内存文件中提取完整的内存转储。
https://diverto.github.io/2019/11/05/Extracting-Passwords-from-hiberfil-and-memdumps
使用API
MiniDumpWriteDump方法
在dbghelp.dll中,有一个名为MiniDumpWriteDump的函数,该函数是:
在内部,MiniDumpWriteDump使用未记录的NtReadVirtualMemory API读取其目标的进程内存。
MiniDumpWriteDump + PssCaptureSnapshot
由于向LSASS打开特权句柄并将其传递给MiniDumpWriteDump可能会很麻烦,因此一种更隐秘的方法是使用PssCaptureSnapshot API创建LSASS的进程快照,该快照也由MSDN记录。实际上,这种过程转储方法记录在MSDN的自己的页面中。
所有以前的内存转储类别中列出的每个工具都使用这两种方法之一(不包括完整内存转储方法)。
新的手法
可以使用WerFault.exe(处理进程崩溃的Windows错误报告进程)创建lsass.exe的内存转储。此技术的主要优点是它不会导致lsass.exe崩溃,并且由于WerFault.exe始终用于创建文件转储(而不仅仅是lsass.exe),因此此方法提供了未被检测到的附加优点。
https://github.com/deepinstinct/LsassSilentProcessExit
语法:
LsassSilentProcessExit.exe
Where DumpMode can be:
0 - Call RtlSilentProcessExit on LSASS process handle
1 - Call CreateRemoteThread on RtlSilentProcessExit on LSASS