vendredi 8 août 2008

Rats : Rough Auditing Tool Sécurity

RATS est un logiciel d' audit de code, a tester :


Explication des options :
# -d : spécifier une base de donnée de vulnérabilité alternative
# -h : affiche l'aide d'utilisation
# -i : rapporte les fonctions qui autorise des entrées externes
# -l : force le langage à auditer
# -r : inclus les références qui ne sont pas des appels de fonctions
# -w <1,2,3> : niveau d'alerte (par défault 2)
# -x : ne charge pas la base de donnée des vulnérabilités par défaul
# -R : n'autorise pas l'analyse récursive des fichiers audités
# --xml : rapport d'audit au format XML
# --html : rapport d'audit au format HTML
# --follow-symlinks : suit les liens symboliques
# --columns : Affiche la colonne dans laquelle RATS a trouver un problème de sécurité
# --context : Affiche la ligne dans laquelle RATS a trouver un problème de sécurité

Exemple:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void copier(char *chaine)
{
char buffer[100];
strcpy(buffer, chaine);
}

int main(int argc,char *argv[])
{
if(argc < 2)
{
fprintf(stderr,"oups! et la chaine de caractere elle est ou ?\n\n");
exit(EXIT_FAILURE);
}
copier(argv[1]);
return 0;
}


Au dessus le programme C vulnérable, dans ce programme j' ai volontairement laisser trainer un buffer de taille fixe de 100 octets, le programme prend en argument une chaine de caractere qui sera transmis a la fonction copier() et placer dans le buffer .ça sens le BOF a 3km ! Bon si il affiche pas d 'alerte c' est qu' il est a mettre dans la corbeille :-)

n4pol3on@debian:~/prog_C$ rats -l c --columns --context --html vuln.c

RATS results.

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. <------ Bien vue l amis rats !
File: vuln.c Line:7 char buffer[100]; <------- Le buffer que je parlais


Issue: strcpy <-------- La fonction strcpy()
Severity: High
Check to be sure that argument 2 passed to this function call will no copy more data than can be handled, resulting in a buffer overflow. <--------- Bien vue l' araignée
File: vuln.c Line:8 strcpy(buffer, chaine); <--------- aie aie aie !!!


Inputs detected at the following points
Total lines analyzed: 38
Total time 0.032423 seconds
1172 lines per second


Voila un exemple affreusement exagerer mais c ' est simplement histoire de montrer son utilisation, qui est extremement simple, ceci dit il vaut mieu jetter quand même un coup d' oeil soit même au code ..

Aucun commentaire: