ASLR ( address space layout randomization - „ address space layout randomization ”) este o tehnologie folosită în sistemele de operare , care schimbă aleatoriu locația în spațiul de adrese a unui proces de structuri de date importante, și anume imagini de fișiere executabile , biblioteci încărcate , grămezi și stivă .
ASLR este conceput pentru a face mai dificilă exploatarea mai multor tipuri de vulnerabilități . De exemplu, dacă un atacator dobândește capacitatea de a transfera controlul către o adresă arbitrară utilizând un buffer overflow sau o altă metodă, va trebui să ghicească la ce adresă stiva, heap-ul sau alte structuri de date pot fi plasate în shellcode . Probleme similare vor apărea cu un atac return -to-libc: atacatorul nu va ști adresa unde este încărcată biblioteca. În exemplele de mai sus, adresele specifice sunt ascunse de atacator și, dacă adresa corectă nu poate fi ghicită, este posibil ca aplicația să se prăbușească, privând astfel atacatorul de posibilitatea de a reataca și atrăgând atenția administratorului de sistem .
Dezvoltatorii OpenBSD au fost printre primii care au implementat ASLR. ASLR este activat implicit.
Nucleul Linux are o variantă simplă de ASLR din 2005 (începând cu versiunea 2.6.12). Variante ASLR mai complexe și complete sunt oferite ca patch-uri ( PaX , ExecShield etc.). În distribuțiile care includ cuvântul „întărit” în numele lor, precum și în versiunile moderne ale distribuției Ubuntu , variantele hard sunt activate în mod implicit.
Pentru ca ASLR să funcționeze (pentru plasarea fișierelor executabile în memorie la adrese aleatoare), fișierele executabile trebuie compilate în modul executabil independent de poziție (un fel de cod independent de poziție pentru fișierele executabile).
Pe Windows , ASLR a fost acceptat începând cu Windows Vista (2007) [1] pentru fișiere executabile și biblioteci construite cu steaguri speciale.
ASLR este acceptat și pe versiunile ulterioare de Windows , cum ar fi Windows Server 2008 , Windows 7 , Windows Server 2008 R2 , Windows 8 , Windows 8.1 , Windows 10 .
ASLR nu este utilizat pentru aplicații create fără steaguri speciale și când rulează în modul de compatibilitate pentru versiunile anterioare de Windows.
Pe Windows XP și Windows Server 2003 , ASLR poate fi activat pentru orice aplicație selectată folosind Microsoft EMET [2] (Enhanced Mitigation Experience Toolkit).
O anumită aleatorie în încărcarea bibliotecii a fost adăugată în Mac OS X v10.5 Leopard (2007) [3] . În OS X 10.8 Mountain Lion (2012), ASLR face parte din nucleul sistemului [4] .
iOS folosește tehnologia ASLR încă din versiunea 4.3 [5] . Pentru kernel, folosit începând cu iOS 6 [6] .
ASLR este un compromis între securitate sporită și stocarea privată disponibilă redusă pe 24 de biți, 31 de biți și 64 de biți. Activarea stocării virtuale pe 24 și 31 de biți va reduce stocarea privată disponibilă la 63 de pagini, respectiv 255 de pagini. Dimensiunea solicitată a zonei de lucru trebuie să fie în continuare satisfăcută din zona privată redusă pentru ca lucrarea să poată rula. Joburile a căror dimensiune nu poate fi satisfăcută vor avea ca rezultat o eroare ABEND 822. Dacă dimensiunea solicitată a sarcinii este satisfăcută, este posibil ca dimensiunea redusă de stocare privată să împiedice finalizarea sarcinii, rezultând eroarea ABEND 878.
O modalitate de a determina dacă joburile nu pot rula cu limita de dimensiune de stocare privată de 24 de biți sau 31 de biți care va apărea cu ASLR activat este de a specifica o valoare mai mare pentru parametrul CSA în parmlib. Mărirea dimensiunilor CSA de 24 de biți și 31 de biți cu 1M reduce efectiv dimensiunea stocării private pe 24 de biți și 31 de biți cu 1M, ceea ce este mai mult decât reducerea maximă care va avea loc cu ASLR [7] .
Pentru a utiliza ASLR, executabilele trebuie să fie construite cu steaguri speciale. Ca urmare, adresele permanente nu vor fi folosite în cod, dar în același timp:
În plus, protecția poate fi ocolită prin epuizarea memoriei [8] sau prin metodele Heap Spray [9] .