Occorrenza del gadget ROP

4

Sto ricercando varie tecniche di buffer overflow, una che riscontro ed è piuttosto interessata al momento è la programmazione Return Oriented (ROP) e l'uso di piccoli gruppi di istruzioni note come gadget.

La domanda: ci sono alcuni gadget che sono popolari e usati estesamente in molti exploit, per esempio la sequenza POP / POP / RET. Esiste qualche ricerca o prova che l'occorrenza di un tale gadget o delle sue equivalenze sia sufficientemente alta da essere sempre presente nella maggior parte dei binari? Sto cercando una certa libreria comune o una tecnica di compilazione popolare che produrrà questa sequenza.

EDIT: In breve, POP / POP / RET e le equivalenze saranno sempre in un binario?

Sto chiedendo nel contesto x86, ma se c'è un altro lead in un'altra piattaforma, condividilo.

    
posta Pham Trung Nghia 28.02.2013 - 12:23
fonte

1 risposta

8

La creazione di una catena ROP è un processo difficile, creativo, laborioso ma entusiasmante. In generale, quando utilizziamo il ROP, stiamo cercando di aggirare il DEP. Dopotutto, se abbiamo il controllo di EIP e possiamo scrivere ed eseguire lo stack, perché non passare al nostro shellcode?

Con questo in mente, è importante ricordare che interi payload non sono, in genere, scritti come una catena ROP. Generare un reverse shell interamente fuori dai gadget ROP mentre è certamente possibile, è probabile che metta alla prova la sanità mentale di qualsiasi autore di exploit.

La funzione di una catena ROP è semplicemente quella di disattivare DEP. Utilizziamo ROP per disattivare DEP (aggiungendo il permesso di esecuzione alla pagina di memoria che contiene lo stack) e quindi semplicemente passare al nostro payload del codice shell tradizionale.

In Windows, di solito si tratta di effettuare una chiamata di sistema VirtualProtect() , caricata con i parametri corretti per consentire l'esecuzione dello stack. È stato dimostrato che kernel32.dll contiene solo gadget appropriati per effettuare tale chiamata nella maggior parte dei casi. Strumenti per identificare i gadget potenzialmente utili nel codice del programma possono rendere questo processo molto più semplice. Vedi questa pagina per un esempio dettagliato del processo.

Quindi, se una sequenza specifica, come POP POP RET è presente, non è poi così rilevante. In qualsiasi programma che collega le principali librerie (che fanno tutte), ci saranno più di gadget sufficienti per costruire un semplice DEP che disattiva la catena ROP. Tutto ciò richiede un po 'di pensiero laterale: è come cercare di costruire un puzzle quando ogni pezzo proviene da una scatola diversa.

    
risposta data 28.02.2013 - 15:03
fonte

Leggi altre domande sui tag