Exemple d'audit automatisé : RATS

RATS est un scanner généraliste pour détecter des problèmes de sécurité potentiels dans de nombreux langages de programmation.

Utiliser RATS

Utiliser RATS est simple, cela se résume à l'invoquer avec le nom du répertoire à examiner. Chaque fichier source reconnu sera examiné. RATS comprend plusieurs langages de programmation : C, Perl, PHP et Python, et traitera tous les fichiers source reconnus.

En plus de la liste du répertoire à examiner, il existe plusieurs options de ligne de commande qui sont décrites dans la page du manuel.

Les options les plus utiles sont celles concernant la sortie, telles que :

En supposant que le fichier de test est situé dans le répertoire courant, sans autre fichier source nous pouvons invoquer le scanner par la commande suivante :

rats --warning 1 --html . >sortie.html

Un fichier HTML contenant les résultats de l'examen sera produit, et pourra être chargé dans un navigateur.

Les résultats

Utiliser RATS sur notre code d'exemple produit la sortie suivante :


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 sortie produite est plutôt volumineuse, bien que le code en lui-même soit très court. Cela montre un des revers de l'examen automatique de code : le volume énorme des résultats produits.

Comprendre les résultats

La sortie produite est en fait constituée de la description de chacune des fonctions rencontrées, du numéro de la ligne où la faille a été détectée ainsi que d'une description du problème. (Puisque nous avons utilisé « --warning » pour restreindre la sortie aux fonctions à haut risque, nous avons quelque peu réduit la longueur de la sortie).

Chacun des problèmes découverts devrait être examiné manuellement pour voir s'il y a vraiment un problème, ou si c'était un faux positif (ie. une fonction susceptible d'être mal utilisée mais pourtant utilisée correctement).

Dans ce cas-là, nous pouvons voir que toutes les vulnérabilités de notre code ont été repérées, mais ce n'est pas vraiment clair sans parcourir le code avec un éditeur pour faire correspondre les lignes en question.

Une omission importante est faite dans la sortie : en effet, celle-ci n'inclut pas les lignes concernées – un outil comme flawfinder vous permet de les inclure.


Retour à la page du projet d'audit | Retour à la page des exemples d'audit