Il livello base di protezione è ASLR + DEP.
Se non li usi entrambi, allora ci sono molte tecniche potenti per sfruttare un sovraccarico del buffer (ad esempio, calcolo orientato al ritorno, irrorazione dell'heap, ripetizione delle ipotesi). Ad esempio, il DEP da solo può essere sconfitto usando il calcolo orientato al rendimento; e l'ASLR da solo può essere sconfitto usando l'irrorazione dell'heap e ripetuti tentativi.
Tuttavia, se l'obiettivo utilizza sia ASLR + DEP, lo sfruttamento diventa molto più difficile. Le tecniche sopra menzionate non sono sufficienti per sconfiggere ASLR + DEP.
ASLR + DEP sono come un punzone uno-due che rendono la vita dell'attaccante molto più difficile.
Sconfiggere la combinazione di ASLR + DEP non è impossibile, ma richiede molta più intelligenza.
Il mio esempio preferito di metodi per sconfiggere ASLR + DEP è spiegato nel mazzo di diapositive, Sfruttamento dell'interprete: inferenza del puntatore e irrorazione JIT . Lì, l'autore descrive come ha sfruttato un errore di sicurezza della memoria in Flash. Ha sfruttato le proprietà del Flash JIT per organizzare la memoria in un modo che gli consenta di montare un attacco di iniezione del codice, nonostante la presenza di ASLR + DEP. Ricorda che un JIT è un compilatore just-in-time; compila codice bytecode Flash in codice nativo. Il codice nativo verrà archiviato da qualche parte nella memoria e il JIT Flash lo contrassegnerà come eseguibile (nonostante DEP). L'autore ha trovato un modo per generare bytecode Flash che, una volta compilati, genererebbero una sequenza di byte che incorporava il suo shellcode dannoso (spostato di un byte). Ha quindi utilizzato tecniche di irrorazione dell'heap per assicurarsi che vi fossero molte copie di questo in memoria. Infine, ha sfruttato il bug di sicurezza della memoria per far passare il programma a un altro indirizzo; A causa di ASLR, era come saltare a un indirizzo casuale, ma le molte copie garantivano che con alta probabilità questo sarebbe saltato nel suo shellcode. In questo modo, ha bypassato sia ASLR e DEP - un'impresa nifty.
Un'ultima nota: vale la pena ricordare che ASLR è molto più efficace su architetture a 64 bit. Nelle architetture a 32 bit, l'ASLR può essere spesso sconfitto semplicemente facendo più tentativi. Non ci sono abbastanza gradi di libertà sulle piattaforme a 32 bit per introdurre abbastanza casualità, quindi le probabilità che l'hacker di avere successo con una buona fortuna rimangono troppo alte, su piattaforme a 32 bit. Per la difesa più strong, utilizza una piattaforma a 64 bit.