Ho sentito la teoria. Indirizzo Spazio La randomizzazione prende le librerie e le carica in posizioni casuali nello spazio degli indirizzi virtuali, in modo che nel caso in cui un hacker trovi un buco nel tuo programma, non ha un indirizzo pre-conosciuto per eseguire un attacco return-to-libc contro, per esempio. Ma dopo averci pensato per qualche secondo, non ha alcun senso come misura difensiva.Come può ASLR essere efficace?
Diciamo che il nostro ipotetico TargetLib (libc o qualsiasi altra cosa l'hacker sta cercando) è caricato in un indirizzo casuale invece che in uno deterministico. Ora l'hacker non sa in anticipo dove sono TargetLib e le routine al suo interno, ma nemmeno il codice dell'applicazione. Deve avere una sorta di tabella di ricerca da qualche parte nel binario per trovare le routine all'interno di TargetLib, e questo deve essere in una posizione deterministica. (O in una posizione casuale, indicata da qualcos'altro.È possibile aggiungere quante indicazioni indirette si desidera, ma alla fine si deve iniziare in una posizione nota.)
Ciò significa che invece di puntare il proprio codice di attacco al posizione nota di TargetLib, tutto ciò che l'hacker deve fare è puntare il suo codice di attacco sulla voce della tabella di ricerca dell'applicazione per TargetLib e dereferenziare il puntatore alla routine di destinazione, e l'attacco procede senza impedimenti.
C'è qualcosa nel modo in cui funziona l'ASLR che non capisco? Perché, come descritto, non vedo come sia qualcosa di più di un dosso, fornendo l'immagine della sicurezza ma senza una sostanza reale. Mi sto perdendo qualcosa?
Hai mai eseguito il debug di un file EXE di Windows a livello di ASM? C'è una tabella di importazione reale lì. Il caricatore non applica patch al codice, (tutte le posizioni in cui il codice può chiamare alcune routine esterne), applica la patch alla tabella di importazione, che è fondamentalmente una lunga sequenza di istruzioni JMP, a cui il compilatore genera CALL. –
Non è solo la memoria condivisa ... – rook
@Mason Wheeler - non per molto tempo, ma è bello saperlo. Mentre questo rende più facile determinare un particolare indirizzo, l'effetto netto è lo stesso, vero? Cambia un noto a uno sconosciuto, il che rende più difficile l'attacco. –