分叉远程进程
滥用Windows中有限的分叉功能的新方法。
如果你不分叉自己的进程,而是分叉一个远程进程.
如果攻击者能够分叉一个远程进程,他们将能够深入了解目标进程,而不需要敏感的进程访问权
如PROCESS_VM_READ
可以被反病毒软件监控。
只需PROCESS_CREATE_PROCESS
句柄,攻击者就可以分叉或 "复制 "一个进程,并访问其中存在的任何机密信息。
当使用传统的NtCreateProcess(Ex)
变体时,分叉一个远程进程是相对简单的。
通过在SectionHandle中
传递NULL
,在ParentProcess
参数中传递目标进程的PROCESS_CREATE_PROCESS
句柄,一个远程进程的分叉将被创建,攻击者将收到分叉进程的句柄。
此外,只要攻击者不创建任何线程,就不会有进程创建回调。这意味着攻击者可以读取目标的敏感内存,
而反病毒软件甚至不知道子进程已经被创建。
当使用NtCreateUserProcess
变体时,攻击者需要做的就是使用以前的最小实现,即分叉自己的进程,但在属性列表中把目标进程句柄作为PsAttributeParentProcess
传递
有了这个子句柄,攻击者就可以从目标程序中读取敏感的内存,以达到各种目的。
凭据转存
像这样隐蔽的内存读取技术的一个明显目标是本地安全授权子系统服务(LSASS)。
LSASS通常是攻击者的目标,他们希望捕获当前机器的凭证
在典型的攻击中,像Mimikatz这样的恶意程序直接与受害者机器上的LSASS对接,然而,一个更隐蔽的选择是将LSASS的内存转储到攻击者机器上进行处理。这是为了避免将一个知名的恶意程序,如Mimikatz放在受害者的环境中,这更有可能被发现。
通过进程分叉,攻击者可以通过转储LSASS分叉的内存来逃避监控或阻止访问LSASS进程
复现过程
- 需要system权限调试进程
- 自定义内存转存的文件
- 创建LSASS的分叉节点
- 分叉的子进程中通常使用
MiniDumpWriteDump API
- 将转储文件获取到本机即可
这里可以用到该项目进行测试:
代码语言:javascript复制https://github.com/D4stiny/ForkPlayground
如图所示:
最后将文件名修改为小生观察室.dump
,本地通过Mimikatz
读取小生观察室.dump
文件即可读取明文账户密码获取到对应的Lsass凭据信息。