In che modo un processo è obbligato ad eseguire codice binario?

0

Voglio capire come viene sfruttato un processo di Internet vulnerabile su alcuni computer per eseguire codice binario arbitrario.

Capisco come gli overflow del buffer potrebbero essere usati per sovrascrivere l'indirizzo di ritorno per far saltare il processo in una posizione che non si supponeva - ma non so come sia possibile per un processo eseguire codice binario arbitrario che riceve da un aggressore.

Sembra che se un utente malintenzionato invia un codice binario a un processo non verrà mai inserito nella sezione .text in modo che rimanga non eseguibile, anche se "return" vi salta sopra. Gli overflow dello stack e dell'heap non scriverebbero nella sezione in cui è memorizzato il codice, quindi continueranno a presentare un bit non eseguibile.

Modifica: per essere più chiari, la parte principale che non capisco è questa:

  • la sezione .text in cui sono memorizzate le istruzioni della CPU assemblate binarie non può essere modificata
  • la sezione .data / .bss è contrassegnata come no-execute in modo che le informazioni ivi contenute siano trattate come dati, non saranno mai eseguite dalla CPU
posta emberfang 18.05.2014 - 17:00
fonte

1 risposta

1

Un normale attacco di overflow del buffer invia al server un messaggio che non solo sovrascrive un indirizzo di ritorno, ma include anche il codice che l'utente malintenzionato desidera eseguire. L'indirizzo di ritorno verrebbe sovrascritto per far saltare il programma nel messaggio stesso che verrà quindi interpretato come codice ed eseguito.

A volte non c'è abbastanza spazio per lo shellcode completo. In tal caso, l'utente malintenzionato potrebbe utilizzare altri metodi per posizionare il proprio shellcode in una posizione di memoria nota. Questo può essere fatto inviando dati a funzioni che non sono loro stessi vulnerabili ma accettano grandi quantità di dati e li memorizzano in una posizione di memoria prevedibile.

    
risposta data 19.05.2014 - 02:05
fonte

Leggi altre domande sui tag