
Un escáner de vulnerabilidades de seguridad de análisis estático para aplicaciones Ruby on Rails
Brakeman es una herramienta de análisis estático que verifica las aplicaciones Ruby on Rails en busca de vulnerabilidades de seguridad.
Usando RubyGems:
gem install brakeman
Usando Bundler:
group :development do
gem 'brakeman', require: false
end
Usando Docker:
docker pull presidentbeef/brakeman
Usando Docker para compilar desde el código fuente:
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
Desde el directorio raíz de una aplicación Rails:
brakeman
Fuera de la raíz de Rails:
brakeman /path/to/rails/application
Desde el directorio raíz de una aplicación Rails:
docker run -v "$(pwd)":/code presidentbeef/brakeman
Con un color un poco más bonito:
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Para un informe HTML:
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
Fuera de la raíz de Rails (nota que el archivo de salida es relativo a path/to/rails/application):
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
Brakeman debería funcionar con cualquier versión de Rails desde 2.3.x hasta 8.x.
Brakeman puede analizar código escrito con sintaxis de Ruby 2.0 o posterior, pero requiere al menos Ruby 3.2.0 para ejecutarse.
Para una lista completa de opciones, usa brakeman --help o consulta el archivo OPTIONS.md.
Para especificar un archivo de salida para los resultados:
brakeman -o output_file
El formato de salida se determina por la extensión del archivo o usando la opción -f. Las opciones actuales son: text, html, tabs, json, junit, markdown, csv, codeclimate, github, sarif y sonar.
Se pueden especificar múltiples archivos de salida:
brakeman -o output.html -o output.json
Para generar salida tanto a un archivo como a la consola, con color:
brakeman --color -o /dev/stdout -o output.json
Para suprimir las advertencias informativas y solo generar el informe:
brakeman -q
Nota: toda la salida de Brakeman excepto los informes se envía a stderr, lo que facilita redirigir stdout a un archivo y obtener solo el informe.
Para ver todo tipo de información de depuración:
brakeman -d
Se pueden omitir comprobaciones específicas si se desea. El nombre debe tener las mayúsculas correctas. Por ejemplo, para omitir la búsqueda de rutas predeterminadas (DefaultRoutes):
brakeman -x DefaultRoutes
Varias comprobaciones deben separarse por comas:
brakeman -x DefaultRoutes,Redirect
Para hacer lo contrario y solo ejecutar un conjunto específico de pruebas:
brakeman -t SQL,ValidationRegex
Si Brakeman está funcionando un poco lento, prueba
brakeman --faster
Esto deshabilitará algunas características, pero probablemente será mucho más rápido (actualmente es lo mismo que --skip-libs --no-branching). ADVERTENCIA: Esto puede hacer que Brakeman pase por alto algunas vulnerabilidades.
Por defecto, Brakeman devolverá un código de salida distinto de cero si se encuentra alguna advertencia de seguridad o se encuentran errores de escaneo. Para deshabilitar esto:
brakeman --no-exit-on-warn --no-exit-on-error
Para omitir ciertos archivos o directorios que Brakeman pueda tener problemas para analizar, usa:
brakeman --skip-files file1,/path1/,path2/
Para comparar los resultados de un escaneo con un escaneo anterior, usa la opción de salida JSON y luego:
brakeman --compare old_report.json
Esto generará JSON con dos listas: una de advertencias corregidas y otra de advertencias nuevas.
Brakeman ignorará las advertencias si está configurado para hacerlo. Por defecto, busca un archivo de configuración en config/brakeman.ignore.
Para crear y gestionar este archivo, usa:
brakeman -I
Si quieres ver temporalmente las advertencias que ignoraste sin afectar el código de salida, usa:
brakeman --show-ignored
Consulta warning_types para más información sobre las advertencias reportadas por esta herramienta.
El formato de salida HTML proporciona un extracto del código fuente original de la aplicación donde se activó una advertencia. Debido al procesamiento realizado al buscar vulnerabilidades, es posible que el código fuente no se parezca a la advertencia reportada y que los números de línea reportados sean ligeramente inexactos. Sin embargo, el contexto aún proporciona una vista rápida del código que generó la advertencia.
Brakeman asigna un nivel de confianza a cada advertencia. Esto proporciona una estimación aproximada de cuán seguro está la herramienta de que una advertencia determinada es realmente un problema. Naturalmente, estas calificaciones no deben tomarse como verdad absoluta.
Hay tres niveles de confianza:
Para obtener solo advertencias por encima de un nivel de confianza dado:
brakeman -w3
El modificador -w toma un número del 1 al 3, siendo 1 bajo (todas las advertencias) y 3 alto (solo las advertencias de mayor confianza).
Las opciones de Brakeman se pueden almacenar y leer desde archivos YAML.
Para simplificar el proceso de escribir un archivo de configuración, la opción -C mostrará las opciones actualmente establecidas:
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
Las opciones pasadas en la línea de comandos tienen prioridad sobre los archivos de configuración.
Las ubicaciones de configuración predeterminadas son ./config/brakeman.yml, ~/.brakeman/config.yml y /etc/brakeman/config.yml
La opción -c se puede usar para especificar un archivo de configuración a usar.
Hay un plugin disponible para Jenkins/Hudson.
Para aún más pruebas continuas, prueba el plugin Guard.
Hay un par de GitHub Actions disponibles.
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
Sitio web: http://brakemanscanner.org/
Twitter: https://twitter.com/brakeman
Chat: https://gitter.im/presidentbeef/brakeman
Brakeman es gratuito para uso no comercial.
Consulta COPYING para obtener detalles.