
Статический анализатор безопасности уязвимостей для приложений Ruby on Rails
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
Из корневой директории 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
Веб-сайт: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Brakeman предоставляется бесплатно для некоммерческого использования.
См. COPYING для получения подробной информации.