Format string attack: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: fix citazione web (v. discussione)
Riga 3:
Le '''format string attack''' (''vulnerabilità di formato della stringa'') sono una classe di vulnerabilità scoperte nel 1999.
 
== FunzionamentoIntroduzione ==
Il tipo di attacco Format String è una classe di vulnerabilità scoperte nel 1999, presenti prevalentemente in linguaggi di programmazione imperativi come il C.
Un attacco di tipo Format String è formato dai seguenti componenti:
Format Function: in ANSI C è una funzione che converte una variabile di tipo primitivo del linguaggio di programmazione in una stringa leggibile dall’uomo.
printf: stampa su stdout
fprintf: stampa la format string su un file
sprintf: stampa la stringa dentro un’altra
snprintf: stampa esattamente n caratteri della stringa in ingresso nella seconda stringa (già più sicura delle altre!!)
Format String: è l’argomento della Format Function ed una stringa ASCII che contiene sia testo che parametri di formato, ad esempio:
printf(“The magic number is %d\n”, 3);
Format String Parameter: definisco il tipo di conversione da effettuare in relazione alla variabile presente nella format string. Ad esempio:
“%s”: per stampare una stringa
“%d”: per stampare degli interi
“%c”: per stampare dei caratteri
 
Se si passa a una funzione che stampa una stringa a schermo (un esempio classico è la funzione [[printf]] del [[C (linguaggio)|linguaggio C]]) una stringa che in realtà contiene una serie di parametri di specifica dell'input (tipicamente si usano identificatori di formato ''%s'' e ''%x'' per esaminare il contenuto della memoria e ''%n'' per sovrascrivere parti della memoria, in particolare dello [[stack]]) si permette l'avvio di un attacco di tipo [[stack overflow]] e ''return to libc''. Per proteggersi da questo attacco, quando si vuole stampare una stringa ''s'' usando la printf() o una qualsiasi funzione C che accetti un numero illimitato di identificatori di formato, bisogna scrivere la funzione