
brakeman v8.0.6
Статический анализатор безопасности уязвимостей для приложений Ruby on Rails
Brakeman
Brakeman — это инструмент статического анализа, который проверяет приложения Ruby on Rails на наличие уязвимостей безопасности.
Установка
Через RubyGems:
gem install brakeman
Через Bundler:
group :development do
gem 'brakeman', require: false
end
Через Docker:
docker pull presidentbeef/brakeman
Через Docker со сборкой из исходников:
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
Использование
Локальный запуск
Из корневой директории Rails-приложения:
brakeman
Вне корня Rails:
brakeman /path/to/rails/application
Запуск через Docker
Из корневой директории Rails-приложения:
docker run -v "$(pwd)":/code presidentbeef/brakeman
С более приятной раскраской:
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Для отчёта в HTML:
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
Вне корня Rails (обратите внимание, что выходной файл указывается относительно path/to/rails/application):
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
Совместимость
Brakeman должен работать с любой версией Rails от 2.3.x до 8.x.
Brakeman может анализировать код, написанный с использованием синтаксиса Ruby 2.0 и новее, но для запуска требуется как минимум Ruby 3.2.0.
Основные параметры
Полный список опций можно получить командой brakeman --help или посмотреть в файле OPTIONS.md.
Чтобы указать выходной файл для результатов:
brakeman -o output_file
Формат вывода определяется расширением файла или опцией -f. Текущие варианты: text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif и sonar.
Можно указать несколько выходных файлов:
brakeman -o output.html -o output.json
Чтобы выводить одновременно и в файл, и на консоль, с цветом:
brakeman --color -o /dev/stdout -o output.json
Чтобы подавить информационные предупреждения и выводить только отчёт:
brakeman -q
Обратите внимание: весь вывод Brakeman, кроме отчётов, направляется в stderr, что позволяет легко перенаправить stdout в файл и получить только отчёт.
Чтобы увидеть всю отладочную информацию:
brakeman -d
При желании можно пропустить отдельные проверки. Имя должно быть в правильном регистре. Например, чтобы пропустить поиск маршрутов по умолчанию (DefaultRoutes):
brakeman -x DefaultRoutes
Несколько проверок разделяются запятыми:
brakeman -x DefaultRoutes,Redirect
Чтобы сделать наоборот и запустить только определённый набор тестов:
brakeman -t SQL,ValidationRegex
Если Brakeman работает медленно, попробуйте
brakeman --faster
Это отключит некоторые функции, но, вероятно, будет работать намного быстрее (в настоящее время это эквивалентно --skip-libs --no-branching). ПРЕДУПРЕЖДЕНИЕ: это может привести к тому, что Brakeman пропустит некоторые уязвимости.
По умолчанию Brakeman возвращает ненулевой код завершения, если обнаружены какие-либо предупреждения безопасности или возникли ошибки сканирования. Чтобы отключить это:
brakeman --no-exit-on-warn --no-exit-on-error
Чтобы пропустить определённые файлы или каталоги, которые Brakeman может некорректно обработать, используйте:
brakeman --skip-files file1,/path1/,path2/
Чтобы сравнить результаты сканирования с предыдущим сканированием, используйте опцию вывода JSON, а затем:
brakeman --compare old_report.json
Это выведет JSON с двумя списками: один — исправленные предупреждения, другой — новые предупреждения.
Brakeman будет игнорировать предупреждения, если это настроено. По умолчанию он ищет файл конфигурации в config/brakeman.ignore.
Чтобы создать и управлять этим файлом, используйте:
brakeman -I
Если вы хотите временно увидеть игнорируемые предупреждения, не влияя на код завершения, используйте:
brakeman --show-ignored
Информация о предупреждениях
См. warning_types для получения дополнительной информации о предупреждениях, сообщаемых этим инструментом.
Контекст предупреждений
Формат вывода HTML предоставляет фрагмент исходного кода приложения, в котором было вызвано предупреждение. Из-за обработки, выполняемой при поиске уязвимостей, исходный код может не соответствовать сообщённому предупреждению, а номера строк могут немного отличаться. Тем не менее, контекст даёт быстрый взгляд на код, вызвавший предупреждение.
Уровни уверенности
Brakeman присваивает каждому предупреждению уровень уверенности. Это даёт приблизительную оценку того, насколько инструмент уверен, что данное предупреждение действительно является проблемой. Естественно, эти оценки не следует воспринимать как абсолютную истину.
Существует три уровня уверенности:
- Высокий — либо это простое предупреждение (логическое значение), либо пользовательский ввод, скорее всего, используется небезопасным образом.
- Средний — обычно указывает на небезопасное использование переменной, но переменная может быть как пользовательским вводом, так и нет.
- Низкий — как правило, означает, что пользовательский ввод был косвенно использован потенциально небезопасным образом.
Чтобы получать только предупреждения выше заданного уровня уверенности:
brakeman -w3
Переключатель -w принимает число от 1 до 3, где 1 — низкий (все предупреждения), а 3 — высокий (только предупреждения с наибольшей уверенностью).
Файлы конфигурации
Параметры Brakeman можно сохранять и читать из YAML-файлов.
Чтобы упростить процесс написания файла конфигурации, опция -C выводит текущие установленные параметры:
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
Параметры, переданные в командной строке, имеют приоритет над файлами конфигурации.
Расположение конфигурационных файлов по умолчанию: ./config/brakeman.yml, ~/.brakeman/config.yml и /etc/brakeman/config.yml
Опция -c может использоваться для указания используемого файла конфигурации.
Непрерывная интеграция
Доступен плагин для Jenkins/Hudson.
Для ещё более непрерывного тестирования попробуйте Guard-плагин.
Доступны несколько GitHub Actions.
Сборка
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Кто использует Brakeman?
Сайт/Новости
Веб-сайт: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Чат: https://gitter.im/presidentbeef/brakeman
Лицензия
Brakeman предоставляется бесплатно для некоммерческого использования.
См. COPYING для получения подробной информации.