
Um scanner de vulnerabilidades de segurança de análise estática para aplicações Ruby on Rails
Brakeman é uma ferramenta de análise estática que verifica aplicações Ruby on Rails em busca de vulnerabilidades de segurança.
Usando RubyGems:
gem install brakeman
Usando Bundler:
group :development do
gem 'brakeman', require: false
end
Usando Docker:
docker pull presidentbeef/brakeman
Usando Docker para construir a partir da fonte:
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
A partir do diretório raiz de uma aplicação Rails:
brakeman
Fora da raiz do Rails:
brakeman /caminho/para/aplicação/rails
A partir do diretório raiz de uma aplicação Rails:
docker run -v "$(pwd)":/code presidentbeef/brakeman
Com uma cor um pouco mais agradável:
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Para um relatório HTML:
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
Fora da raiz do Rails (note que o arquivo de saída é relativo a /caminho/para/aplicação/rails):
docker run -v '/caminho/para/aplicação/rails':/code presidentbeef/brakeman -o brakeman_results.html
Brakeman deve funcionar com qualquer versão do Rails de 2.3.x a 8.x.
Brakeman pode analisar código escrito com sintaxe Ruby 2.0 ou superior, mas requer pelo menos Ruby 3.2.0 para executar.
Para uma lista completa de opções, use brakeman --help ou veja o arquivo OPTIONS.md.
Para especificar um arquivo de saída para os resultados:
brakeman -o arquivo_saida
O formato de saída é determinado pela extensão do arquivo ou usando a opção -f. As opções atuais são: text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif e sonar.
Vários arquivos de saída podem ser especificados:
brakeman -o output.html -o output.json
Para enviar a saída para um arquivo e para o console, com cores:
brakeman --color -o /dev/stdout -o output.json
Para suprimir avisos informativos e apenas exibir o relatório:
brakeman -q
Note que toda a saída do Brakeman, exceto os relatórios, é enviada para stderr, facilitando o redirecionamento do stdout para um arquivo e obtendo apenas o relatório.
Para ver todos os tipos de informações de depuração:
brakeman -d
Verificações específicas podem ser ignoradas, se desejado. O nome precisa estar com a capitalização correta. Por exemplo, para ignorar a busca por rotas padrão (DefaultRoutes):
brakeman -x DefaultRoutes
Várias verificações devem ser separadas por vírgula:
brakeman -x DefaultRoutes,Redirect
Para fazer o oposto e executar apenas um determinado conjunto de testes:
brakeman -t SQL,ValidationRegex
Se o Brakeman estiver um pouco lento, tente
brakeman --faster
Isso desativará alguns recursos, mas provavelmente será muito mais rápido (atualmente é o mesmo que --skip-libs --no-branching). AVISO: Isso pode fazer com que o Brakeman perca algumas vulnerabilidades.
Por padrão, o Brakeman retornará um código de saída diferente de zero se algum aviso de segurança for encontrado ou ocorrerem erros de varredura. Para desabilitar isso:
brakeman --no-exit-on-warn --no-exit-on-error
Para ignorar certos arquivos ou diretórios que o Brakeman pode ter dificuldade em analisar, use:
brakeman --skip-files arquivo1,/caminho1/,caminho2/
Para comparar os resultados de uma varredura com uma varredura anterior, use a opção de saída JSON e então:
brakeman --compare relatorio_antigo.json
Isso produzirá JSON com duas listas: uma de avisos corrigidos e outra de novos avisos.
O Brakeman ignorará avisos se configurado para isso. Por padrão, ele procura um arquivo de configuração em config/brakeman.ignore. Para criar e gerenciar este arquivo, use:
brakeman -I
Se você quiser ver temporariamente os avisos ignorados sem afetar o código de saída, use:
brakeman --show-ignored
Veja warning_types para mais informações sobre os avisos reportados por esta ferramenta.
O formato de saída HTML fornece um trecho do código-fonte original da aplicação onde um aviso foi acionado. Devido ao processamento realizado durante a busca por vulnerabilidades, o código-fonte pode não se assemelhar ao aviso reportado e os números de linha reportados podem estar ligeiramente incorretos. No entanto, o contexto ainda fornece uma visão rápida do código que gerou o aviso.
O Brakeman atribui um nível de confiança a cada aviso. Isso fornece uma estimativa aproximada de quão certo a ferramenta está de que um determinado aviso é realmente um problema. Naturalmente, essas classificações não devem ser consideradas como verdade absoluta.
Existem três níveis de confiança:
Para obter apenas avisos acima de um determinado nível de confiança:
brakeman -w3
A opção -w aceita um número de 1 a 3, sendo 1 baixo (todos os avisos) e 3 alto (apenas avisos de maior confiança).
As opções do Brakeman podem ser armazenadas e lidas a partir de arquivos YAML.
Para simplificar o processo de escrever um arquivo de configuração, a opção -C exibirá as opções atualmente configuradas:
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
As opções passadas na linha de comando têm prioridade sobre os arquivos de configuração.
As localizações padrão de configuração são ./config/brakeman.yml, ~/.brakeman/config.yml e /etc/brakeman/config.yml
A opção -c pode ser usada para especificar um arquivo de configuração a ser usado.
Existe um plugin disponível para Jenkins/Hudson.
Para testes contínuos ainda mais, experimente o plugin Guard.
Existem algumas GitHub Actions disponíveis.
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Site: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Chat: https://gitter.im/presidentbeef/brakeman
Brakeman é gratuito para uso não comercial.
Veja COPYING para detalhes.