
Un analyseur statique de vulnérabilités de sécurité pour les applications Ruby on Rails
Brakeman est un outil d'analyse statique qui vérifie la présence de vulnérabilités de sécurité dans les applications Ruby on Rails.
Avec RubyGems :
gem install brakeman
Avec Bundler :
group :development do
gem 'brakeman', require: false
end
Avec Docker :
docker pull presidentbeef/brakeman
Avec Docker pour compiler à partir des sources :
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
Depuis le répertoire racine d'une application Rails :
brakeman
En dehors de la racine Rails :
brakeman /path/to/rails/application
Depuis le répertoire racine d'une application Rails :
docker run -v "$(pwd)":/code presidentbeef/brakeman
Avec des couleurs un peu plus agréables :
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Pour un rapport HTML :
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
En dehors de la racine Rails (notez que le fichier de sortie est relatif à path/to/rails/application) :
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
Brakeman devrait fonctionner avec toutes les versions de Rails de 2.3.x à 8.x.
Brakeman peut analyser du code écrit avec la syntaxe Ruby 2.0 et plus récente, mais nécessite au moins Ruby 3.2.0 pour s'exécuter.
Pour une liste complète des options, utilisez brakeman --help ou consultez le fichier OPTIONS.md.
Pour spécifier un fichier de sortie pour les résultats :
brakeman -o output_file
Le format de sortie est déterminé par l'extension du fichier ou par l'utilisation de l'option -f. Les options actuelles sont : text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif et sonar.
Plusieurs fichiers de sortie peuvent être spécifiés :
brakeman -o output.html -o output.json
Pour générer une sortie à la fois dans un fichier et sur la console, avec des couleurs :
brakeman --color -o /dev/stdout -o output.json
Pour supprimer les avertissements informatifs et afficher uniquement le rapport :
brakeman -q
Notez que toutes les sorties de Brakeman, à l'exception des rapports, sont envoyées sur stderr, ce qui permet de rediriger facilement stdout vers un fichier pour n'obtenir que le rapport.
Pour voir toutes sortes d'informations de débogage :
brakeman -d
Certaines vérifications peuvent être ignorées, si souhaité. Le nom doit être écrit avec la casse correcte. Par exemple, pour ignorer la recherche de routes par défaut (DefaultRoutes) :
brakeman -x DefaultRoutes
Plusieurs vérifications doivent être séparées par une virgule :
brakeman -x DefaultRoutes,Redirect
Pour faire l'inverse et n'exécuter qu'un certain ensemble de tests :
brakeman -t SQL,ValidationRegex
Si Brakeman est un peu lent, essayez
brakeman --faster
Cela désactivera certaines fonctionnalités, mais sera probablement beaucoup plus rapide (actuellement, cela équivaut à --skip-libs --no-branching). ATTENTION : Cela peut amener Brakeman à manquer certaines vulnérabilités.
Par défaut, Brakeman renvoie un code de sortie non nul si des avertissements de sécurité sont trouvés ou si des erreurs d'analyse sont rencontrées. Pour désactiver ce comportement :
brakeman --no-exit-on-warn --no-exit-on-error
Pour ignorer certains fichiers ou répertoires que Brakeman pourrait avoir du mal à analyser, utilisez :
brakeman --skip-files file1,/path1/,path2/
Pour comparer les résultats d'une analyse avec ceux d'une analyse précédente, utilisez l'option de sortie JSON, puis :
brakeman --compare old_report.json
Cela produira un JSON avec deux listes : une des avertissements corrigés et une des nouveaux avertissements.
Brakeman ignorera les avertissements s'il est configuré pour le faire. Par défaut, il cherche un fichier de configuration dans config/brakeman.ignore. Pour créer et gérer ce fichier, utilisez :
brakeman -I
Si vous souhaitez voir temporairement les avertissements que vous avez ignorés sans affecter le code de sortie, utilisez :
brakeman --show-ignored
Consultez warning_types pour plus d'informations sur les avertissements signalés par cet outil.
Le format de sortie HTML fournit un extrait du code source original de l'application à l'endroit où un avertissement a été déclenché. En raison du traitement effectué lors de la recherche de vulnérabilités, le code source peut ne pas ressembler à l'avertissement signalé et les numéros de ligne rapportés peuvent être légèrement décalés. Cependant, le contexte offre néanmoins un aperçu rapide du code qui a déclenché l'avertissement.
Brakeman attribue un niveau de confiance à chaque avertissement. Cela donne une estimation approximative de la certitude de l'outil qu'un avertissement donné est effectivement un problème. Naturellement, ces évaluations ne doivent pas être considérées comme une vérité absolue.
Il existe trois niveaux de confiance :
Pour n'obtenir que les avertissements au-dessus d'un niveau de confiance donné :
brakeman -w3
L'option -w prend un nombre de 1 à 3, 1 étant faible (tous les avertissements) et 3 étant élevé (uniquement les avertissements de confiance la plus élevée).
Les options de Brakeman peuvent être stockées et lues à partir de fichiers YAML.
Pour simplifier le processus d'écriture d'un fichier de configuration, l'option -C affichera les options actuellement définies :
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
Les options passées en ligne de commande ont priorité sur les fichiers de configuration.
Les emplacements de configuration par défaut sont ./config/brakeman.yml, ~/.brakeman/config.yml et /etc/brakeman/config.yml.
L'option -c peut être utilisée pour spécifier un fichier de configuration à utiliser.
Un plugin est disponible pour Jenkins/Hudson.
Pour encore plus de tests continus, essayez le plugin Guard.
Plusieurs Actions GitHub sont disponibles.
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Site web : http://brakemanscanner.org/
Twitter : https://twitter.com/brakeman
Chat : https://gitter.im/presidentbeef/brakeman
Brakeman est gratuit pour une utilisation non commerciale.
Voir COPYING pour plus de détails.