Alcuni attacchi consistono nel far passare il programma a un indirizzo specifico e continuare a correre da lì. Il codice iniettato deve essere precedentemente caricato in qualche modo in quella posizione esatta.
La randomizzazione dello stack e altre differenze di runtime possono rendere impossibile la previsione dell'indirizzo in cui il programma salterà, così l'attaccante posiziona una slitta NOP in una vasta gamma di memoria. Se il programma salta ovunque nella slitta, eseguirà tutti i NOP rimanenti, non facendo nulla e quindi eseguirà il codice del payload, proprio accanto alla slitta.
Il motivo per cui l'utente malintenzionato utilizza la slitta NOP è quello di ingrandire l'indirizzo di destinazione: il codice può saltare ovunque nella slitta, invece che esattamente all'inizio del codice inserito.
Una slitta NOP a 128 byte è solo un gruppo di istruzioni NOP a 128 byte di larghezza.
NOTA N. 1: NOP (No-OPeration) è un'istruzione disponibile nella maggior parte delle architetture (tutte?) Che non fa altro che occupare memoria e alcuni runtime.
NOTA n. 2: in architetture con istruzioni di lunghezza variabile, un'istruzione NOP di solito è lunga solo un byte, quindi può essere utilizzata come comodo riempimento delle istruzioni. Sfortunatamente, anche questo rende facile fare una slitta NOP.
chiediti quali sono le applicazioni pratiche per le quali hai intenzione di imparare a fare questo? –
Sono un laureando della CE e sto imparando questo argomento nel Bryant, il manuale di O'Hallaron CS: APP. Lavoro anche per la sicurezza informatica nel mio college, quindi questo mi interessa. – amorimluc
Ecco cosa direbbe un ingegnere sociale! ;) – DeepS1X