Esistono buone risorse online per raccogliere informazioni su come le allocazioni di memoria influiscono sulla sicurezza?
È una nuova area per me, e qualsiasi suggerimento su dove iniziare sarebbe apprezzato.
Ho visto cosa hai fatto lì, chiedendo informazioni sull'assegnazione della memoria & sicurezza poi menzionando puntatori;)
Secondo me, il modo migliore per iniziare a imparare a memoria (in generale) è scrivere codice. Non sono sicuro che ci sia un altro modo per avvicinarsi a questo. Non solo un codice, trovare un linguaggio che impone la gestione della memoria sul programmatore, nessun ambiente gestito come Java o .NET Framework. Questi sono ottimi linguaggi per RAD, ma non forniscono gli aspetti di livello inferiore che sarebbero necessari. Raccomando C o C ++. Ulteriori informazioni su puntatori, riferimenti penzolanti, allocazione dinamica della memoria e amp; deallocazione, ecc.
L'assemblaggio è un linguaggio fantastico se vuoi imparare i dettagli del funzionamento del software, ma è anche difficile da comprendere. Tuttavia, non è necessario essere in grado di scrivere codice assembly. Basta prendere alcuni documenti sulla lingua e garantisco che aumenterai notevolmente la tua comprensione della memoria.
A volte l'unico modo per capire veramente come funziona qualcosa, è smontarlo. Raccogli un libro sull'architettura del sistema operativo come Sistemi operativi - Progettazione e implementazione o un libro di ingegneria inversa Inversione: segreti dell'ingegneria inversa . Prendete alcune cose a parte, familiarizzate con un debugger e analizzate le applicazioni in esecuzione in memoria. Inizia a giocare con i punti di interruzione e guarda cosa ti dice il tuo debugger su cosa sta succedendo.
In conclusione, il modo migliore secondo me per conoscere la memoria è di essere responsabile della sua gestione. Inizia lento, impara il C ++ e lavora per cose più difficili.
Buffer Overflow potrebbe essere ciò a cui stai cercando di fare riferimento. Una volta che hai capito esattamente che cosa vuoi imparare, potresti voler costruire il tuo ambiente di test per osservare come funziona. DVWA è un ottimo punto di partenza.
L'allocatore di memoria può influenzare la sicurezza nel modo seguente: la scelta dell'allocazione di memoria può influenzare la facilità o la difficoltà di sfruttare il sovraccarico del buffer e altre vulnerabilità legate alla sicurezza della memoria.
Ad esempio, randomizzare la posizione in cui gli oggetti sono allocati può interferire con gli exploit che si basano su questi oggetti per essere in posizioni prevedibili, sconfiggendo così l'aggressore. Pertanto, un allocatore di memoria ben progettato può svolgere un ruolo nell'implementazione dell'ASLR ( randomizzazione del layout dello spazio indirizzo ). In generale, un allocatore di memoria può potenzialmente aiutare a difendersi da alcuni "exploit di heap".
Consulta, ad esempio, i seguenti documenti di ricerca per alcuni lavori sulla creazione di allocatori di memoria temprati che rendono più difficile sfruttare questo tipo di vulnerabilità:
DieHard: sicurezza della memoria probabilistica per le lingue non sicure , Emery D Berger e Benjamin G. Zorn, PLDI 2006. Questo documento progetta un allocatore di memoria che randomizza il layout degli oggetti sull'heap, rendendo così più difficile sfruttare alcune vulnerabilità di sicurezza. Consulta la pagina del progetto Diehard per ulteriori informazioni. A quanto pare, questo lavoro ha influenzato il design di simili attenuazioni nel Windows 7 Fault-tolerant Heap .
DieHarder: protezione dell'heap , Gene Novark, Emery D. Berger, ACM CCS 2010. DieHarder migliora su DieHard fornendo una maggiore sicurezza contro determinati attacchi.
Cling: un allocatore di memoria per attenuare i puntatori a ciondoli , Periklis Akritidis , Usenix Security 2010. Cling è un allocatore di memoria destinato a rendere più difficile lo sfruttamento delle vulnerabilità use-after-free.
Sfruttamento del pool di kernel su Windows 7 , Tarjei Mandt, Blackhat 2011. L'allocatore di memoria del kernel di Windows 7 è stato progettato per cercare di fermare lo sfruttamento di alcuni tipi di vulnerabilità di sicurezza della memoria. Questo documento rileva che la protezione è imperfetta e descrive in che modo un utente malintenzionato potrebbe neutralizzare la protezione in determinate condizioni.
Ecco alcune ulteriori informazioni su come i sistemi operativi distribuiti implementano queste idee:
Un nuovo malloc (3) per OpenBSD . Questo mazzo di diapositive spiega come l'allocatore di memoria di OpenBSD è stato modificato per utilizzare la randomizzazione.
Windows 7 Fault-Tolerant Heap implementa alcune di queste idee (come menzionato sopra).
Leggi altre domande sui tag memory