Splint Come eseguire l'analisi in tanice
-
11-12-2019 - |
Domanda
Come eseguire l'analisi in tanice usando la stecca?
Ho installato la stecca sul mio Ubuntu 12.04. Creato un piccolo caso di prova come di seguito:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
char a[10];
strncpy(a,argv[1],10);
printf(a);
return 0;
}
.
Creato anche il file Splint.xh con il seguente contenuto:
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 @*/ ;
.
Creato anche il file Splint.mts con il seguente contenuto:
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
.
Quindi infine ha eseguito lo strumento di splint con il comando:
splint -mts splint prg001.c
.
DOVE PRG001.C è l'ingresso del campione, "Splint" si riferisce al file di Splint.mts e Splint.xh. Tutti i file sono nella directory corrente.
L'uscita che ho ricevuto è:
Splint 3.1.2 --- 21 ago 2012
PRG001.C: (in funzione principale) PRG001.C: 6: 1: formato Il parametro stringa a stampaF non è una costante di compilazione: un Il parametro del formato non è noto in compilazione-tempo. Questo può portare alla sicurezza vulnerabilità perché gli argomenti non possono essere controllati. (Uso -formatconst per inibire l'avvertimento) PRG001.C: 3: 14: parametro ARGC non utilizzato Un parametro funzione non viene utilizzato nel corpo della funzione. Se l'argomento. è necessario per il tipo di compatibilità o piani futuri, utilizzare / @unused @ / nel Dichiarazione degli argomenti. (Utilizzare -Paramuse per inibire l'avviso)
Controllo finito --- 2 Avvertenze del codice
Non vi è alcuna inclinazione di alcuna analisi taint nell'output. Qualcuno può aiutarmi a aiutarmi su come ottenere l'analisi in tanice fatta usando la stecca.
Grazie
Soluzione
Il problema è stato con il file Splint.xh.
Cambia la printf in PrintFXXX e ha funzionato bene.
Ciò impliciò che la definizione standard sovrascrivesse il mio file .xh.Questo ha risolto il mio problema e ora la splint produce variabili contaminate e il flusso di taint.