Perché i programmi legittimi hanno un'istruzione "jmp esp"?

7

Sembra che un trucco di exploit comune sia utilizzare l'overflow dello stack per sovrascrivere il puntatore dell'istruzione in modo tale che punti a un'istruzione jmp esp da qualche parte nel segmento di codice che poi esegue il codice arbitrario della scelta dell'attaccante.

Tuttavia, ho difficoltà a capire che cosa usare i programmi legittimi (che a mio avviso di solito non si auto-modificano e hanno tutto il loro codice eseguibile memorizzato nel segmento di codice) includerebbe tali istruzioni jmp esp nel primo posto.

    
posta 1110101001 28.03.2018 - 12:14
fonte

1 risposta

6

L'istruzione jmp esp è codificata come FF E4 . Non è necessario trovare un'effettiva istruzione jmp , solo quei byte nel mezzo di qualsiasi altro codice o dato.

Questa è la base per la programmazione orientata al rendimento (ROP) e queste piccole sequenze di istruzioni utili sono spesso chiamate "gadget ROP".

Nota che questa particolare tecnica è facilmente spezzata da uno stack non eseguibile. Richiedere uno stack eseguibile è piuttosto raro (al di fuori di casi specifici come un compilatore JIT) quindi questa è una mitigazione semplice ed efficace. Per aggirare questo ci sono tecniche come return-to-libc che raggruppano un certo numero di questi piccoli dispositivi ROP per costruire una sequenza di istruzioni più lunga.

    
risposta data 30.03.2018 - 00:46
fonte

Leggi altre domande sui tag