
一个根据字符串与恶意软件分析的相关性对其进行排名的机器学习工具。
StringSifter 是一个机器学习工具,可根据字符串与恶意软件分析的相关性自动对其排序。
StringSifter 需要 Python 3.9 或更高版本。运行以下命令以获取代码、运行单元测试并使用该工具:
pip install stringsifter
如需进行开发,请使用 poetry:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev
若要从 StringSifter 安装目录运行单元测试:
poetry run tests -v
pip install 命令会在你的 Python 环境中安装两个可运行脚本:flarestrings 和 rank_strings。从源码进行开发时,请使用 pipenv run flarestrings 和 pipenv run rank_strings。
flarestrings 模拟 GNU binutils 中 strings 的功能,而 rank_strings 接受管道输入,例如:
flarestrings <my_sample> | rank_strings
rank_strings 支持许多命令行参数。位置参数 input_strings 指定要排序的字符串文件。可选参数如下:
| 选项 | 含义 |
|---|---|
| --scores (-s) |
排序后的字符串会写入标准输出,除非指定了 --batch 选项,此时排序结果会写入名为 <input_file>.ranked_strings 的文件。
flarestrings 支持选项 -n(或 --min-len),用于打印长度至少为 min-len 个字符的字符序列,而不是默认的 4 个字符。例如:
flarestrings -n 8 <my_sample> | rank_strings
将仅打印并排序长度大于或等于 8 的字符串。
docker build -t stringsifter -f docker/Dockerfile .
flarestrings 或 rank_strings 参数运行容器,以分别使用相应命令。容器化的命令可以用于管道:cat <my_sample> | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
-v 标志将主机目录暴露给容器:docker run -v <my_malware>:/samples -it stringsifter
其中 <my_malware> 包含用于分析的样本,例如:
docker run -v $HOME/malware/binaries:/samples -it stringsifter
flarestrings /samples/<my_sample> | rank_strings <options>
容器化脚本支持所有命令行参数。
StringSifter 可应用于任意字符串列表,因此对于希望从替代情报收集来源(如实时内存转储、沙箱运行或包含混淆字符串的二进制文件)中获取见解的分析人员来说非常有用。例如,FireEye Labs Obfuscated Strings Solver (FLOSS) 与 Strings 一样提取可打印字符串,但还会揭示已被编码、打包或在堆栈上手动构造的混淆字符串。它可以用作 Strings 的直接替代品,这意味着也可以使用以下命令对 FLOSS 输出类似地调用 StringSifter:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
注意:
–q 参数会抑制标题和格式,仅显示提取的字符串。要了解其他 FLOSS 选项的更多信息,请参阅其使用文档。floss 或 rank_strings 至少有一个必须包含引用 Python 虚拟环境的相对路径。strings 的说明本发行版包含 flarestrings 程序,以确保跨平台的可预测输出。如果你选择运行系统自带的 strings,请注意其选项在不同版本和平台上并不一致:
大多数 Linux 发行版都包含来自 GNU Binutils 的 strings 程序。要同时提取“宽”字符串和“窄”字符串,必须运行该程序两次,并将输出重定向到文件:
strings <my_sample> > strs.txt # 窄字符串
strings -el <my_sample> >> strs.txt # 宽字符串。注意使用 ">>"
某些随 MacOS 打包的 BSD strings 版本不支持宽字符串。另请注意,默认配置中可能禁用了用于扫描整个文件的 -a 选项。如果没有 -a,可能会丢失有信息量的字符串。我们建议通过 Homebrew 或 MacPorts 安装 GNU Binutils,以获得支持宽字符的 strings 版本。请小心调用正确版本的 strings。
Windows 默认不安装 strings。我们建议安装 Windows Sysinternals、Cygwin 或 Malcode Analyst Pack 以获得可用的 strings。
此版本的 StringSifter 使用与第一个 EMBER 数据集 相关的恶意软件二进制样本的 Strings 输出进行训练。使用弱监督程序生成序数标签,并由 梯度提升决策树 以学习排序目标函数执行监督学习。更多技术细节请参阅快速链接。请注意,目前既不提供标签数据,也不提供训练代码,尽管我们可能会在未来的版本中重新考虑这种方法。
我们使用 GitHub Issues 来发布错误报告和功能请求。
flarestrings 源自优秀的工具 FLOSS。| 在输出中包含排序分数 |
| --limit (-l) | 将输出限制为排名前 limit 的字符串 |
| --min-score (-m) | 将输出限制为分数 >= min-score 的字符串 |
| --batch (-b) | 指定一个包含 strings 输出文件的文件夹,用于批量处理 |