Ejemplo de auditoría automatizada: RATS

RATS es un analizador de propósito general que se utiliza para detectar potenciales problemas de seguridad en varios lenguajes de programación.

Hacer funcionar RATS

Hacer funcionar RATS es tan sencillo como invocar el comando con el directorio que se va a procesar. Se procesarán todos los archivos que se encuentren y que se reconozcan como archivos fuente. RATS entiende varios lenguajes de programación, C, Perl, PHP y Python, y los tratará como fuentes válidas para examinar.

Hay varias opciones que se pueden proporcionar, además del nombre del directorio que se va a analizar, y se describen en la página del manual.

Las opciones más útiles son las relacionadas con la salida, como:

Suponiendo que tenemos el archivo de prueba situado en el directorio actual sin ningún otro archivo fuente, podemos invocar el analizador con el siguiente comando:

rats --warning 1 --html . >salida.html

Producirá un archivo HTML con el resultado del análisis, que puede cargarse desde un navegador.

El resultado

Al hacer funcionar RATS 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):


Severity: High

Issue: fixed size global buffer

Extra care should be taken to ensure that character arrays that are allocated on the stack are used safely. They are prime targets for buffer overflow attacks.

File: test.c
Lines: 10 11 12

Severity: High

Issue: strcpy

Check to be sure that argument 2 passed to this function call will not copy more data than can be handled, resulting in a buffer overflow.

File: test.c
Lines: 18

Severity: High

Issue: getenv

Environment variables are highly untrustable input. They may be of any length, and contain any data. Do not make any assumptions regarding content or length. If at all possible avoid using them, and if it is necessary, sanitize them and truncate them to a reasonable length.

File: test.c
Lines: 22 24

Severity: High

Issue: sprintf

Check to be sure that the format string passed as argument 2 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle. Additionally, the format string could contain `%s' without precision that could result in a buffer overflow.

File: test.c
Lines: 24

Severity: High

Issue: popen

Argument 1 to this function call should be checked to ensure that it does not come from an untrusted source without first verifying that it contains nothing dangerous.

File: test.c
Lines: 33

Severity: High

Issue: printf

Check to be sure that the non-constant format string passed as argument 1 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle.

File: test.c
Lines: 42

Total lines analyzed: 49
Total time 0.000288 seconds
170138 lines per second


La salida es bastante voluminosa, a pesar de que el propio código es muy breve. Esto muestra uno de los puntos negativos del análisis automatizado, el volumen de información de la salida.

Comprender la salida

La salida que se ha producido es básicamente una descripción de las funciones que se encuentren, el número de línea en el que se ha detectado la debilidad y una descripción del problema. (Como hemos utilizado un nivel de advertencia «--warning» para restringir sólo a las funciones del nivel «alto», hemos reducido en cierta manera la salida).

Cada una de las incidencias que hemos descubierto debería ser examinada manualmente para ver si realmente hay algo mal o si se trata de un falso positivo (por ejemplo, una función que se pudiera utilizar erróneamente, pero que se usa de la forma adecuada).

En este caso, vemos que todas las vulnerabilidades de nuestro código han sido citadas, pero no queda totalmente claro sin abrir el código con un editor e ir revisando las líneas.

Una gran omisión en la salida es que no se incluyen las líneas a las que se hace referencia, algo que flawfinder le permite incluir.


Volver al proyecto de auditoría | Volver a la página de ejemplos de auditoría