
Uno scanner di vulnerabilità di sicurezza tramite analisi statica per applicazioni Ruby on Rails
Brakeman è uno strumento di analisi statica che controlla le applicazioni Ruby on Rails per vulnerabilità di sicurezza.
Utilizzando RubyGems:
gem install brakeman
Utilizzando Bundler:
group :development do
gem 'brakeman', require: false
end
Utilizzando Docker:
docker pull presidentbeef/brakeman
Utilizzando Docker per compilare dal sorgente:
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
Dalla directory principale di un'applicazione Rails:
brakeman
Al di fuori della directory principale di Rails:
brakeman /path/to/rails/application
Dalla directory principale di un'applicazione Rails:
docker run -v "$(pwd)":/code presidentbeef/brakeman
Con colori un po' più belli:
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Per un report HTML:
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
Al di fuori della directory principale di Rails (nota che il file di output è relativo a path/to/rails/application):
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
Brakeman dovrebbe funzionare con qualsiasi versione di Rails dalla 2.3.x alla 8.x.
Brakeman può analizzare codice scritto con sintassi Ruby 2.0 e successivi, ma richiede almeno Ruby 3.2.0 per funzionare.
Per un elenco completo delle opzioni, usa brakeman --help o consulta il file OPTIONS.md.
Per specificare un file di output per i risultati:
brakeman -o output_file
Il formato di output è determinato dall'estensione del file o usando l'opzione -f. Le opzioni attuali sono: text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif e sonar.
Possono essere specificati più file di output:
brakeman -o output.html -o output.json
Per stampare sia su file che sulla console, con colori:
brakeman --color -o /dev/stdout -o output.json
Per sopprimere gli avvisi informativi e stampare solo il report:
brakeman -q
Nota: tutto l'output di Brakeman tranne i report viene inviato a stderr, rendendo semplice redirigere stdout su un file e ottenere solo il report.
Per vedere tutti i tipi di informazioni di debug:
brakeman -d
È possibile saltare specifici controlli, se desiderato. Il nome deve essere con le maiuscole corrette. Ad esempio, per saltare la ricerca di route predefinite (DefaultRoutes):
brakeman -x DefaultRoutes
Più controlli devono essere separati da una virgola:
brakeman -x DefaultRoutes,Redirect
Per fare l'opposto ed eseguire solo un determinato insieme di test:
brakeman -t SQL,ValidationRegex
Se Brakeman è un po' lento, prova
brakeman --faster
Questo disabiliterà alcune funzionalità, ma probabilmente sarà molto più veloce (attualmente è equivalente a --skip-libs --no-branching). ATTENZIONE: Potrebbe causare la mancata rilevazione di alcune vulnerabilità da parte di Brakeman.
Per impostazione predefinita, Brakeman restituirà un codice di uscita diverso da zero se vengono trovati avvisi di sicurezza o se si incontrano errori di scansione. Per disabilitarlo:
brakeman --no-exit-on-warn --no-exit-on-error
Per saltare determinati file o directory che Brakeman potrebbe avere difficoltà a analizzare, usa:
brakeman --skip-files file1,/path1/,path2/
Per confrontare i risultati di una scansione con una scansione precedente, usa l'opzione di output JSON e poi:
brakeman --compare old_report.json
Questo produrrà un JSON con due elenchi: uno di avvisi risolti e uno di nuovi avvisi.
Brakeman ignorerà gli avvisi se configurato per farlo. Per impostazione predefinita, cerca un file di configurazione in config/brakeman.ignore.
Per creare e gestire questo file, usa:
brakeman -I
Se vuoi vedere temporaneamente gli avvisi che hai ignorato senza influenzare il codice di uscita, usa:
brakeman --show-ignored
Vedi warning_types per maggiori informazioni sugli avvisi riportati da questo strumento.
Il formato di output HTML fornisce un estratto dal sorgente originale dell'applicazione dove è stato attivato un avviso. A causa dell'elaborazione effettuata durante la ricerca di vulnerabilità, il sorgente potrebbe non assomigliare all'avviso segnalato e i numeri di riga segnalati potrebbero essere leggermente imprecisi. Tuttavia, il contesto fornisce comunque una rapida occhiata al codice che ha generato l'avviso.
Brakeman assegna un livello di confidenza a ciascun avviso. Questo fornisce una stima approssimativa di quanto lo strumento sia certo che un dato avviso sia effettivamente un problema. Naturalmente, queste valutazioni non dovrebbero essere considerate come verità assolute.
Ci sono tre livelli di confidenza:
Per ottenere solo avvisi al di sopra di un dato livello di confidenza:
brakeman -w3
L'opzione -w accetta un numero da 1 a 3, dove 1 è basso (tutti gli avvisi) e 3 è alto (solo avvisi con la massima confidenza).
Le opzioni di Brakeman possono essere salvate e lette da file YAML.
Per semplificare il processo di scrittura di un file di configurazione, l'opzione -C stamperà le opzioni attualmente impostate:
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
Le opzioni passate da riga di comando hanno priorità sui file di configurazione.
Le posizioni predefinite per la configurazione sono ./config/brakeman.yml, ~/.brakeman/config.yml e /etc/brakeman/config.yml
L'opzione -c può essere usata per specificare un file di configurazione da utilizzare.
È disponibile un plugin per Jenkins/Hudson.
Per test continui ancora più approfonditi, prova il plugin Guard.
Sono disponibili un paio di GitHub Actions.
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Sito web: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Chat: https://gitter.im/presidentbeef/brakeman
Brakeman è gratuito per uso non commerciale.
Vedi COPYING per i dettagli.