用於對惡意軟體的HTTP 請求進行指紋辨識的工具。基於Tshark 並使用Python3 編寫。工作原型階段
其主要目的是提供惡意軟體請求的唯一表示(指紋),以幫助識別它們。唯一意味著每個指紋只能在一個特定的惡意軟體家族中看到,但一個家族可以有多個指紋。 Hfinger 以比列印整個請求更短的形式表示請求,但仍可供人類理解。
Hfinger 可用於手動惡意軟體分析,也可用於沙盒系統或SIEM。產生的指紋可用於分組請求、精確定位特定惡意軟體家族的請求、識別同一家族的不同操作,或發現其他安全系統忽略但共享指紋的未知惡意請求。
學術論文伴隨該工具的研究,例如,描述設計選擇的動機,以及與p0f、FATT和Mercury相比對該工具的評估。
該專案的基本假設是,不同惡意軟體家族的HTTP 請求或多或少都是獨一無二的,因此可以對它們進行指紋識別以提供某種識別。 Hfinger 保留了有關某些標頭的結構和值的信息,以提供進一步分析的手段。例如,對類似請求進行分組- 目前,這項工作仍在進行中。
在分析了惡意軟體的HTTP 請求和標頭後,我們發現請求中的一些部分最具特色。這些包括:* 請求方法* 協定版本* 標頭順序* 常用標頭的值* 有效負載長度、熵和非ASCII 字元的存在
此外,也考慮了請求URL 的一些標準特性。所有這些部分都被轉換為一組特性,詳細描述如下。
上述特徵被翻譯成可變長度的表示,即實際的指紋。根據報告模式,使用不同的特徵來對請求進行指紋識別。下面將介紹有關這些模式的更多資訊。特徵選擇過程將在即將發表的學術論文中描述。
安裝前所需的最低要求:* Python>= 3.3,* Tshark>= 2.2.0。
可從PyPI 安裝:
pip install hfinger
Hfinger 已在Xubuntu 22.04 LTS 上tshark使用版本的軟體包進行了測試,但應該也可以在Xubuntu 18.04 或Xubuntu 20.043.6.2等舊版本上使用。 2.6.103.2.3
請注意,與任何PoC 一樣,你應該在獨立的環境中運行Hfinger,至少在Python 虛擬環境中運行。這裡不介紹它的設置,但你可以嘗試本教學。
安裝後,您可以直接從命令列呼叫該工具,hfinger 或作為Python 模組呼叫python -m hfinger。
例如:
foo@bar:~$ hfinger -f /tmp/test.pcap<br>[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst", "ip_src": "127.0.0.1", "ip_dst": "ip_src": "127.0.0.1", "ip_dst": "127.0.00. "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us -ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]<br>
-h可以使用短開關或長開關顯示幫助--help:
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4} ] [-v]<br> [-l LOGFILE]<br><br>Hfinger - fingerprinting malware HTTP requests stored in pcap files<br><br>optional arguments:<br> -h, --help show this help message and exit<br> -f FILE, --file FILE Read a single pcap file<br> -d DIR, --directory DIR<br> Read pcap files from the directory DIR<br> -o output_path, --output-path output_path<br> Path to the output directory<br> -m {0,1,2,3,4}, --mode {0,1,2,3,4}<br> Fingerprint report mode. <br> 0 - similar number of collisions and fingerprints as mode 2, but using fewer features, <br> 1 - representation of all designed features, but a little more collisions than modes 0, 2, and 4, <br> 2 - optimal (the default mode), <br> 3 - the lowest number of generated fingerprints, but the highest number of collisions, <br> 4 - the highest finger , but slightly more fingerprints than modes 0-2<br> -v, --verbose Report information about non-standard values in the request <br> (eg, non-ASCII characters, no CRLF tags, values not present in the configuration list). <br> Without --logfile (-l ) will print to the standard error.<br> -l LOGFILE, --logfile LOGFILE<br> Output logfile in the verbose mode. Implies -v or --verbose switch.<br><br>
您必須提供pcap 檔案的路徑(-f),或包含pcap 檔案的目錄(-d)。輸出為JSON 格式。它將使用原始檔案的名稱列印到標準輸出或提供的目錄(-o)。例如,指令的輸出:
hfinger -f example.pcap -o /tmp/pcap
將被儲存至:
/tmp/pcap/example.pcap.json
報告模式-m/--mode可用於透過提供範圍內的整數來更改預設報告模式0-4。這些模式在所表示的請求特徵或舍入模式上有所不同。 2我們選擇了預設模式( ) 來表示通常在請求分析期間使用的所有特徵,但它也提供了較少的衝突和產生的指紋數量。使用其他模式,您可以實現不同的目標。例如,在模式下,3您會獲得較少數量的生成指紋,但惡意軟體家族之間發生衝突的可能性更高。如果您不確定,則無需更改任何內容。有關報告模式的更多信息,請參見。
從0.2.1Hfinger 版本開始,詳細程度降低。如果您想要接收有關遇到的非標準標頭值、請求非有效負載部分中的非ASCII 字元、缺少CRLF 標記( ) 以及分析的請求中其他非應用程式錯誤問題-v的信息,則應使用/ 。在詳細模式下遇到任何此類問題時,它們將列印到標準錯誤輸出。您也可以使用/開關(它暗示/ )將日誌保存到定義的位置。日誌資料將附加到日誌檔案中。 --verbose\r\n\r\nl--log-v--verbose
從版本開始0.2.0,Hfinger 支援導入到其他Python 應用程式。要在您的應用程式中使用它,只需從中匯入hfinger_analyze函數hfinger.analysis 並使用pcap 檔案的路徑和報告模式呼叫它。傳回的結果是包含指紋辨識結果的字典清單。
例如:
from hfinger.analysis import hfinger_analyze<br><br>pcap_path = "SPECIFY_PCAP_PATH_HERE"<br>reporting_mode = 4<br>print(hfinger_analyze(pcap_path, reporting_mode))<br>
從版本開始,0.使用logging模組記錄遇到的非標準標頭值、請求非有效負載部分中的非ASCII 字元、缺少CRLF 標記(\r\n\r\n)以及分析的請求中不是應用程式錯誤的其他問題的資訊. Hfinger 使用名稱建立自己的記錄器hfinger,但如果沒有事先配置,日誌資訊實際上將被丟棄。如果您想接收此日誌訊息,在呼叫之前hfinger_analyze,您應該配置hfinger記錄器,將日誌等級設為logging.INFO,根據您的需求配置日誌處理程序,並將其新增至記錄器。 hfinger_analyze函數文件字串中提供了更多資訊。
指紋是基於從請求中提取的特徵。完整清單中特定特徵的使用取決於從預定義清單中選擇的報告模式(有關報告模式的更多資訊請參見此處)。下圖表示在預設報告模式下建立範例指紋。
分析請求的三個部分以提取資訊:URI、標頭的結構(包括方法和協定版本)和有效負載。指紋的特定特徵使用(管道)分隔。範例中請求|的最終指紋為:POST
2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag: f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4
以下依照指紋中出現的順序來描述特徵的建立。
首先,提取URI特徵:* URI長度,以長度為底數的對數表示,四捨五入為整數,(示例中URI長43個字符,因此log10(43)≈2),* 目錄數,(示例中有3個目錄),* 平均目錄長度,以目錄實際平均長度的底數10表示,四捨五入為整數,(範例中有三個目錄,總長度為20個字元(6 + 6 + 8),因此log10(20/3)≈1),* 所要求檔案的副檔名,但前提是它在已知副檔名清單中hfinger/configs/extensions.txt,* 平均值長度,以實際平均值長度的底數10表示,四捨五入到小數點後一位,(範例中兩個值的長度均為4個字符,顯然等於4個字符,和log10(4)≈0.6)。
其次,分析了報頭結構特徵: * 請求方法編碼為方法的前兩個字母(PO), * 協議版本編碼為整數(1表示版本1.1,0表示版本1.0,9表示版本0.9), * 報頭的順序, * 以及流行的報頭及其值。
為了表示請求中標頭的順序,每個標頭的名稱都根據中的模式進行編碼hfinger/configs/headerslow.json,例如,User-Agent標頭編碼為us-ag。編碼名稱以分隔,。如果標頭名稱不以大寫字母開頭(或在分析複合標頭(如Accept-Encoding)時不以大寫字母的任何部分開頭),則編碼表示以為前綴!。如果標頭名稱不在已知標頭清單中,則使用FNV1a hash對其進行雜湊處理,並將雜湊用作編碼。
在分析常用標頭時,會檢查請求中是否出現這些標頭。這些標頭包括:* Connection * Accept-Encoding * Content-Encoding * Cache-Control * TE * Accept-Charset * Content-Type * Accept * Accept-Language * User-Agent
當在請求中找到標頭時,將根據典型值表檢查其值以建立對header_name_representation:value_representation。標頭的名稱根據中的架構進行編碼hfinger/configs/headerslow.json(如前所述),並且根據儲存在hfinger/configs目錄或檔案中的架構對值進行編碼configs.py,取決於標頭。在上面的範例中,Accept編碼為ac ,其值為(),得到。這些對按在請求中出現的順序插入指紋中,並使用分隔。如果在編碼表中找不到標頭值,則使用FNV1a 雜湊對其進行雜湊處理。如果標頭值由多個值組成,則對它們進行標記以提供用分隔的值列表,例如,將會得到。但是,在開發階段,如果標頭值包含「品質值」標籤( ),則整個值都使用其FNV1a 雜湊進行編碼。最後,User-Agent和Accept-Language標頭的值直接使用其FNV1a 雜湊進行編碼。 */*as-asasterisk-asteriskac:as-as/
,Accept: / , text/*ac:as-as,te-asq=
最後,在有效載荷特徵中:* 存在非ASCII 字符,用字母表示N,否則以表示A,* 有效載荷的香農熵,四捨五入為整數,* 和有效載荷長度,表示為以10為底的實際有效載荷長度的對數,四捨五入到小數點後一位。
Hfinger以五種報告模式運行,這些模式在指紋所表示的特徵方面有所不同,從而從請求中提取資訊。 這些是(使用工具配置中的數字): * 模式0- 產生與模式相似數量的碰撞和指紋2,但使用更少的特徵, * 模式- 代表所有設計的特徵,但比模式、和1產生的碰撞稍多, * 模式- 最佳(預設模式),代表在請求分析期間通常使用的所有特徵,但也提供少量的碰撞和生成的指紋, * 模式- 在所有模式下產生最少數量的生成指紋,但實現最多的碰撞, *模式- 提供最高的指紋熵,但也比模式-產生的指紋稍多。 02423402
選擇這些模式是為了優化Hfinger 唯一識別惡意軟體家族的能力以及產生的指紋數量。模式0、2和4提供的惡意軟體家族之間碰撞數量相似,但是,模式4產生的指紋比其他兩個模式稍多。在產生的指紋和碰撞數量相當的情況下,模式2比模式表示了更多的請求特徵。模式是唯一代表所有設計特徵的模式,但與模式、和相比,它將碰撞次數增加了近兩倍。模式產生的指紋比其他模式至少少兩倍,但它引入的碰撞數量大約多九倍。所有設計特徵的描述在這裡。 010143
模式由下列特徵組成(依指紋中出現的順序):* 模式0:* 目錄數,* 以整數表示的平均目錄長度,* 所請求檔案的副檔名,* 以浮點數表示的平均值長度, * 標頭的順序,* 熱門標頭及其值,* 以浮點數表示的有效載荷長度。 * 模式1:* 以整數表示的URI 長度,* 目錄數,* 以整數表示的平均目錄長度,* 所請求檔案的副檔名,* 以整數表示的變數長度,* 變數數,* 以整數表示的平均值長度,* 請求方法,* 協定版本,* 標頭的順序,* 熱門標頭及其值,* 非ASCII 字元的存在,* 以整數表示的有效載荷熵,*以整數表示的有效載荷長度。 * 模式2:* 以整數表示的URI 長度、* 目錄數量、* 以整數表示的平均目錄長度、* 所請求檔案的副檔名、* 以浮點數表示的平均值長度、* 請求方法、* 協定版本、* 標頭順序、* 流行標頭及其值、* 存在非ASCII 字元、* 以整數表示的有效載荷熵、* 以浮點數表示的有效載荷長度。 * 模式3:* 以整數表示的URI 長度、* 以整數表示的平均目錄長度、* 所請求檔案的副檔名、* 以整數表示的平均值長度、* 標頭順序。 * 模式4:* 以浮點數表示的URI 長度、* 目錄數量、* 以浮點數表示的平均目錄長度、* 所請求檔案的副檔名、* 以浮點數表示的變數長度、* 以浮點數表示的平均值長度、* 請求方法、* 協定版本、* 標頭順序、* 流行標頭及其值、* 存在非ASCII 字元、* 以浮點數表示的有效載荷熵、*以浮點數表示的有效載荷長度。
下載Hfinger