一.惡意軟件分析
惡意軟件或惡意代碼分析通常包括靜態分析和動態分析。特征種類如果按照惡意代碼是否在用戶環境或仿真環境中運行,可以劃分為靜態特征和動態特征。
那么,如何提取惡意軟件的靜態特征或動態特征呢? 因此,第一部分將簡要介紹靜態特征和動態特征。
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
- – https://capev2.readthedocs.io/en/latest/
- 安全廠商沙箱
二.Cuckoo和Cape沙箱簡介
1.Cuckoo沙箱簡介
Cuckoo Sandbox 是一個開源的自動惡意軟件分析系統,并且是經典的沙箱分析工具。Cuckoo沙箱將在幾秒鐘內為您提供一些詳細的分析結果,概述該文件在隔離環境中執行時的情況。不像在線VirusTotal、VirusShare、微步、AnyRun、Hybrid等在線沙箱,Cuckoo可以實現本地安裝和離地分析,其定制化和可控程度更高。
- https://github.com/cuckoosandbox/cuckoo
Cuckoo Sandbox始于2010年蜜網計劃中的谷歌Summer of Code項目,它最初是由Claudio“nex”Guarnieri設計和開發的。在2010年夏天開啟該工作之后,第一個測試版于2011年2月5日發布,這是Cuckoo第一次公開發布。2011年3月,在谷歌Code Summer of 2011期間,Cuckoo再次被選為蜜網項目的支持項目,在此期間Dario Fernandes加入了該項目并擴展了其功能。

Cuckoo Sandbox started as a Google Summer of Code project in 2010 within The Honeynet Project. It was originally designed and developed by Claudio “nex” Guarnieri, who is still the main developer and coordinates all efforts from joined developers and contributors.
2.Cape沙箱簡介
CAPE Sandbox 是一款用于自動分析可疑文件或惡意軟件的開源系統,它使用自定義組件來監視在隔離環境中運行的惡意進程的行為。CAPE來源于Cuckoo Sandbox,目的是添加自動惡意軟件解包和配置提取——因此它的名字是一個縮寫“配置和有效載荷提取(Config And Payload Extraction)”。自動解包允許基于Yara簽名的分類,以補充網絡(Suricata)和行為(API)簽名。于2016年誕生。
- https://github.com/kevoreilly/CAPEv2
- https://capesandbox.com
CAPE Sandbox is an Open Source software for automating analysis of suspicious files. To do so it makes use of custom components that monitor the behavior of the malicious processes while running in an isolated environment.

CAPE被用來自動運行和分析文件,并收集全面的分析結果,概述惡意軟件在孤立的Windows操作系統中運行時的行為。它可以檢測以下類型的結果:
- 由惡意軟件生成的所有進程執行的win32 API調用的痕跡。
- 惡意軟件在執行過程中創建、刪除和下載的文件。
- 惡意軟件進程的內存轉儲。
- PCAP格式的網絡流量跟蹤。
- 在執行惡意軟件期間截取的Windows桌面截圖。
- 機器的全內存轉儲。
由于CAPE的模塊化設計,它既可以作為獨立的應用程序使用,也可以集成到更大的框架中。它可以用來分析:
- Generic Windows executables
- DLL files
- PDF documents
- Microsoft Office documents
- URLs and HTML files
- PHP scripts
- CPL files
- Visual Basic (VB) scripts
- ZIP files
- Java JAR
- Python files
- Almost anything else
雖然CAPE沙箱的配置和有效載荷提取是最初聲明的目標,但CAPE調試器的首要目標是:為了從任意惡意軟件家族中提取配置文件或解壓縮有效負載,而不依賴進程轉儲(遲早會被壞人破壞),指令級別的監視和控制是必要的。CAPE中的新調試器遵循最大化使用處理器硬件和最小化使用Windows調試接口的原則,允許通過Yara簽名或API調用在引爆期間以編程方式設置硬件斷點,從入口點偷偷地檢測和操縱惡意軟件。這允許捕獲指令跟蹤,或執行操作,如控制流操作或轉儲內存區域。
調試器允許CAPE在其原始功能之外繼續發展,這些功能現在包括了動態反規避繞過。由于現代惡意軟件通常試圖在沙箱中逃避分析,例如通過使用定時陷阱來進行虛擬化或API鉤子檢測,CAPE允許開發動態對策,結合調試器在Yara簽名中的動作,來檢測隱藏的惡意軟件,并執行控制流程操作,迫使樣品完全引爆或跳過規避動作。CAPE的動態旁路越來越多,其中包括:
- Guloader
- Ursnif
- Dridex
- Zloader
- Formbook
- BuerLoader
- Pafish
CAPE利用了許多惡意軟件技術或行為,允許未打包的有效載荷捕獲,這些行為將導致捕獲注入、提取或解壓縮的有效載荷,以便進一步分析。此外,CAPE自動為每個進程創建一個進程轉儲,或者在DLL的情況下,為內存中的DLL模塊映像創建一個進程轉儲。
推薦讀者學習官方文檔:
- https://capev2.readthedocs.io/en/latest/
- https://capev2.readthedocs.io/en/latest/usage/submit.html

