Splimter Comment effectuer une analyse souillée
-
11-12-2019 - |
Question
Comment effectuer une analyse accumulée à l'aide d'une attelle?
J'ai installé Splint sur mon Ubuntu 12.04. Créé un petit boîtier de test comme ci-dessous:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
char a[10];
strncpy(a,argv[1],10);
printf(a);
return 0;
}
a également créé un fichier splint.xh avec le contenu suivant:
int printf (/*@untainted@*/ char *fmt, ...);
char *fgets (char *s, int n, FILE *stream) /*@ensures tainted s@*/ ;
char *strcat (/*@returned@*/ char *s1, char *s2) /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;
void strncpy (/*@returned@*/ char *s1, char *s2, size_t num) /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;
a également créé un fichier splint.mts avec le contenu ci-dessous:
attribute taintedness
context reference char *
oneof untainted, tainted
annotations
tainted reference ==> tainted
untainted reference ==> untainted
transfers
tainted as untainted ==> error "Possibly tainted storage used where untainted required."
merge
tainted + untainted ==> tainted
defaults
reference ==> tainted
literal ==> untainted
null ==> untainted
end
Puis a finalement exécuté l'outil d'attelage avec la commande:
splint -mts splint prg001.c
où PRG001.C est l'entrée d'échantillon, "Splint" fait référence à splint.mts et fichier splint.xh. Tous les fichiers sont dans le répertoire actuel.
La sortie que j'ai reçue est:
Splint 3.1.2 --- 21 août 2012
PRG001.C: (en fonction de la fonction) PRG001.C: 6: 1: Le paramètre de chaîne de format à imprimer n'est pas une constante de la compilation: une Le paramètre de format n'est pas connu au moment de la compilation. Cela peut conduire à la sécurité vulnérabilités car les arguments ne peuvent pas être vérifiés. (Utiliser -FormatConst d'inhiber l'avertissement) PRG001.C: 3: 14: Paramètre Argc Non utilisé Un paramètre de fonction n'est pas utilisé dans le corps de la fonction. Si l'argument est nécessaire pour le type de compatibilité ou de plans futurs, utilisez / @unused @ / dans le Déclaration d'argumentation. (Utilisez -paramuse pour inhiber l'avertissement)
Vérification finie --- Avertissements de code
Il n'y a pas de soupçon d'une analyse corrompue dans la sortie. Quelqu'un peut-il m'aider s'il vous plaît sur la manière d'obtenir l'analyse souillée à l'aide de l'attelle.
merci
La solution
Le problème était avec le fichier splint.xh.
Je change le printf en printfxxx et cela a fonctionné bien.
Cela impliquait que la définition standard écrasait mon fichier .xh.Cela résolva mon problème et maintenant que les variables émettent des variables contaminées et le flux de souillure.