ASLR: perché cambiano solo 12 bit sul sistema a 32 bit?

4

Ho letto qui i post sull'esclusione dell'ASLR. Sui sistemi a 32 bit questo sembra essere banale ma sono stato sorpreso di vedere quanto sia banale. Bastano pochi secondi per l'indirizzo ASLR bruteforce '. La ragione sembra essere che secondo i miei test solo 12 bit cambiano effettivamente nell'indirizzo:

export BLAH=$"/bin/sh"

BLAH will be at 0xbff5a78b
BLAH will be at 0xbf87778b
BLAH will be at 0xbfe1e78b
BLAH will be at 0xbf9f778b
BLAH will be at 0xbffc378b
BLAH will be at 0xbffd978b
BLAH will be at 0xbfa7f78b
BLAH will be at 0xbf94878b
BLAH will be at 0xbfe4378b
BLAH will be at 0xbff7978b
BLAH will be at 0xbfe4078b

Sembra che sul mio laptop tutti gli indirizzi casuali siano

BF XX X7 8B

dove X è un esagono casuale. La mia conoscenza del funzionamento a basso livello di una CPU è piuttosto limitata, quindi perché questi sono gli unici byte che cambiano?

È corretto dire che su una macchina a 32 bit ci sono solo 16^3 = 4096 indirizzo ASLR '?

Quanti bit cambiano su un sistema a 64 bit?

    
posta Juicy 05.02.2014 - 03:03
fonte

3 risposte

8

ASLR su 32-bit è piuttosto limitato, ma penso che quello che stai vedendo sia un artefatto del valore bias ASLR di sistema .

All'avvio, un valore di bias viene generato casualmente per quella "istanza" di Windows in esecuzione. Sebbene alcune parti dell'indirizzo possano sembrare uguali tra istanze dello stesso processo, in realtà vengono semplicemente alimentate dal valore di bias e tale valore cambierà al riavvio.

Quindi, in realtà, non è davvero sfruttabile. La base di indirizzi sarà abbastanza casuale da far fallire un exploit drive-by, anche se non cambia molto tra le istanze.

    
risposta data 05.02.2014 - 04:31
fonte
6

Oltre alle spiegazioni di @Polynomial (che possono essere o meno applicabili, a seconda che tu stia utilizzando Windows o qualche altro sistema operativo), ASLR si scambia attorno a pagine : questo è ciò che MMU lo sa. Una pagina è 4 kB (su processori x86) quindi i 12 bit bassi degli indirizzi non sono influenzati dall'ASLR. Questo lascia al massimo 20 bit per ASLR con cui giocare. I problemi di allocazione dello spazio indirizzo possono ridurre ulteriormente il numero di bit che possono essere modificati tramite ASLR (se la DLL è troppo sparsa nello spazio degli indirizzi, ciò potrebbe impedire l'allocazione di un grande blocco contiguo di RAM libera - questo è noto come frammentazione ).

Su un sistema operativo a 64 bit, lo spazio indirizzo è più grande; non l'intero 64-bit, perché la CPU in realtà non lo supporta, ma si possono osservare 44 o 45 bit (dipende sia dalla versione della CPU che dalla marca e dalla versione del sistema operativo). Quindi, otterrai una dozzina di bit extra randomizzati da ASLR.

    
risposta data 05.02.2014 - 13:07
fonte
0

Perché 12 bit sono sufficienti per fornire una sicurezza efficace, se non perfetta.

Il malware ottiene un solo colpo all'iniettare il buffer overflow. Se fallisce, l'applicazione piacerà molto semplicemente a crash senza infettare il programma. 12 bit di randomizzazione significano che il malware funzionerà solo una volta ogni 2 ^ 12 o 4096 volte. Se sono un autore di malware o un hacker, ciò significa che molto probabilmente fallirò ogni volta che lo provo.

    
risposta data 05.02.2014 - 20:55
fonte

Leggi altre domande sui tag