In che modo ASCII-Armoring aiuta a prevenire attacchi di buffer-overflow?

10

Leggevo degli attacchi return-to-libc su Wikipedia .

Secondo quanto ho letto e capito dall'articolo, l'armamento ASCII significa che i dati binari vengono convertiti in valori ASCII raggruppandoli in blocchi di 8 bit.

L'articolo cita:

Indeed, with ASCII-Armoring, all the system libraries (e.g. libc) addresses contain a NULL byte. Nevertheless, this same concept can be used in a similar and more advanced attack known as return-to-plt, where instead of returning to libc, the attacker uses the PLT functions loaded in the binary (e.g. system@plt, execve@plt, sprintf@plt, strcpy@plt, etc...).

Qualcuno può spiegare, in che modo esattamente l'armamento ASCII impedisce l'overflow del buffer? Non ho ricevuto la parte dove dice che gli indirizzi delle librerie di sistema contengono un byte NULL. E in che modo return-to-plt impedisce l'overflow del buffer? Ho cercato, ma non ho trovato molte spiegazioni riguardanti gli attacchi di return-to-plt .

    
posta Karan 25.05.2013 - 17:02
fonte

2 risposte

7

Se l'indirizzo viene trattato come una stringa di caratteri terminata da null a un certo punto, l'inclusione di questo indirizzo "ASCII-Armored" causerebbe funzioni che funzionano con stringhe di caratteri terminate da null come, strcpy, strlen, sprintf per interrompere l'elaborazione su la fine dell'indirizzo di libc.

    
risposta data 25.05.2013 - 17:24
fonte
1

Molti buffer overflow in C sono il risultato di una lettura incurante di una stringa in una matrice di dimensioni fisse senza controllo dei limiti.

Le stringhe in C sono semplicemente matrici di caratteri, con un carattere 0 o NULL alla fine. Le funzioni della stringa di libreria standard come strcpy copiano semplicemente i valori da un array all'altro finché non viene rilevato il carattere NULL.

Forzando un attacco per includere un NULL o 0 byte come indirizzo syscall nel payload, le letture di stringhe errate vengono interrotte perché pensano che la stringa abbia finalmente conclusa.

Ricorda che l'indirizzo 0xFFFF00FF è in realtà di quattro byte (o caratteri), uno dei quali è 0x00.

Quando si progetta un payload di attacco di overflow del buffer con un bytecode della macchina, gli hacker spesso devono essere intelligenti per evitare di avere 0 byte.

    
risposta data 26.02.2017 - 23:34
fonte

Leggi altre domande sui tag