
una herramienta de análisis estático para encontrar vulnerabilidades en código fuente C/C++
Esto es "flawfinder" por David A. Wheeler.
Flawfinder es un programa simple que escanea código fuente en C/C++ e informa sobre posibles fallos de seguridad. Puede ser una herramienta útil para examinar software en busca de vulnerabilidades, y también puede servir como una introducción simple a las herramientas de análisis estático de código fuente en general. Está diseñado para ser fácil de instalar y usar. Flawfinder soporta el Common Weakness Enumeration (CWE) y es oficialmente compatible con CWE. Soporta varios formatos de salida, incluyendo SARIF, SonarQube y HTML.
Flawfinder puede usarse junto con herramientas de análisis de código basadas en IA. La salida de Flawfinder se puede utilizar para identificar rápidamente qué áreas del código merecen una atención más detallada, que luego un sistema de IA puede examinar con más detalle.
Para más información, consulte el sitio web del proyecto
Flawfinder está diseñado para usarse en sistemas Unix/Linux/POSIX (incluyendo Cygwin, sistemas basados en Linux, MacOS y varios BSD) como herramienta de línea de comandos. Requiere Python (probamos con Python 3; Python 2.7 debería funcionar, pero cada vez está menos probado).
Si solo quieres usarlo, puedes instalar flawfinder con "pip" de Python o con el gestor de paquetes de tu sistema (flawfinder tiene paquetes para muchos sistemas). También soporta una instalación sencilla siguiendo las convenciones habituales de instalación desde código fuente con make install. El archivo INSTALL.md contiene instrucciones de instalación más detalladas. No es OBLIGATORIO instalarlo para ejecutarlo, pero es más fácil de esa manera.
Para ejecutar flawfinder, solo pásale una lista de archivos fuente o directorios a examinar. Por ejemplo, para examinar todos los archivos en "src/" y hacia abajo recursivamente:
flawfinder src/
Para examinar todos los archivos en el directorio actual y hacia abajo recursivamente:
flawfinder ./
Los hallazgos (hits) se asignan con un nivel de riesgo del 0 (riesgo muy bajo) al 5 (riesgo alto). Por defecto, se muestran hallazgos de nivel de riesgo 1 o superior. Puedes mostrar solo hallazgos de nivel de riesgo 4 o superior en el directorio actual y hacia abajo de esta manera:
flawfinder --minlevel 4 ./
La página de manual (flawfinder.1 o flawfinder.pdf) describe cómo usar flawfinder (incluyendo sus diversas opciones) e información relacionada (como cómo soporta CWE). Por ejemplo, la opción --html genera salida en formato HTML. La opción --help da una breve lista de opciones.
Flawfinder debe ser capaz de interpretar correctamente la codificación de caracteres de su código fuente. En la gran mayoría de los casos esto no es un problema, especialmente si el código fuente está correctamente codificado usando UTF-8 y su sistema está configurado para usar UTF-8 (la situación más común con diferencia).
Sin embargo, es posible que flawfinder se detenga si hay un problema de codificación de caracteres y estás ejecutando Python3. El síntoma habitual son mensajes de error como este:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
Desafortunadamente, Python3 no proporciona funciones incorporadas útiles para manejar esto. Por lo tanto, no es trivial solucionar este problema sin depender de bibliotecas externas (que estamos tratando de evitar).
Si tienes este problema, consulta la página de manual de flawfinder para ver una colección de varias soluciones. Una de las más simples es simplemente convertir el código fuente y la configuración del sistema a UTF-8. Puedes convertir código fuente a UTF-8 usando herramientas como la herramienta del sistema iconv o el programa Python cvt2utf; puedes instalar cvt2utf usando pip install cvt2utf.
Más técnicamente, flawfinder utiliza análisis léxico para encontrar tokens (como nombres de funciones) que sugieren posibles vulnerabilidades, estima su nivel de riesgo (por ejemplo, según el texto de las llamadas a funciones) e informa los resultados. Flawfinder no utiliza ni tiene acceso a la mayor parte de la información sobre flujo de control, flujo de datos, tipos de datos, espacios de nombres y ámbitos. Por lo tanto, flawfinder producirá necesariamente muchos falsos positivos de vulnerabilidades y no informará de muchas vulnerabilidades. Por otro lado, flawfinder puede encontrar vulnerabilidades en programas que no se pueden compilar o enlazar. Flawfinder tampoco se confunde tanto con la mayoría de las definiciones de macros y otras rarezas que las herramientas más sofisticadas tienen problemas para manejar.
Hay una acción de GitHub disponible para quienes usan GitHub.
Consulte action.yml
Cree un archivo .yml en .github/workflows con el siguiente contenido:
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
Puede agregar muchas otras adiciones a los argumentos. Por ejemplo, --error-level=4 hará que se devuelva un error si flawfinder encuentra una vulnerabilidad de nivel 4 o superior. Observe el número de versión después del símbolo @; puede seleccionar una versión diferente.
Puede encontrar el nombre de la acción y la cadena de versión en Marketplace haciendo clic en el botón "Use latest/xxx version".
Flawfinder se integra con el plugin cxx de SonarQube. Agregue las reglas de Flawfinder en SonarQube bajo "Administration > CXX External Analyers > Other Rule Definitions" ejecutando Flawfinder una vez usando las siguientes opciones.
flawfinder --listrules --sonar [...]
Luego en su CI/CD ejecute Flawfinder así para generar una salida que SonarQube pueda entender.
flawfinder -CDQ --sonar [...]
Debe redirigir la salida a un archivo que luego pueda cargar en SonarQube mediante la opción sonar.cxx.other.reportPaths.
¡Nos encantan las contribuciones! Para más información sobre cómo contribuir, consulte el archivo CONTRIBUTING.md.
Flawfinder se publica bajo la licencia GNU GPL versión 2 o posterior (GPL-2.0+). Consulte el archivo COPYING para obtener información sobre la licencia.