[系統安全] 四十四.惡意軟件分析 (1)靜態分析Capa經典工具的基本用法萬字詳解

希望這些基礎原理能更好地幫助大家做好防御和保護,基礎性文章,希望對您有所幫助。作者作為網絡安全的小白,分享一些自學基礎教程給大家,主要是在線筆記,希望您們喜歡。同時,更希望您能與我一起操作和進步,后續將深入學習網絡安全和系統安全知識并分享相關實驗。總之,希望該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!如果文章對您有幫助,將是我創作的最大動力,點贊、評論、私聊均可,一起加油喔!
文章目錄:
- 一.惡意軟件分析
- 1.靜態特征
- 2.動態特征
- 二.Capa簡介
- 1.基礎知識
- 2.CAPA原理詳解
- 三.Capa基本用法
- 1.靜態特征提取
- 2.特征分析
- 四.Capa文件存儲及ATT&CK映射
- 1.特征提取
- 2.文件存儲
- 五.批量提取PE文件靜態特征
- 六.總結
作者的github資源:
- 逆向分析:
- https://github.com/eastmountyxz/
- SystemSecurity-ReverseAnalysis
- 網絡安全:
- https://github.com/eastmountyxz/
- NetworkSecuritySelf-study
作者作為網絡安全的小白,分享一些自學基礎教程給大家,主要是關于安全工具和實踐操作的在線筆記,希望您們喜歡。同時,更希望您能與我一起操作和進步,后續將深入學習網絡安全和系統安全知識并分享相關實驗。總之,希望該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!如果文章對您有幫助,將是我創作的最大動力,點贊、評論、私聊均可,一起加油喔!

聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。(參考文獻見后)
一.惡意軟件分析
惡意軟件或惡意代碼分析通常包括靜態分析和動態分析。特征種類如果按照惡意代碼是否在用戶環境或仿真環境中運行,可以劃分為靜態特征和動態特征。
那么,如何提取惡意軟件的靜態特征或動態特征呢? 因此,第一部分將簡要介紹靜態特征和動態特征。
1.靜態特征
沒有真實運行的特征,通常包括:
- 字節碼
- :二進制代碼轉換成了字節碼,比較原始的一種特征,沒有進行任何處理
- IAT表
- :PE結構中比較重要的部分,聲明了一些函數及所在位置,便于程序執行時導入,表和功能比較相關
- Android權限表
- :如果你的APP聲明了一些功能用不到的權限,可能存在惡意目的,如手機信息
- 可打印字符
- :將二進制代碼轉換為ASCII碼,進行相關統計
- IDA反匯編跳轉塊
- :IDA工具調試時的跳轉塊,對其進行處理作為序列數據或圖數據
- 常用API函數
- 惡意軟件圖像化
靜態特征提取方式:
- CAPA
- – https://github.com/mandiant/capa
- IDA Pro
- 安全廠商沙箱
2.動態特征
相當于靜態特征更耗時,它要真正去執行代碼。通常包括:
– API調用關系:比較明顯的特征,調用了哪些API,表述對應的功能
– 控制流圖:軟件工程中比較常用,機器學習將其表示成向量,從而進行分類
– 數據流圖:軟件工程中比較常用,機器學習將其表示成向量,從而進行分類
動態特征提取方式:
- Cuckoo
- – https://github.com/cuckoosandbox/cuckoo
- CAPE
- – https://github.com/kevoreilly/CAPEv2
- 安全廠商沙箱
二.Capa簡介
1.基礎知識
Capa是FireEye(Mandiant)公司開源的靜態分析工具,旨在檢測和識別惡意軟件的高級靜態行為,同時支持IDA插件操作和安裝服務及HTTP通信,方便安全人員快速定位惡意代碼,且能與ATT&CK框架和MBC映射。
通常能分析的樣本格式:
- PE文件
- ELF文
- .NET模塊
- ShellCode文件
下載地址:
- https://github.com/mandiant/capa
- https://github.com/fireeye/capa

該工具運行結果如下所示,它能有效反映惡意軟件在ATT&CK框架中的技戰術特點,比如:DEFENSE EVASION、DISCOVERY、EXECUTION、EXFILTRATION、PERSISTENCE等。

(1)安裝方式一
安裝過程主要是從Github中下載文件,該文件夾中報告Capa規則,即capa-rules子項目路徑下包含了所有類型的檢測規則。下載好后,使用命令安裝:
- pip install -e [path_to_capa]
CAPA規則讀者可以嘗試編寫自適應規則,也可以參考開源大佬們的分享,如下圖所示(參考systemino老師)。
CAPA規則的編寫格式如下,第一個紅框meta用于描述該規則的描述信息,第二個紅框features就是用于匹配的邏輯規則,類似于yara,支持的類型有:api、string、bytes、mnemonic等。
識別結果如下圖所示,比如識別出Lazarus組織的Dtrack后門。
(2)安裝方式二
另一方面可以下載可執行程序,直接運行。下載地址如下:
- https://github.com/mandiant/capa/releases

