
Análisis estático enfocado en seguridad para el Phoenix Framework
Sobelow es una herramienta de análisis estático enfocada en la seguridad para Elixir y el framework Phoenix. Para los investigadores de seguridad, es una herramienta útil para obtener una visión rápida de los puntos de interés. Para los mantenedores de proyectos, se puede usar para prevenir la introducción de una serie de vulnerabilidades comunes.
Actualmente, Sobelow detecta algunos tipos de los siguientes problemas de seguridad:
Las vulnerabilidades potenciales se marcan en diferentes colores según la confianza en su inseguridad. La confianza alta es roja, la confianza media es amarilla y la confianza baja es verde.
Un hallazgo generalmente se marca como "confianza baja" si parece que una función podría usarse de manera insegura, pero no se puede determinar de manera confiable si la función acepta entrada proporcionada por el usuario. Es decir,
Nota: Este proyecto está en constante desarrollo, y se marcarán vulnerabilidades adicionales a medida que pase el tiempo. Si encuentras un error, o deseas solicitar características adicionales o comprobaciones de seguridad, ¡por favor abre un issue!
Para usar Sobelow, puedes agregarlo a las dependencias de tu aplicación.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
También puedes instalar Sobelow globalmente ejecutando lo siguiente desde la línea de comandos:
$ mix escript.install hex sobelow
Para instalar desde la rama master, en lugar de la última versión, se puede usar el siguiente comando:
$ mix escript.install github nccgroup/sobelow
Después de la instalación, la forma más sencilla de escanear un proyecto Phoenix es ejecutar lo siguiente desde la raíz del proyecto:
$ mix sobelow
Nota: Cualquier argumento de ruta debe ser una ruta absoluta, o relativa a la raíz de la aplicación.
--root o -r - Especifica el directorio raíz de la aplicación. Acepta un argumento de ruta, p. ej. ../my_project.
--verbose o -v - Imprime fragmentos de código y detalles adicionales del hallazgo.
--ignore o -i - Ignora los tipos de hallazgo indicados. Acepta una lista de nombres de módulos separados por comas, p. ej. XSS.Raw,Traversal.
--ignore-files - Ignora archivos. Acepta una lista de nombres de archivo separados por comas, p. ej. config/prod.exs.
--details o -d - Obtiene detalles del tipo de hallazgo. Acepta un solo nombre de módulo, p. ej. Config.CSRF.
--all-details - Obtiene detalles de todos los tipos de hallazgo.
--private - Omite las comprobaciones de actualización.
--router - Especifica la ubicación del enrutador. Solo es necesario usarlo si la ubicación del enrutador no es estándar. Acepta un argumento de ruta, p. ej. my/strange/router.ex.
--exit - Devuelve un estado de salida distinto de cero en o por encima de un umbral de confianza de low, medium o high. El valor predeterminado es false, que devuelve un estado de salida cero.
--threshold - Devuelve hallazgos en o por encima de un nivel de confianza de low (predeterminado), medium o high.
--format o -f - Especifica el formato de salida de los hallazgos. Acepta un formato, p. ej. txt o json.
Ten en cuenta que opciones como --verbose no funcionarán con el formato json. Todos los hallazgos formateados como json contienen una clave type, file y line. Otras claves pueden variar.
--quiet - Devuelve una sola línea que indica el número de hallazgos. De lo contrario, no devuelve salida si no hay hallazgos.
--compact - Hallazgos mínimos en una sola línea con salida coloreada según la confianza.
--flycheck - Hallazgos mínimos en una sola línea compatibles con herramientas basadas en flycheck.
--save-config - Genera un archivo de configuración basado en las opciones de la línea de comandos. Consulta Archivos de Configuración para obtener más información.
--config - Ejecuta Sobelow con un archivo de configuración. Consulta Archivos de Configuración para obtener más información.
--mark-skip-all - Marca todos los hallazgos mostrados como omitibles.
--clear-skip - Limpia la configuración creada por --mark-skip-all.
--skip - Ignora los hallazgos que han sido marcados para omitir. Consulta Falsos Positivos para obtener más información.
--version - Muestra la versión actual de Sobelow. Esto es útil para pasos de CI o integración con otras herramientas como Salus.
Sobelow permite a los usuarios guardar opciones de uso frecuente en un archivo de configuración. Por ejemplo, si te encuentras ejecutando constantemente:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Puedes usar la bandera --save-config para crear tu archivo de configuración .sobelow-conf:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Este comando creará el archivo .sobelow-conf en la raíz de tu aplicación. Puedes editar este archivo directamente para hacer cambios.
También puedes ejecutar el comando sin ninguna opción:
$ mix sobelow --save-config
cuando empieces a usar este paquete; el archivo de configuración generado se llenará con los valores predeterminados para cada opción. (Esto ayuda a incorporar rápidamente este paquete en una base de código preexistente).
Ahora, si deseas ejecutar Sobelow con la configuración guardada, puedes ejecutar Sobelow con la bandera --config.
$ mix sobelow --config
Sobelow favorece el exceso de informes frente a la falta de informes. Por lo tanto, es posible que encuentres varios falsos positivos en un análisis típico. Estos hallazgos pueden ignorarse individualmente agregando un comentario # sobelow_skip, junto con una lista de módulos, antes de la definición de la función.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Al integrar Sobelow en un nuevo proyecto, puede haber una gran cantidad de falsos positivos. Para marcar todos los hallazgos impresos como falsos positivos, ejecuta sobelow con la bandera --mark-skip-all.
Una vez que hayas etiquetado los hallazgos apropiados, ejecuta Sobelow con la bandera --skip.
$ mix sobelow --skip
Mientras que los comentarios # sobelow_skip solo pueden marcar hallazgos a nivel de función (y por lo tanto no se pueden usar para saltar problemas de configuración), la bandera --mark-skip-all se puede usar para saltar cualquier tipo de hallazgo.
Las categorías de hallazgos se dividen en módulos. Estos módulos pueden usarse para ignorar clases de hallazgos (mediante las opciones ignore y skip) o para obtener detalles de vulnerabilidades (mediante la opción details).
Esta lista, y otra información útil, se puede encontrar en la línea de comandos:
$ mix help sobelow
Para ejecutar Sobelow contra todas las aplicaciones hijas dentro de una aplicación umbrella con un solo comando, puedes agregar un alias para sobelow en tu archivo mix.exs raíz:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Si deseas usar archivos de configuración en una aplicación umbrella, crea un .sobelow-conf en cada aplicación hija y usa la bandera --config.
Al escanear un proyecto, Sobelow ocasionalmente buscará actualizaciones y mostrará una alerta si hay una nueva versión disponible. Sobelow lleva un registro de la última comprobación de actualización creando un archivo .sobelow en la raíz del proyecto escaneado.
Si no se desea esta funcionalidad, se puede usar la bandera --private con el escaneo.