Format string attack: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix: accenti errati e ortografia |
m Bot: accenti e modifiche minori |
||
Riga 5:
== Introduzione ==
Il tipo di attacco Format String è una classe di vulnerabilità scoperte nel 1999, presenti prevalentemente in linguaggi di programmazione imperativi come il C. Un Format String Attack è formato da tre componenti fondamentali:
* Format Function: in ANSI C è una funzione che converte una variabile di tipo primitivo, in una
printf: per stampare su stdout
fprintf: per stampare la format string su file
Riga 12:
snprintf: per stampare esattamente 'n' caratteri della stringa in ingresso nella seconda
* Format String: è l’argomento della format function ed è una stringa ASCII che contiene sia testo che parametri di formato.
printf(“The magic number is %d\n”, 3);
Riga 53:
l'output potrebbe essere il seguente:
<source lang="c">4306ea40-43074920-0062de90-70706970-02000002</source>
Questo perché essendo il numero degli argomenti della printf() variabili, questa utilizza la format string per sapere quanti gliene sono stati passati. In questo caso quindi crede (erroneamente) che siano cinque parametri, e andrà quindi a stampare i prossimi cinque indirizzi sullo stack, pensando siamo i parametri richiesti.
Il parametro di formato "%08x" è costituito dai seguenti componenti:
* x (converti i carratteri in esadecimale),
* 8 (mostra otto caratteri),
* 0 (riempi di zeri i caratteri nulli, se presenti).
'''Leggere memoria in ogni locazione di memoria'''
La nostra format function mantiene all’interno dello stack il puntatore alla locazione di memoria del parametro di formato. Se fossimo in grado di far puntare quel puntatore all’area di memoria che ci interessa, potremmo dare quell’indirizzo al formato parametro "%s" così che, invocando la printf(), questa leggerà la memoria da quell’indirizzo fino a che non trova un carattere terminatore ‘0’.
Utilizzando ad esempio la seguenti stringa di formato:[[File:StackMemory.png|miniatura|446x446px|Salvataggio variabili sullo stack]]<source lang="c"> printf ("\x10\x01\x48\x08_%08x-%08x-%08x-|%s|"); </source>
la sequenza di "%08x" incrementa il puntatore interno della format function verso il top dello stack. Dopo alcuni di questi
Bisogna quindi sostituire la parte iniziale della format string con un vero indirizzo.
Riga 88:
Quindi usando lo stesso metodo implementato per visualizzare il contenuto della memoria, possiamo andare a scrivere un intero (praticamente) ovunque.
Basta sostituire "%n" al posto di "%s" ed il contenuto della cella "0x10014808" verrà sovrascritto. L'attaccante potrebbe quindi andare a cambiare certi flag che gli garantiscano il controllo o sovrascrivere celle con indirizzi di ritorno a nostro piacimento.
== Voci correlate ==
Riga 96 ⟶ 95:
== Collegamenti esterni ==
* {{en}}scut / team teso [http://julianor.tripod.com/bc/formatstring-1.2.pdf Come sfruttare le
* {{cita web|https://www.securecoding.cert.org|CERT standard di programmazione sicura|lingua=en}}
* {{cita web|http://www.cert.org/secure-coding|CERT iniziativa per la programmazione sicura|lingua=en}}
* {{cita web|http://www.cert.org/books/secure-coding|programmazione sicura
{{Portale|Sicurezza informatica}}
|