下載成功之后如下圖所示,直接在CMD或PowerShell中運行即可。

(3)安裝方式三
在IDA中通過插件的方式使用(支持IDA7.2及以上版本),IDA打開樣本后,點擊File->Script File加載ida_capa_explorer.py腳本。該部分建議從事惡意軟件分析的童鞋或技術人員深入研究。

2.CAPA原理詳解
CAPA原理知識推薦大家學習FireEye的相關原文介紹。地址如下:
- capa: Automatically Identify Malware Capabilities

(1)提出問題
在分析程序是否惡意、它們在攻擊期間所扮演的角色、潛在功能和攻擊作者的意圖時,通常需要經驗豐富的逆向工程師來完成。惡意軟件專家可以快速對未知二進制文件進行分類,以獲取初步見解并知道后續分析。然后,經驗不足的分析師較難區分正常和惡意樣本,并且字符串、FLOSS或PE查看器等常用工具顯示的細節級別較低,較難分析惡意軟件的行為特點。
(2)惡意軟件分類
以某個惡意軟件為例,下圖展示文件的字符串和導入表信息。通過這些信息,逆向工程師可以利用字符串和導入API函數猜測程序的功能,但僅限于此。
- 該程序可能會創建互斥鎖、啟動進程、網絡通信(可能與IP地址127.26.152.13通信)。
- Winsock(WS2_32)導入會聯想到網絡功能,但此處沒有名稱,可能是按照序號導入。

動態分析可以進一步挖掘該程序的其它功能。然而,沙盒報告或動態分析工具僅限于從執行代碼路徑中捕獲行為,譬如連接命令和控制(C2)服務器后觸發的功能,通常不建議使用實時互聯網連接來分析惡意軟件。因此,我們需要對它進行逆向分析,如下圖所示,利用IDA Pro對程序的主要功能進行反編譯。盡管我們使用反編譯而不是反匯編來簡化描述過程,但這兩種表示具有相似的概念。

了解編程和Windows API后,我們可以發現惡意軟件具備如下功能:
- 創建互斥鎖以確保只有一個實例在運行
- 創建一個 TCP 套接字,由常量 2 = AF_INET、1 = SOCK_STREAM 和 6 = IPPROTO_TCP 表示
- 連接IP地址 26.152.13.80,端口為127
- 發送和接收數據
- 將接收到的數據與字符串睡眠和可執行文件進行比較
- 創建新流程
盡管并非每個代碼路徑都可以在每次運行時執行,但可以說該惡意軟件具有執行這些行為的能力。此外,通過結合各個結論,可以推斷該惡意軟件是一個后門,可以運行由硬編碼的 C2 服務器指定的任意程序。這一高級別結論使我們能夠確定調查范圍并決定如何應對威脅。
(3)自動識別能力
當然,惡意軟件分析很少這么簡單。意圖識別需要通過包含數百或數千個函數的二進制文件進行傳播。此外,逆向工程具有相當陡峭的學習曲線,需要對許多低級概念(如匯編語言和操作系統內部)有扎實的理解。
但是,通過足夠的練習,我們可以簡單地從 API 調用、字符串、常量和其他功能的重復模式中識別程序中的功能。CAPA證明了一些關鍵分析結論實際上是可以自動識別的。該工具提供了一種通用而靈活的方法來編纂專業知識并將其提供給整個安全社區。當您運行CAPA時,它會將特征和模式識別為人類的力量,從而產生可以推動后續調查步驟的高級結論。例如,當CAPA識別出未加密的HTTP通信功能時,這可能是您需要到代理日志或其他網絡實施跟蹤的提示。
下圖是CAPA的功能介紹,該表格顯示此示例中所有已識別的功能。
- 左側的每個條目都描述一個功能
- 右側的關聯命名空間有助于對相關功能進行分組
CAPA可以非常出色地描述先前討論的所有程序功能。

通過實驗發現,CAPA經常能夠提供令人驚訝的好結果,這也是FireEye希望CAPA能夠識別惡意軟件功能的追求。下圖顯示CAPA對“創建TCP套接字”結論的具體輸出。由圖可知,我們可以通過CAPA檢查二進制文件并發現相關特征的確切位置。此外,我們可以利用語法規則推測它們低級功能的邏輯樹組成。

