基於Minhash的代碼關係與調查工具包(MCRIT)
MCRIT是一個創建的框架,旨在簡化代碼相似性中Minhash算法的應用。它可用於快速實現“ shinglers”,即編碼分解功能的屬性的方法,然後通過Minhash算法用於相似性估算。它是針對SMDA發出的拆卸報告量身定制的。
用法
停靠的用法
我們強烈建議將完全包裝的Docker-Crit用於瑣碎的部署和使用。
首先,這將確保您在所有組件中都具有完全兼容的版本,包括持久性數據庫和用於方便交互的Web前端。
獨立用法
自行安裝MCRIT將需要更多步驟。
對於以下內容,我們將Ubuntu作為主機操作系統。
python安裝要求在requirements.txt中列出。 txt,可以使用以下方式安裝:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
默認情況下,MongoDB 5.0用作後端,這也是推薦的操作方式,因為它提供了持久的數據存儲。以下命令概述了Ubuntu上的示例安裝:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
進行獨立安裝時,您可能想根據克隆的存儲庫安裝MCRIT模塊,例如:
在此初始安裝後,如果需要,則可以在沒有Internet連接的情況下使用MCRIT。
手術
MCRIT後端通常分為兩個組件,一台服務器提供一個可以與之合作的API接口,以及一個或多個處理排隊的作業的工人。它們可以使用以下方式以單獨的外殼啟動:
和
默認情況下,REST API服務器將在http://127.0.0.1:8000/上偵聽。
相互作用
無論您選擇哪種安裝,一旦運行,您都可以與MCRIT後端進行交互。
mcrit客戶
我們創建了一個Python客戶端模塊,該模塊能夠與服務器的所有可用端點一起工作。
此客戶端模塊的文檔目前正在開發中。
mcrit cli
還有一個基於此客戶端軟件包的CLI,例如:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions這裡提供了更廣泛的MCRIT CLI文檔
McRit IDA插件
IDA插件目前也正在開發中。要使用它,請首先創建您自己的config.py,並根據您的MCRIT實例的部署進行必要的更改:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
然後簡單地運行找到的腳本
./plugins/ida/ida_mcrit.py
在艾達。
參考數據
在2023年7月,我們開始填充一個GitHub存儲庫,該存儲庫包含用於通用編譯器和庫的現成參考數據。
版本歷史記錄
- 2024-06-20 v1.3.17:工作刪除和清理現在更加健壯,不會意外地清除樣品 - @yankovs -THX!
- 2024-05-10 v1.3.16:已擴展了隊列清理,以清除所有3種類型的查詢(映射,未啟動,SMDA)的文件。
- 2024-04-17 v1.3.15:工人類型
spawningworker現在將在queueconfig.queue_spawningworker_children_timeout秒後終止兒童。 - 2024-04-02 v1.3.14:實驗:引入新的工人類型
spawningworker - 此變體將像往常一樣從隊列中消費作業,但將實際的工作執行遞送到一個單獨的(子)過程中,這應該減少鎖定內存分配的問題。 - 2024-04-02 v1.3.13:清理隊列時,現在還刪除了所有失敗的作業@yankovs-THX!
- 2024-03-06 v1.3.12:修復了一個錯誤,在該錯誤中,根據@yankovs-thx報導,對最近的樣品的最新樣品將導致關鍵錯誤!
- 2024-02-21 v1.3.10:Bump SMDA至1.13.16,涵蓋了更好的逃脫類別中的另外200條說明(影響Minhashes)。
- 2024-02-16 v1.3.9:完成和集成的自動排隊清理功能(默認為默認情況下)@yankovs-THX提出了!
- 2024-02-15 v1.3.8:bump smda解決SMDAFUNTICT中版本識別的問題,固定的異常打印在IDA插件的Mcritinterface中(THX到@malwarefrank !!)。
- 2024-02-12 v1.3.5:重新計算Minhashes現在將顯示正確的百分比(THX到@malwarefrank !!)。
- 2024-02-02 v1.3.4:IDA插件中的迷你修復程序,以避免引用潛在的非初始化對象(THX至 @r0ny123 !!)。
- 2024-02-01 v1.3.2:修復:非平行匹配現在輸出相同的數據格式(THX至@dannyquist !!)。
- 2024-01-30 v1.3.1:與MongoDB的連接現在可以完全配置(thx到@dannyquist !!)。
- 2024-01-24 v1.3.0:打破:里程碑釋放,對Pichash和Minhash進行了索引改進。為了確保完全向後兼容,建議對所有哈希進行重新計算。檢查此遷移指南。
- 2024-01-23 v1.2.26:將Lief固定到0.13.2,以確保固定的SMDA保持兼容。
- 2024-01-09 v1.2.25:確保我們可以提供系統狀態,無論是否有
db_state和db_timestamp 。 - 2024-01-05 v1.2.24:現在支持CLI中的“查詢”參數,以及緊湊的匹配點(無功能匹配信息)以減少文件足跡。
- 2024-01-03 v1.2.23:限制最大導出尺寸以保護系統免受OOM崩潰的影響。
- 2024-01-02 v1.2.22:引入了具有便利功能的唯一blocksult的數據類。
- 2023-12-28 v1.2.21:McRitclient現在進行二進制查詢匹配的通行證。
- 2023-12-28 v1.2.20:現在狀態提供最後DB更新的時間戳。
- 2023-12-13 v1.2.18:界限檢查與傳遞給getuniqueBlocks的樣本_ids。
- 2023-12-05 v1.2.15:為作業對象添加了便利功能,版本編號與McRitWeb對齊。
- 2023-11-24 v1.2.11:SMDA固定在版本1.12.7之前,然後我們升級SMDA並引入數據庫遷移以重新計算PIC + PICBLOCK HASHES,並改進了概括。
- 2023-11-17 v1.2.10:增加了通過標頭字段為服務器設置授權令牌的功能:
apitoken ;增加了通過工作組過濾的能力;增加了失敗孤兒工作的能力。 - 2023-10-17 v1.2.8:工作組中的較小修復。
- 2023-10-16 v1.2.6:總結了隊列統計,精緻的工作分類。
- 2023-10-13 v1.2.4:暴露的隊列/作業刪除rest接口,通過索引和參數化的mongoDB查詢提高了各種隊列查找的查詢速度。
- 2023-10-13 v1.2.3:現在,工人將從過程中的作業中脫離註冊(如果他們崩潰(Thx to @yankovs)用於代碼模板)。
- 2023-10-03 v1.2.2:最小/最大數量樣本的匹配點過濾(包括修復)。
- 2023-10-02 v1.2.0:病毒公告的里程碑釋放2023。
- 2023-09-18 v1.1.7:bugfix:任務與0個頻段匹配現在,現在停用了Minhash的匹配,就像以前一樣。還匹配工作進度百分比固定。
- 2023-09-15 v1.1.6:blockMatching中的錯誤文件,與作業對象交互的便利功能。
- 2023-09-14 v1.1.5:停用槍支作為默認的WSGI處理程序,暫時是由於處理較重的呼叫時未返回呼叫的問題。
- 2023-09-14 v1.1.4:bugfix:
setup.py中的data_files添加了requirements.txt 。 - 2023-09-13 v1.1.3:將一些性能關鍵常數提取到可在MinhashConfig和Storageconfig中配置的參數中,批處理匹配的固定進度報告,BugFix:GunicornConfig的使用:使用GunicornConfig對適當的數據類別。
- 2023-09-13 v1.1.1:簡化的要求 /設置,不包括Windows的
gunicorn (THX至@yankovs !!)。 - 2023-09-12 v1.1.0:對於Linux部署,McRit現在使用
gunicorn而不是waitress作為WSGI服務器,因為性能更好。由於Gunicorn需要自己的配置,因此需要將次要版本(THX到@yankovs !!)碰到。 - 2023-09-08 V1.0.21:McRitclient的所有方法現在將Apitokens/用戶名轉發到後端。
- 2023-09-05 v1.0.20:使用兩個組件表示Samplementry中的地址,在MongoDB中存儲時功能Entucterry以解決BSON限制(THX至@yankovs)。
- 2023-09-05 v1.0.19:統計現在正在使用一段時間前創建的內部計數器(THX到@yankovs)。
- 2023-08-30 v1.0.18:通過ICFG關係對結果進行了精緻的Linkhunt評分和聚類。
- 2023-08-24 v1.0.15:集成的首次嘗試在MatchingResult中鏈接狩獵能力。
- 2023-08-24 V1.0.13:重建Minhash樂隊將不再爆炸RAM使用。刪除了冗餘路徑檢查(THX到@yankovs)。
- 2023-08-23 V1.0.12:添加了重建用於索引的Minhash頻段的能力。
- 2023-08-22 v1.0.11:修復了一個錯誤,其中導入批量數據時,也未添加
function_name作為function_label 。 - 2023-08-11 v1.0.10:修復了一個錯誤,其中導入批量數據時,在將minhashes添加到頻段之前不會調整function_ID,這可能導致不存在的函數_ids。
- 2023-08-02 V1.0.9:IDA插件現在可以按塊大小和Minhash分數過濾,優化的佈局和用戶體驗(THX的反饋給 @r0ny123 !!)
- 2023-07-28 v1.0.8:IDA插件現在可以顯示遠程功能的彩色圖形,並對當前查看的功能進行查詢(對於基本塊)。
- 2023-06-06 v1.0.7:匹配點上的擴展過濾功能。
- 2023-06-02 v1.0.6:IDA插件現在可以任務匹配作業,顯示其結果並批量導入標籤。匹配物的協調。
- 2023-05-22 v1.0.3:在Malpedia repo文件夾上使用MCRIT CLI時,路徑驗證的更多魯棒性。
- 2023-05-12 v1.0.1:IDA插件的標籤導入的一些進度。 McRitWeb在McRitclient中反映了API擴展。
- 2023-04-10 V1.0.0:BotConf 2023的里程碑釋放。
- 2023-04-10 V0.25.0:IDA插件現在可以為當前查看的功能做功能查詢。
- 2023-03-24 v0.24.2:mcritclient可以轉髮用戶名/apitoken,addjsonReport現在可以轉發。
- 2023-03-21 v0.24.0:現在可以在提交的用戶/日期沿官方設備存儲其他功能列表。
- 2023-03-17 v0.23.0:現在可以查詢單個smdafunctions(同步)。
- 2023-03-15 v0.22.0:McRitclient現在支持Apitokens和原始響應,以進行一部分功能。
- 2023-03-14 V0.21.0:後端支撐,以進行更多細粒度過濾。
- 2023-03-13 v0.20.6:在MatchResult中按得分過濾家庭/樣本的後端支持。
- 2023-02-22 v0.20.4:用於計算唯一分數並訪問這些結果的錯誤文件。
- 2023-02-21 v0.20.3:支持前端功能並進行結果呈現。
- 2023-02-17 v0.20.2:擴展匹配報告對象,以支持前端改進。
- 2023-02-14 v0.20.0:大修控制台客戶端,以簡化基於殼的後端交互。
- 2023-01-12 v0.19.4:匹配物的附加過濾功能。
- 2022-12-13 V0.19.1:現在有可能需要特定的(更高)候選者的頻段匹配(即減少匹配的模糊性)。
- 2022-12-13 v0.18.x:啟用任意功能ID的匹配。
- 2022-11-25 v0.18.9:加速查詢匹配。
- 2022-11-18 V0.18.8:刪除和修改的協調處理,次要修復。
- 2022-11-13 v0.18.7:急劇加速樣品刪除。
- 2022-11-13 v0.18.6:添加功能以修改現有樣本和家庭信息。
- 2022-11-11 V0.18.2:升級匹配過程現在應該能夠更加穩健,有效地處理較大的二進製文件。
- 2022-11-03 V0.18.1:次要修復。
- 2022-11-03 V0.18.0:唯一的塊隔離現在還為Yara規則,重組結果輸出生成了建議。
- 2022-10-24 v0.17.4:統一設置,有要求,提高了處理交叉作業的存儲效率。
- 2022-10-18 v0.17.3:添加了一個便利腳本,以遞歸從半結構化文件夾中產生SMDA報告。
- 2022-10-13 v0.17.2:通過處理較小批次的處理功能,在Minhash計算過程中固定潛在的OOM問題。
- 2022-10-12 v0.17.1:添加了一個函數來安排一個將確保對所有樣本/功能計算的作業。
- 2022-10-11 v0.17.0:搜索唯一塊現在是通過工人而言是一項與眾不同的工作。
- 2022-10-11 v0.16.0:現在將使用其示例/功能詞來存儲MatchQuery作業的樣本,以允許更好的後處理。
- 2022-10-04 V0.15.4:服務器現在可以顯示其版本。
- 2022-09-28 V0.15.3:解決較大實例的性能問題,為獨特塊生成逃逸的指令序列。
- 2022-09-26 v0.15.0:現在在後端的交叉喬布斯開始提供功能,以識別樣本中唯一的基本塊。
- 2022-08-29 V0.14.2:部署的次要修復。
- 2022-08-22 v0.14.0:工作現在可以取決於其他工作(準備將交叉喬布斯搬到後端),QoL改進工作處理。
- 2022-08-17 v0.13.1:添加的命令行選項用於分析(需要CPROFILE)。
- 2022-08-09 V0.13.0:現在可以對Pichash和Picblockhash匹配進行有效的直接查詢。
- 2022-08-09 v0.12.3:for Familyentry
- 2022-08-08 v0.12.2:用於交付XCFG數據的錯誤文件,添加了缺失的依賴項。
- 2022-08-08 V0.12.0:集成的高級搜索語法。
- 2022-08-03 v0.11.0 :(打破)家庭現在以家庭意識為代表。
- 2022-08-03 v0.10.3:現在默認情況下,在DB中留下功能XCFG數據,通過REST API和MCRITCLIENT對其進行訪問。
- 2022-07-29 v0.10.2:刪除家庭的添加能力 - 現在還保留XCFG信息默認情況下所有功能。
- 2022-07-12 V0.10.1:提高性能。
- 2022-07-12 v0.10.0 :(打破)簡化作業處理。
- 2022-05-13 v0.9.4:用於接收提交文件的錯誤修復。
- 2022-05-13 v0.9.3:匹配物的進一步更新。
- 2022-05-13 V0.9.2:在MatchingResult中添加了另一個字段和更多的便利功能,以獲得更好的訪問 - 這些正在破壞以前創建的MatchingResults的破壞更改。
- 2022-05-05 V0.9.1:二進制提交的處理,Minhash排隊的次要修復 - 初始版本。
- 2022-02-09 v0.9.0:在mcrit中添加了紫紅色。
- 2022-01-19 V0.8.0:將客戶端和示例遷移到主要MCRIT存儲庫中。
- 2021-12-16 V0.7.0:初始私人版本。
學分和筆記
感謝Steffen Enders和Paul Hordiienko對該項目的內部研究原型的貢獻!感謝曼努埃爾·布拉特(Manuel Blatt)對該項目以及客戶模塊的重大貢獻和重構!
歡迎拉請求! :)
執照
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.