
Инструмент машинного обучения, который ранжирует строки по их релевантности для анализа вредоносных программ.
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 устанавливает два исполняемых скрипта flarestrings и rank_strings в ваше окружение Python. При разработке из исходного кода используйте pipenv run flarestrings и pipenv run rank_strings.
flarestrings имитирует функции strings из GNU binutils, а rank_strings принимает входные данные через конвейер, например:
flarestrings <my_sample> | rank_strings
rank_strings поддерживает ряд аргументов командной строки. Позиционный аргумент input_strings указывает файл со строками для ранжирования. Необязательные аргументы:
| Параметр |
|---|
Ранжированные строки записываются в стандартный вывод, если не указан параметр --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 в конвейере, а значит, StringSifter можно аналогичным образом вызывать для выходных данных FLOSS с помощью следующей команды:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
Примечания:
–q подавляет заголовки и форматирование, чтобы отображать только извлечённые строки. Дополнительные сведения о параметрах FLOSS см. в его документации по использованию.floss или rank_strings — должен включать относительный путь, указывающий на виртуальное окружение Python.stringsВ этот дистрибутив включена программа flarestrings, чтобы гарантировать предсказуемый вывод на всех платформах. Если вы решите использовать установленную в системе strings, учтите, что её параметры различаются в зависимости от версии и платформы:
В большинстве дистрибутивов Linux есть программа strings из GNU Binutils. Чтобы извлечь как «широкие», так и «узкие» строки, программу нужно запустить дважды, перенаправив вывод в файл:
strings <my_sample> > strs.txt # narrow strings
strings -el <my_sample> >> strs.txt # wide strings. note the ">>"
Некоторые версии BSD strings, поставляемые с MacOS, не поддерживают широкие строки. Также учтите, что параметр -a, позволяющий strings сканировать весь файл, может быть отключён в конфигурации по умолчанию. Без -a информативные строки могут быть потеряны. Мы рекомендуем установить GNU Binutils через Homebrew или MacPorts, чтобы получить версию strings с поддержкой широких символов. Будьте внимательны и вызывайте правильную версию strings.
В Windows strings не установлена по умолчанию. Мы рекомендуем установить Windows Sysinternals, Cygwin или Malcode Analyst Pack, чтобы получить рабочую версию strings.
Эта версия StringSifter была обучена на выходных данных Strings для выбранных бинарных файлов вредоносного ПО, связанных с первым набором данных EMBER. Порядковые метки создавались с помощью процедур слабого контроля, а обучение с учителем выполняется с помощью градиентного бустинга деревьев решений с целевой функцией learning-to-rank. Дополнительные технические сведения см. в разделе Быстрые ссылки. Обратите внимание, что размеченные данные и обучающий код в настоящее время недоступны, хотя в будущих выпусках мы, возможно, пересмотрим этот подход.
Для сообщений об ошибках и запросах новых функций мы используем GitHub Issues.
flarestrings создан на основе отличного инструмента FLOSS.| Значение |
|---|
| --scores (-s) | Включает оценки ранжирования в вывод |
| --limit (-l) | Ограничивает вывод первыми limit ранжированными строками |
| --min-score (-m) | Ограничивает вывод строками с оценкой >= min-score |
| --batch (-b) | Указывает папку с выходными данными strings для пакетной обработки |