3.Cape原理
CAPE Sandbox由處理樣本執行和分析的中央管理軟件組成。每個分析都在一個全新的、孤立的虛擬機中啟動。CAPE的基礎結構由一臺主機(管理軟件)和一些Guest機器(用于分析的虛擬機)組成。主機Host運行管理整個分析過程的沙盒核心組件,而Guest是安全執行和分析惡意軟件樣本的隔離環境。
CAPE的主要架構如下圖所示:
- 推薦的設置是GNU/Linux (Ubuntu LTS最好)作為主機,Windows 7作為客戶。


三.Cape沙箱識別單樣本特征
1.啟動沙箱關鍵步驟
第一步,安裝VMware虛擬機并載入Cape環境鏡像。

第二步,按照四個關鍵步驟啟動Cape沙箱。
- (1)在任意文件夾中運行"sudo virtualbox",現在已經安裝了一個Win7 X64專業版虛擬機。
- (2)進入/opt/CAPEv2/文件夾,運行"sudo python3 cuckoo.py"。
- (3) 在/opt/CAPEv2/文件夾下運行"sudo python3 utils/process.py -p7 auto",參數代表優先級劃分,輸入多個樣本時,沙箱會優先運行高優先級樣本。
- (4)在/opt/CAPEv2/web目錄下(由于環境依賴的問題,必須由指向該文件夾的shell運行該命令),運行"sudo python3 manage.py runserver 127.0.0.1:8088"(該虛擬機的8080端口已被占用,端口可自己指定)。

2.樣本分析
在虛擬機的火狐中打開127.0.0.1:8088,在submit頁面提交樣本即可。
再次強調
在惡意軟件分析中,一定要做好本機保護,包括在虛擬機隔離環境中進行分析,甚至需要斷網防止沙箱逃逸。同時,本人堅決反對滲透和破壞行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護。這里僅是分享惡意軟件分析背后的原理,更好地進行防護。

運行結如下圖所示:

點擊控制面板的“Recent”查看分析結果。由圖可知,本文分析的結果已產生,同時有之前提交的兩個樣本。

對應的分析結果如下圖所示:


此時會遇到一個問題:在做惡意軟件分析過程中,通常會遇到大量的惡意軟件。如果手動添加其過程極其繁瑣并且耗時,如何解決該問題呢?
四.Cape沙箱批量分析惡意軟件
在Cape沙箱中,已經集成對應的批量分析的Python腳本,通過調用腳本來指定要分析的惡意軟件既可以實現批量分析。具體分析過程如下:
1.Python腳本批量分析樣本
該方法通過提供的submit.py命令實現,該文件位置為:
- /opt/CAPEv2/utils/submit.py


