基于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.