(4)CAPA原理
CAPA由兩個主要組件組成,這些主要組件通過算法對未知程序進行分類。
- 首先,代碼分析引擎從文件中提取功能。 如字符串、反匯編和控制流。
- 其次,邏輯引擎查找以通用規則格式表示的特征組合。 當邏輯引擎找到匹配項時,CAPA會報告規則描述的功能。
代碼分析引擎從程序中提取低級功能。所有特征都與人類可能識別的內容一致(如字符串或數字),并使CAPA能夠解釋其工作。這些功能通常分為兩大類:
文件特征:文件特征是從原始文件數據及其結構中提取的,例如 PE 文件頭。這是滾動整個文件時可能會注意到的信息。除了上面討論的字符串和導入的 API 之外,還包括導出的函數和節名稱。反匯編特征:反匯編特征是從文件的高級靜態分析中提取的,這意味著反匯編和重建控制流。下圖顯示了選定的反匯編功能,包括API調用、指令助記符、數字和字符串引用。

由于高級分析可以區分程序中的函數和其他范圍,因此CAPA可以在適當的詳細級別應用其邏輯。例如,當不相關的API用于不同的函數時,它不會混淆,因為CAPA規則可以指定它們應該與每個函數獨立匹配。
在設計CAPA 時考慮了靈活且可擴展的特征提取。可以輕松集成其他代碼分析后端。目前,CAPA獨立版本依賴于分析框架。如果您使用的是IDA Pro,您還可以使用 IDA Python 后端運行CAPA。請注意,有時代碼分析引擎之間的差異可能會導致不同的功能集,從而導致不同的結果。幸運的是,這在實踐中通常不是一個嚴重的問題。
(5)CAPA規則
CAPA規則使用結構化的功能組合來描述可以在程序中實現的功能。如果所有必需的功能都存在,CAPA會得出程序包含的功能。
- CAPA規則是包含元數據和語句樹以表達其邏輯的YAML文檔。除此之外,規則語言還支持邏輯運算符和計數。
在下圖所示,“創建 TCP 套接字”規則表示,數字 6、1 和 2以及對API函數套接字或WSA Socket的調用必須存在于單個基本塊的范圍內。基本塊在非常低的級別對匯編代碼進行分組,使其成為匹配緊密相關的代碼段的理想場所。除了在基本塊中,CAPA還支持函數和文件級別的匹配。函數作用域將反匯編函數中的所有功能綁定在一起,而文件作用域包含整個文件中的所有功能。
- 基本塊匹配
- 函數匹配
- 文件級別匹配

下圖突出顯示了使CAPA 能夠向其用戶顯示高級、有意義的結果的規則元數據。規則名稱描述標識的功能,而命名空間將其與技術或分析類別相關聯。我們已經在CAPA輸出的功能表中看到了名稱和命名空間。元數據部分還可以包含作者或示例等字段。我們使用示例來引用文件和偏移量,從而知道存在一種功能,支持對每個規則進行單元測試和驗證。此外,CAPA規則是現實世界惡意軟件中行為的絕佳文檔,因此請隨時保留副本作為參考。

在以后的文章中,我們將討論其他元信息,包括CAPA對ATT&CK和惡意軟件行為目錄框架的支持。
CAPA原理總結:
提取樣本的導入函數、字符串、匯編碼,然后循環遍歷規則進行匹配,實質上就是將逆向時手工篩選高危惡意代碼的工作自動化。當然,對于一些高度混淆后的樣本,建議先解混淆后再使用CAPA進行分析。
三.Capa基本用法
常用用法指令如下:
To identify capabilities in a program run capa and specify the input file:$ capa suspicious.exe capa supports Windows PE files (EXE, DLL, SYS) and shellcode. To run capa on a shellcode file you must explicitly specify the file format and architecture, for example to analyze 32-bit shellcode:$ capa -f sc32 shellcode.bin To obtain detailed information on identified capabilities, capa supports two additional verbosity levels. To get the most detailed output on where and why capa matched on rules use the very verbose option:$ capa -vv suspicious.exe If you only want to focus on specific rules you can use the tag option to filter on fields in the rule meta section:$ capa -t "create TCP socket" suspicious.exe Display capa’s help to see all supported options and consolidate the documentation:$ capa -h
注意:在進行惡意軟件分析工作中,一定要做好隔離防護,在虛擬機中隔離環境下分析。某些APT樣本甚至一定做好防護。
1.靜態特征提取
第一步:在capa工具所在文件夾打開CMD。


第二步:查看capa工具的基本用法。
capa.exe -h
常見指令如下:
- -v, --verbose enable verbose result document (no effect with --json)
- -vv, --vverbose enable very verbose result document (no effect with --json)
- -r RULES, --rules RULES
- -j, --json emit JSON instead of text