submit.py
該文件的代碼如下所示,讀者也可以調用cuckoo在線沙箱完成相關分析,但批量受限,定制化功能較差。
- http://www.cuckoosandbox.org
#!/usr/bin/env python# Copyright (C) 2010-2015 Cuckoo Foundation.# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org# See the file 'docs/LICENSE' for copying permission.
from __future__ import absolute_importfrom __future__ import print_functionimport argparseimport fnmatchimport loggingimport osimport randomimport sys
try: import requests
HAVE_REQUESTS = Trueexcept ImportError: HAVE_REQUESTS = False
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), ".."))
from lib.cuckoo.common.colors import bold, green, red, yellowfrom lib.cuckoo.common.objects import Filefrom lib.cuckoo.common.utils import to_unicodefrom lib.cuckoo.core.database import Databasefrom lib.cuckoo.common.config import Configfrom lib.cuckoo.common.exceptions import CuckooDemuxError
def main(): parser = argparse.ArgumentParser() parser.add_argument("target", help="URL, path to the file or folder to analyze") parser.add_argument("-d", "--debug", action="store_true", help="Enable debug logging") parser.add_argument( "--remote", type=str, action="store", default=None, help="Specify IP:port to a Cuckoo API server to submit remotely", required=False ) parser.add_argument("--user", type=str, action="store", default=None, help="Username for Basic Auth", required=False) parser.add_argument("--password", type=str, action="store", default=None, help="Password for Basic Auth", required=False) parser.add_argument("--sslnoverify", action="store_true", default=False, help="Do not validate SSL cert", required=False) parser.add_argument("--ssl", action="store_true", default=False, help="Use SSL/TLS for remote", required=False) parser.add_argument("--url", action="store_true", default=False, help="Specify whether the target is an URL", required=False) parser.add_argument("--package", type=str, action="store", default="", help="Specify an analysis package", required=False) parser.add_argument("--custom", type=str, action="store", default="", help="Specify any custom value", required=False) parser.add_argument("--timeout", type=int, action="store", default=0, help="Specify an analysis timeout", required=False) parser.add_argument( "--options", type=str, action="store", default="", help='Specify options for the analysis package (e.g. "name=value,name2=value2")', required=False, ) parser.add_argument( "--priority", type=int, action="store", default=1, help="Specify a priority for the analysis represented by an integer", required=False ) parser.add_argument( "--machine", type=str, action="store", default="", help="Specify the identifier of a machine you want to use", required=False ) ...
if __name__ == "__main__": main()
當前Cape沙箱已存在三個惡意軟件分析結果,是通過本地網頁地址提交分析的(單個提交),其結果的序號分別為1、2、3,對應如下圖所示。

假設需要對下圖所示的四個惡意樣本進行批量分析。

下面是調用submit.py腳本的關鍵命令,去到指定目錄并執行submit.py文件,包括兩個關鍵參數:
- 惡意軟件目錄:/home/cape/sample
- 每個樣本分析時間:10秒
cd /opt/CAPEv2/utilspython3 submit.py /home/cape/sample/ --timeout 10
輸出結果如下所示,可以看到四個惡意軟件分別被Cape沙箱分析,其任務執行序號分別為4-7。

cape@cape-virtual-machine:~$ cd /opt/CAPEv2/utilscape@cape-virtual-machine:/opt/CAPEv2/utils$ lsadmin.py linux_mktaps.sh smtp_sinkhole.shapi.py listdump.py stats.pycleaners.py machine.py submit.pycommunity.py procesing_statistics.py tcpdumpwrapper.pycuckoomx.py process.py test_suricata_signature.pydb_migration __pycache__ tridupdate.pydist.py rooter.py vpn2cape.pydumps route.py vpncheck.pyemail_test.py sample_path.py yara_test.py__init__.py smtp_sinkhole.pycape@cape-virtual-machine:/opt/CAPEv2/utils$ python3 submit.py /home/cape/sample/ --timeout 10Success: File "/home/cape/sample/112f9fxxxx190e620.exe" added as task with ID 4Success: File "/home/cape/sample/78d71fxxxxcd9c04a.exe" added as task with ID 5Success: File "/home/cape/sample/hgz" added as task with ID 6Success: File "/home/cape/sample/wannacry" added as task with ID 7cape@cape-virtual-machine:/opt/CAPEv2/utils$
接著,Cape沙箱開始執行來分析樣本。

對應輸出四個文件夾,即為分析的結果。

分析結果會存儲在本地reports文件夾中。

對應四個report報告。

report.html文件如下圖所示:

