
Ein statischer Sicherheitslücken-Scanner für Ruby on Rails-Anwendungen
Brakeman ist ein statisches Analysetool, das Ruby on Rails-Anwendungen auf Sicherheitslücken überprüft.
Verwendung von RubyGems:
gem install brakeman
Verwendung von Bundler:
group :development do
gem 'brakeman', require: false
end
Verwendung von Docker:
docker pull presidentbeef/brakeman
Verwendung von Docker zum Build aus dem Quellcode:
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
Aus dem Stammverzeichnis einer Rails-Anwendung:
brakeman
Außerhalb des Rails-Stammverzeichnisses:
brakeman /pfad/zu/rails/anwendung
Aus dem Stammverzeichnis einer Rails-Anwendung:
docker run -v "$(pwd)":/code presidentbeef/brakeman
Mit etwas schöneren Farben:
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Für einen HTML-Bericht:
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
Außerhalb des Rails-Stammverzeichnisses (beachten Sie, dass die Ausgabedatei relativ zu /pfad/zu/rails/anwendung ist):
docker run -v '/pfad/zu/rails/anwendung':/code presidentbeef/brakeman -o brakeman_results.html
Brakeman sollte mit jeder Version von Rails von 2.3.x bis 8.x funktionieren.
Brakeman kann Code analysieren, der mit Ruby 2.0-Syntax und neuer geschrieben wurde, benötigt jedoch mindestens Ruby 3.2.0 zur Ausführung.
Für eine vollständige Liste der Optionen verwenden Sie brakeman --help oder lesen Sie die Datei OPTIONS.md.
Um eine Ausgabedatei für die Ergebnisse festzulegen:
brakeman -o ausgabedatei
Das Ausgabeformat wird durch die Dateierweiterung oder die Option -f bestimmt. Aktuelle Optionen sind: text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif und sonar.
Mehrere Ausgabedateien können angegeben werden:
brakeman -o output.html -o output.json
Um sowohl in eine Datei als auch auf die Konsole auszugeben, mit Farben:
brakeman --color -o /dev/stdout -o output.json
Um Informationswarnungen zu unterdrücken und nur den Bericht auszugeben:
brakeman -q
Beachten Sie, dass alle Brakeman-Ausgaben außer Berichten an stderr gesendet werden, sodass es einfach ist, stdout in eine Datei umzuleiten und nur den Bericht zu erhalten.
Um alle Arten von Debug-Informationen anzuzeigen:
brakeman -d
Bestimmte Prüfungen können bei Bedarf übersprungen werden. Der Name muss die korrekte Groß-/Kleinschreibung aufweisen. Um zum Beispiel nach Standardrouten (DefaultRoutes) zu suchen:
brakeman -x DefaultRoutes
Mehrere Prüfungen sollten durch ein Komma getrennt werden:
brakeman -x DefaultRoutes,Redirect
Um das Gegenteil zu tun und nur eine bestimmte Reihe von Tests auszuführen:
brakeman -t SQL,ValidationRegex
Wenn Brakeman etwas langsam läuft, versuchen Sie
brakeman --faster
Dies deaktiviert einige Funktionen, ist aber wahrscheinlich viel schneller (derzeit ist es identisch mit --skip-libs --no-branching). WARNUNG: Dies kann dazu führen, dass Brakeman einige Schwachstellen übersieht.
Standardmäßig gibt Brakeman einen Exit-Code ungleich Null zurück, wenn Sicherheitswarnungen gefunden oder Scanfehler auftreten. Um dies zu deaktivieren:
brakeman --no-exit-on-warn --no-exit-on-error
Um bestimmte Dateien oder Verzeichnisse zu überspringen, die Brakeman möglicherweise nicht parsen kann, verwenden Sie:
brakeman --skip-files datei1,/pfad1/,pfad2/
Um Ergebnisse eines Scans mit einem vorherigen Scan zu vergleichen, verwenden Sie die JSON-Ausgabeoption und dann:
brakeman --compare alter_bericht.json
Dies gibt JSON mit zwei Listen aus: eine mit behobenen Warnungen und eine mit neuen Warnungen.
Brakeman ignoriert Warnungen, wenn es entsprechend konfiguriert ist. Standardmäßig sucht es nach einer Konfigurationsdatei in config/brakeman.ignore.
Um diese Datei zu erstellen und zu verwalten, verwenden Sie:
brakeman -I
Wenn Sie die ignorierten Warnungen vorübergehend sehen möchten, ohne den Exit-Code zu beeinflussen, verwenden Sie:
brakeman --show-ignored
Siehe warning_types für weitere Informationen zu den von diesem Tool gemeldeten Warnungen.
Das HTML-Ausgabeformat bietet einen Auszug aus dem ursprünglichen Anwendungsquellcode, in dem eine Warnung ausgelöst wurde. Aufgrund der Verarbeitung bei der Suche nach Schwachstellen kann der Quellcode nicht mit der gemeldeten Warnung übereinstimmen, und die gemeldeten Zeilennummern können geringfügig abweichen. Dennoch bietet der Kontext einen schnellen Einblick in den Code, der die Warnung ausgelöst hat.
Brakeman weist jeder Warnung eine Vertrauensstufe zu. Dies liefert eine grobe Schätzung, wie sicher das Tool ist, dass eine bestimmte Warnung tatsächlich ein Problem darstellt. Natürlich sollten diese Bewertungen nicht als absolute Wahrheit betrachtet werden.
Es gibt drei Vertrauensstufen:
Um nur Warnungen oberhalb einer bestimmten Vertrauensstufe zu erhalten:
brakeman -w3
Der Schalter -w nimmt eine Zahl von 1 bis 3, wobei 1 niedrig (alle Warnungen) und 3 hoch (nur Warnungen mit höchster Vertrauensstufe) ist.
Brakeman-Optionen können in YAML-Dateien gespeichert und gelesen werden.
Um das Erstellen einer Konfigurationsdatei zu vereinfachen, gibt die Option -C die aktuell eingestellten Optionen aus:
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
Über die Befehlszeile übergebene Optionen haben Vorrang vor Konfigurationsdateien.
Die Standard-Konfigurationspfade sind ./config/brakeman.yml, ~/.brakeman/config.yml und /etc/brakeman/config.yml
Die Option -c kann verwendet werden, um eine zu verwendende Konfigurationsdatei anzugeben.
Es gibt ein verfügbares Plugin für Jenkins/Hudson.
Für noch mehr kontinuierliche Tests versuchen Sie das Guard-Plugin.
Es sind einige GitHub Actions verfügbar.
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Website: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Chat: https://gitter.im/presidentbeef/brakeman
Brakeman ist für die nicht-kommerzielle Nutzung kostenlos.
Siehe COPYING für Details.