D:\capa>capa.exe -husage: capa.exe [-h] [--version] [-v] [-vv] [-d] [-q] [--color {auto,always,never}] [-f {auto,pe,dotnet,elf,sc32,sc64,freeze}] [-b {vivisect}] [-r RULES] [-s SIGNATURES] [-t TAG] [-j] sample
The FLARE team's open-source tool to identify capabilities in executable files.
positional arguments: sample path to sample to analyze
optional arguments: -h, --help show this help message and exit --version show program's version number and exit -v, --verbose enable verbose result document (no effect with --json) -vv, --vverbose enable very verbose result document (no effect with --json) -d, --debug enable debugging output on STDERR -q, --quiet disable all output but errors --color {auto,always,never} enable ANSI color codes in results, default: only during interactive session -f {auto,pe,dotnet,elf,sc32,sc64,freeze}, --format {auto,pe,dotnet,elf,sc32,sc64,freeze} select sample format, auto: (default) detect file type automatically, pe: Windows PE file, dotnet: .NET PE file, elf: Executable and Linkable Format, sc32: 32-bit shellcode, sc64: 64-bit shellcode, freeze: features previously frozen by capa -b {vivisect}, --backend {vivisect} select the backend to use -r RULES, --rules RULES path to rule file or directory, use embedded rules by default -s SIGNATURES, --signatures SIGNATURES path to .sig/.pat file or directory used to identify library functions, use embedded signatures by default -t TAG, --tag TAG filter on rule meta field values -j, --json emit JSON instead of text
By default, capa uses a default set of embedded rules.You can see the rule set here: https://github.com/mandiant/capa-rules
To provide your own rule set, use the `-r` flag: capa --rules /path/to/rules suspicious.exe capa -r /path/to/rules suspicious.exe
examples: identify capabilities in a binary capa suspicious.exe
identify capabilities in 32-bit shellcode, see `-f` for all supported formats capa -f sc32 shellcode.bin
report match locations capa -v suspicious.exe
report all feature match details capa -vv suspicious.exe
filter rules by meta fields, e.g. rule name or namespace capa -t "create TCP socket" suspicious.exe
第三步:提取HGZ木馬的靜態特征。
report all feature match details
- capa -vv suspicious.exe

輸出結果如下圖所示:


Icon資源信息如下:

2.特征分析
下面對特征進行簡要分析。其中,namespace表示匹配具體規則的位置,包括ATT&CK映射和MBC映射。
反調試和混淆檢測:

截屏操作捕獲:

異或處理:

文件及目錄操作:


Hook操作:

鍵盤操作:

互斥量操作:

操作系統檢查操作:

Windows進程創建操作:

寄存器操作:

服務操作:

四.Capa文件存儲及ATT&CK
同理,我們利用CAPA工具對WannaCry蠕蟲進行靜態分析,并介紹文件存儲和ATT&CK映射。
1.特征提取
WannaCry蠕蟲分析如下圖所示:
- capa.exe -vv wannacry

分析結果如下圖所示,都是WannaCry蠕蟲的靜態行為。





2.文件存儲
同時,將提取的特征存儲至本地文件中。關鍵代碼如下:
capa.exe -vv wannacry -j

存儲至json文件命令如下:
capa.exe -vv wannacry -j > wcry.json

顯示結果如下圖所示,可以會用VS Code格式化顯示Json文件。

提取的API特征如下圖所示,我們如果在做靜態分析時,撰寫規則提取這些API函數即可。

ATT&CK映射如下圖所示,對應T1543,其功能為持久化操作。


number表示指令執行對應的數字,詳見CAPA原理解釋部分。

在JSON文件中對應的ATT&CK如下圖所示:

MBC框架如下圖所示:

五.批量提取PE文件靜態特征
最后,盡管CAPA能自動化提取惡意軟件的靜態特征,但在真實場景中,每天會產生海量的惡意軟件。如何批量提取惡意軟件的靜態特征尤為重要,因此,這里給出一個簡答的思路。
- 通過IDA Pro調用CAPA提取
- 通過Python撰寫代碼執行CAPA.exe提取
- 通過PowerShell執行CAPA.exe提取
其中,Python執行CMD命令的關鍵代碼如下:
import oscmd = "winver"print(os.system(cmd))
比如查看Winver。

執行CAPA分析代碼如下:
import oscmd = "cd D://capa & capa.exe -vv hgz-attack(木馬) & cmd"os.system(cmd) #cmd防止關閉

輸出結果如下圖所示:

最后,添加個循環遍歷文件的操作即可,再將提取的Json特征存儲至指定目錄。
六.總結
寫到這里這篇文章就介紹介紹,希望對您有所幫助。忙碌的三月,真的很忙,項目本子論文畢業,等忙完后好好寫幾篇安全博客,感謝支持和陪伴,尤其是家人的鼓勵和支持, 繼續加油!