2.運行結果
當分析完成,幾個文件就存儲在一個專用目錄中。所有的分析都存儲在storage/analyses/目錄下,該目錄位于一個子目錄下,該子目錄以增量數字ID命名,該數字ID表示數據庫中的分析任務。
.|-- analysis.conf|-- analysis.log|-- binary|-- dump.pcap|-- memory.dmp|-- files| |-- 1234567890| `-- dropped.exe|-- logs| |-- 1232.raw| |-- 1540.raw| `-- 1118.raw|-- reports| |-- report.html| |-- report.json| |-- report.maec-4.0.1.xml| `-- report.metadata.xml`-- shots |-- 0001.jpg |-- 0002.jpg |-- 0003.jpg `-- 0004.jpg
下面是一個分析目錄結構的例子:
該部分簡單展示分析的結果,下圖為惡意軟件分析的文件信息。

Signatures信息如下所示:

Dropped Files信息如下:

惡意軟件包含的文件信息如下:

提取的API信息如下圖所示:

report.pdf

report.pdf包含靜態分析的API信息以及動態行為API信息,如下圖所示:
- 靜態API特征
- 動態API特征

動態行為特征具有時間先后順序,可以進一步供大家做惡意軟件分析。


{ "timestamp": "2023-03-26 13:40:51,897", "thread_id": "2180", "caller": "0x004cd32d", "parentcaller": "0x004e5bb9", "category": "registry", "api": "RegOpenKeyExW", "status": false, "return": "0x00000002", "arguments": [ { "name": "Registry", "value": "0x80000002", "pretty_value": "HKEY_LOCAL_MACHINE" }, { "name": "SubKey", "value": "SYSTEM\\CurrentControlSet\\Control\\MediaResources\\msvideo" }, { "name": "Handle", "value": "0x00000000" }, { "name": "FullName", "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\MediaResources\\msvideo" } ], "repeated": 0, "id": 303},
3.Submit an Analysis
最后補充官方網站對批量分析的submit.py描述。
- https://capev2.readthedocs.io/en/latest/usage/submit.html

其運行參數如下:
usage: submit.py [-h] [--remote REMOTE] [--url] [--package PACKAGE] [--custom CUSTOM] [--timeout TIMEOUT] [--options OPTIONS] [--priority PRIORITY] [--machine MACHINE] [--platform PLATFORM] [--memory] [--enforce-timeout] [--clock CLOCK] [--tags TAGS] [--max MAX] [--pattern PATTERN] [--shuffle] [--unique] [--quiet] target positional arguments: target URL, path to the file or folder to analyze optional arguments: -h, --help show this help message and exit --remote REMOTE Specify IP:port to a CAPE API server to submit remotely --url Specify whether the target is an URL --package PACKAGE Specify an analysis package --custom CUSTOM Specify any custom value --timeout TIMEOUT Specify an analysis timeout --options OPTIONS Specify options for the analysis package (e.g. "name=value,name2=value2") --priority PRIORITY Specify a priority for the analysis represented by an integer --machine MACHINE Specify the identifier of a machine you want to use --platform PLATFORM Specify the operating system platform you want to use (windows/darwin/linux) --memory Enable to take a memory dump of the analysis machine --enforce-timeout Enable to force the analysis to run for the full timeout period --clock CLOCK Set virtual machine clock --tags TAGS Specify tags identifier of a machine you want to use --max MAX Maximum samples to add in a row --pattern PATTERN Pattern of files to submit --shuffle Shuffle samples before submitting them --unique Only submit new samples, ignore duplicates --quiet Only print text on failure
如果指定一個目錄作為目標路徑,則該目錄中包含的所有文件將被提交以供分析。
常見的命令提交方式
(1) Submit a local binary
$ ./utils/submit.py /path/to/binary
(2) Submit an URL
$ ./utils/submit.py --url http://www.example.com
(3) Submit a local binary and specify a higher priority
$ ./utils/submit.py --priority 5 /path/to/binary
(4) Submit a local binary and specify a custom analysis timeout of 60 seconds
$ ./utils/submit.py --timeout 60 /path/to/binary
(5) Submit a local binary and specify a custom analysis package
$ ./utils/submit.py --package of package> /path/to/binary
(6) Submit a local binary and specify a custom analysis package and some options (in this case a command line argument for the malware)
$ ./utils/submit.py --package exe --options arguments=--dosomething /path/to/binary.exe
(7) Submit a local binary to be run on the virtual machine cape1
$ ./utils/submit.py --machine cape1 /path/to/binary
(8) Submit a local binary to be run on a Windows machine
$ ./utils/submit.py --platform windows /path/to/binary
(9) Submit a local binary and take a full memory dump of the analysis machine once the analysis is complete
$ ./utils/submit.py --memory /path/to/binary
(10) Submit a local binary and force the analysis to be executed for the full timeout (disregarding the internal mechanism that CAPE uses to decide when to terminate the analysis)
$ ./utils/submit.py --enforce-timeout /path/to/binary
(11) Submit a local binary and set the virtual machine clock. The format is %m-%d-%Y %H:%M:%S. If not specified, the current time is used. For example, if we want to run a sample on January 24th, 2001, at 14:41:20:
$ ./utils/submit.py --clock "01-24-2001 14:41:20" /path/to/binary
(12) Submit a sample for Volatility analysis (to reduce side effects of the CAPE hooking, switch it off with options free=True):
$ ./utils/submit.py --memory --options free=True /path/to/binary
其它參數如下圖所示:

4.Python Functions
為跟蹤提交、示例和總體執行情況,CAPE使用了一種流行的Python ORM,稱為SQLAlchemy,它允許您使用PostgreSQL、SQLite、MySQL和其他幾個SQL數據庫系統來制作沙盒。
CAPE被設計為易于集成到更大的解決方案中并完全自動化。為自動化分析提交,我們建議使用REST API中描述的REST API接口,但如果您想編寫Python提交腳本,您也可以使用add_path()和add_url()函數。

示例如下:
>>> from lib.cuckoo.core.database import Database>>> db = Database()>>> db.add_path("/tmp/malware.exe")1>>>

示例如下:
>>> from lib.cuckoo.core.database import Database>>> db = Database()>>> db.add_url("http://www.cuckoosandbox.org")2>>>
五.總結
寫到這里這篇文章就結束,希望對您有所幫助。忙碌的三月,真的很忙,項目本子論文畢業,等忙完后好好寫幾篇安全博客,感謝支持和陪伴,尤其是家人的鼓勵和支持, 繼續加油!
2023年3月20日,終于完成初稿,凌晨迫不及待來寫一篇博客,紀念下,感恩下!娜璋白首。
- 一.惡意軟件分析
- 1.靜態特征
- 2.動態特征
- 二.Cuckoo和Cape沙箱簡介
- 1.Cuckoo沙箱簡介
- 2.Cape沙箱簡介
- 3.Cape原理
- 三.Cape沙箱識別單樣本特征
- 1.啟動沙箱關鍵步驟
- 2.樣本分析
- 四.Cape沙箱批量分析惡意軟件
- 1.Python腳本批量分析樣本
- 2.運行結果
- 3.Submit an Analysis
- 4.Python Functions
- 五.總結
提問:
- 在真實樣本中,惡意軟件會被加殼和混淆處理,常用脫殼工具為Unipack。那么,大家可以思考下,CAPA提取的API特征都是惡意軟件中均執行的嗎?同時,這些關鍵特征是否都被提取呢?
- 請大家思考靜態特征和動態特征各自的優缺點。
- CAPE沙箱如何實現批量提取,同時如何定制化規則呢?
- CAPE沙箱如何捕獲的API特征,通過HOOK機制嗎?還有哪些可以優化的地方呢?
- CAPE沙箱究竟能檢測逃逸性、高隱蔽的惡意軟件嗎?尤其APT攻擊的樣本。
- 如何撰寫代碼提取Json中所需特征,比如常見的API。
- CAPA是經典的靜態特征提取工具,那么如何提取動態特征呢?動態特征在惡意軟件檢測中又扮演什么角色?
- 個人感覺靜態分析和動態分析是很多年都在研究的內容,目前會與深度學習結合。那么,未來的方法將如何創新呢?怎么更好地自動化識別惡意軟件行為,并且批量識別且更少依賴專家知識。
三月應該是今年最忙碌的一個月了,好多事情。希望一切順利,更希望四月后能沉下心來讀論文和寫論文,繼續加油,只爭朝夕。
安全內參
上官雨寶
一顆小胡椒
FreeBuf
FreeBuf
黑客技術與網絡安全
虹科網絡安全
RacentYY
一顆小胡椒
娜璋AI安全之家
數世咨詢
看雪學苑