Detectar vulnerabilidades en C y C++ con Flawfinder
Hacer funcionar flawfinder
Hacer funcionar flawfinder es tan sencillo como invocar el comando con el directorio o los nombres de los archivos que se van a procesar. Si se indica un directorio, se procesarán todos los archivos que se encuentren y que se reconozcan como archivos fuente en ese directorio.
Además de proporcionar al programa una lista de archivos o directorios, hay varias opciones de la línea de comandos que se utilizan para controlar el comportamiento de las herramientas.
Las opciones se explican al detalle en la página del manual, pero hay opciones particularmente útiles que usaremos en el ejemplo:
- –minlevel=X
- Define como X el nivel mínimo de riesgo para que se incluya en la salida. El rango válido es de 1 a 5, siendo 1 «bajo riesgo» y 5 «alto riesto».
- –html
- Formatea la salida como HTML en lugar de como texto sencillo.
- –context
- Muestra el contexto, por ejemplo, la línea que tiene la potencial debilidad.
Para producir un archivo HTML con el resultado de nuestro programa, teniendo en cuenta sólo las funciones de «alto riesgo», tendríamos que teclear algo como esto:
flawfinder --html --context --minlevel=4 test.c > output.html
El resultado
Al hacer funcionar flawfinder sobre nuestro código de ejemplo, se produce la siguiente salida (Nota del traductor: se mantiene la salida literal del comando, que es en inglés):
Examining test.c
- test.c:18: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination. Consider using strncpy or strlcpy (warning, strncpy is easily misused).
strcpy( dir, argv[ 1 ] );
- test.c:24: [4] (buffer) sprintf: Does not check for buffer overflows. Use snprintf or vsnprintf.
sprintf( dir, "%s", getenv( "HOME" ) );
- test.c:33: [4] (shell) popen: This causes a new program to execute and is difficult to use safely. try using a library call that implements the same functionality if available.
fp = popen( cmd, "r" );
- test.c:42: [4] (format) printf: If format strings can be influenced by an attacker, they can be exploited. Use a constant for the format specification.
printf( buff );
Number of hits = 4
Number of Lines Analyzed = 48 in 0.53 seconds (1392 lines/second)
Comprender la salida
Al igual que ocurría con la salida de RATS, este informe es es muy fácil de leer. Muestra claramente las funciones que se han detectado como potencialmente peligrosas, así como la descripción del problema.
También es muy útil la inclusión de información de contexto, porque así se concentra la atención inmediatamente sobre los puntos de interés y se evita considerar otros que no son tan válidos.
El análisis del código de nuestro ejemplo es bastante inteligente, puesto que no avisa de todas las funciones strcpy problemáticas, sino sólo de la que piensa que podría ser potencialmente peligrosa.
De esta forma, ha conseguido resaltar todas las debilidades de nuestro código sin dar lugar a falsos positivos.
Fuente –> Debian
Aún no hay comentarios.
Deja un comentario
-
Archivos
- septiembre 2008 (12)
-
Categorías
-
RSS
RSS de las entradas
RSS de los Comentarios