
Инструмент CLI для статического анализа, который уменьшает поверхность атаки Node.js-приложений путем построения графов зависимостей и удаления неиспользуемых модулей и функций в грубом или точном режимах.
Mininode — это CLI-инструмент, предназначенный для уменьшения поверхности атаки приложений Node.js с помощью статического анализа исходного кода. Он поддерживает два режима сокращения: (1) грубый (coarse) и (2) точный (fine).
Mininode строит граф зависимостей (используемые модули и функции) приложения, начиная с главного файла, то есть точки входа приложения. Mininode инициализирует точку входа значением поля main файла package.json, если оно существует. В противном случае используется index.js.
Пример использования: node index.js <путь к корневой папке приложения Node> --mode=(coarse|fine). Ниже приведён список опций, которые можно передать Mininode.
Список опций командной строки, которые можно передать Mininode.
--destination, -d: путь, по которому Mininode сохранит сокращённое приложение Node.js. Значение по умолчанию: mininode.--dry-run: просто генерирует mininode.json без изменения исходного приложения.--mode, -m: режим сокращения. Допустимые значения: coarse или fine. В режиме coarse Mininode выполняет только грубозернистое сокращение. В режиме fine Mininode выполняет точнозернистое сокращение. В целом грубозернистое сокращение надёжнее, так как Mininode не пытается сократить неиспользуемые функции внутри модуля. Значение по умолчанию: coarse.--silent: отключает вывод в консоль. Это повышает производительность Mininode.--verbose: выводит дополнительную информацию в консоль. Значение по умолчанию: false.--log: Mininode создаёт внутри журнальный файл, содержащий граф зависимостей приложения в формате JSON. Значение по умолчанию: true.--log-output: имя журнального файла, создаваемого Mininode. Значение по умолчанию: mininode.json.--compress-log: сжимает итоговый журнальный файл. По умолчанию всё выгружается в журнальный файл. В production рекомендуется передавать флаг --compress-log для экономии места.--seeds: начальные файлы, с которых Mininode начнёт построение графа зависимостей. Вы можете указать несколько начальных файлов, разделяя их двоеточием.--skip-stat: пропускает вычисление статистики.--skip-reduction: если передан, Mininode не будет сокращать JavaScript-файлы. Значение по умолчанию: false.--skip-remove: если передан, Mininode не будет удалять неиспользуемые JavaScript-файлы. Значение по умолчанию: false.eval. Если Mininode обнаруживает динамическое поведение в приложении, он завершает работу с ошибкой DYNAMIC_BEHAVOUR_DETECTED.Подробности нашей работы можно найти в следующей научной статье:
Mininode: Reducing the Attack Surface of Node.js Applications [PDF]
Igibek Koishybayev, Alexandros Kapravelos
Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID), 2020
Если вы используете Mininode в своих исследованиях, процитируйте нашу работу с помощью этой записи Bibtex:
@conference{mininode-raid20,
title = {{Mininode: Reducing the Attack Surface of Node.js Applications}},
author = {Koishybayev, Igibek and Kapravelos, Alexandros},
booktitle = {{Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID)}},
year = {2020}
}
Мы придерживаемся semistandard.