Una delle sfide con la distribuzione di ASLR è che, almeno su Windows, alcune DLL (librerie) non sono compilate in modo compatibile con ASLR. (Non sono compilati come codice indipendente dalla posizione, quindi il punto in cui vengono caricati in memoria non può essere randomizzato.)
Questo è problematico, perché se un'applicazione carica anche solo una DLL non randomizzata, allora non è effettivamente randomizzata. Per interrompere gli attacchi standard (ad esempio gli attacchi ROP), tutto il codice deve essere randomizzato : anche una singola DLL non randomizzata è sufficiente per supportare gli attacchi ROP. Quindi, per un'approssimazione del primo ordine, ASLR è utile solo per proteggere una particolare applicazione se tutte delle sue DLL sono randomizzate. Le applicazioni spesso caricano molte DLL e, poiché tutto ciò che serve è una DLL non randomizzata, ciò rende particolarmente importante assicurarsi che tutte le DLL siano randomizzate.
In generale, l'industria si sta muovendo verso un maggiore uso della randomizzazione, ma lentamente : Immagino che ci vorrà del tempo per portare questo ad ogni DLL che qualsiasi programma userà mai. Ad esempio, è stato recentemente rivelato che la DLL di Dropbox non usa la randomizzazione , quindi qualsiasi programma che utilizza la DLL Dropbox non è protetto dagli attacchi ROP (qualsiasi programma che utilizza la DLL Dropbox perde il vantaggio dell'ASLR).
La mia domanda: quali sono i motivi tipici per cui alcune DLL non sono randomizzate? Si tratta in genere di una sorta di barriera tecnica o di un problema tecnico che rende difficile o impossibile compilare la DLL come codice indipendente dalla posizione? È la mancanza di consapevolezza / attenzione alla sicurezza, da parte degli sviluppatori che costruiscono la DLL? Sono legacy DLL che sono molto vecchie e non sono state ricompilate per trarre vantaggio dalla randomizzazione? Microsoft Visual C ++ non riesce a fare la cosa giusta per impostazione predefinita (non riesce a compilare DLL come codice indipendente dalla posizione per impostazione predefinita)? È qualcosa di completamente diverso?
Esistono miglioramenti tecnici o strumenti che potrebbero facilitare una maggiore distribuzione di ASLR / randomizzazione per DLL che attualmente non supportano la randomizzazione?
Risorse correlate: SlopFinder è uno strumento per eseguire la scansione del sistema per DLL che non supportano l'ASLR.