ASLR ( osoitetilan layout randomization - " osoiteavaruuden layout randomization ") on käyttöjärjestelmissä käytetty tekniikka , joka muuttaa satunnaisesti tärkeiden tietorakenteiden prosessin sijaintia osoiteavaruudessa , nimittäin suoritettavia tiedostokuvia , ladattavia kirjastoja , kasoja ja pinoa . .
ASLR on suunniteltu vaikeuttamaan useiden haavoittuvuuksien hyödyntämistä . Jos hyökkääjä esimerkiksi saa mahdollisuuden siirtää hallintaa mielivaltaiseen osoitteeseen käyttämällä puskurin ylivuotoa tai muuta menetelmää, hänen on arvattava, mihin osoitteeseen pino, kasa tai muut tietorakenteet voidaan sijoittaa shellcode -koodiin . Samanlaisia ongelmia ilmenee paluu -libc-hyökkäyksessä: hyökkääjä ei tiedä osoitetta, johon kirjasto on ladattu. Yllä olevissa esimerkeissä tietyt osoitteet piilotetaan hyökkääjältä, ja jos oikeaa osoitetta ei voida arvata, sovellus todennäköisesti kaatuu, mikä estää hyökkääjältä mahdollisuuden hyökätä uudelleen ja kiinnittää järjestelmänvalvojan huomion .
OpenBSD - kehittäjät olivat ensimmäisten joukossa, jotka ottivat käyttöön ASLR:n. ASLR on oletuksena käytössä.
Linux - ytimessä on ollut yksinkertainen ASLR-versio vuodesta 2005 (versiosta 2.6.12 lähtien). Monimutkaisempia ja täydellisempiä ASLR-versioita tarjotaan korjaustiedostoina ( PaX , ExecShield jne.). Jakeluissa, joiden nimissä on sana "kovettu", sekä Ubuntu -jakelun nykyaikaisissa versioissa kovat versiot ovat oletusarvoisesti käytössä.
Jotta ASLR toimisi (suorittavien tiedostojen sijoittamiseksi muistiin satunnaisiin osoitteisiin), suoritettavat tiedostot on käännettävä sijainnista riippumattomassa suoritustilassa (eräänlainen paikasta riippumaton koodi suoritettaville tiedostoille).
Windowsissa ASLR:ää on tuettu Windows Vistasta (2007) [1] lähtien suoritettaville tiedostoille ja kirjastoille , jotka on rakennettu erityisillä lipuilla.
ASLR on tuettu myös uudemmissa Windowsin versioissa , kuten Windows Server 2008 , Windows 7 , Windows Server 2008 R2 , Windows 8 , Windows 8.1 , Windows 10 .
ASLR:ää ei käytetä sovelluksissa, jotka on rakennettu ilman erityisiä lippuja, ja kun niitä käytetään aiempien Windows-versioiden yhteensopivuustilassa.
Windows XP :ssä ja Windows Server 2003 :ssa ASLR voidaan ottaa käyttöön missä tahansa valitussa sovelluksessa käyttämällä Microsoft EMET [2] (Enhanced Mitigation Experience Toolkit) -työkalua.
Mac OS X 10.5 Leopardissa (2007) lisättiin jonkin verran satunnaisuutta kirjaston lataamiseen [3] . OS X 10.8 Mountain Lion (2012) -käyttöjärjestelmässä ASLR on osa järjestelmän ydintä [4] .
iOS on käyttänyt ASLR-tekniikkaa versiosta 4.3 lähtien [5] . Ytimelle, käytetty iOS 6:sta lähtien [6] .
ASLR on kompromissi lisääntyneen turvallisuuden ja rajoitetun käytettävissä olevan 24-bittisen, 31-bittisen ja 64-bittisen yksityisen tallennustilan välillä. 24-bittisen ja 31-bittisen virtuaalisen tallennustilan käyttöönotto pienentää käytettävissä olevan yksityisen tallennustilan 63 sivuun ja 255 sivuun. Pyydetyn työalueen koko on silti täytettävä pienennetystä yksityisestä alueesta, jotta työ voidaan suorittaa. Työt, joiden laajuuden kokoa ei voida täyttää, johtavat hylkäämisvirheeseen 822. Jos työn pyydetty laajuuden koko täyttää, on mahdollista, että pienentynyt yksityisen tallennustilan koko estää työn suorittamisen loppuun, mikä johtaa ABEND-virheeseen 878.
Yksi tapa määrittää, eivätkö työt voi suorittaa 24-bittisen tai 31-bittisen yksityisen tallennustilan kokorajoituksen kanssa, joka tapahtuu, kun ASLR on käytössä, on määrittää CSA-parametrille suurempi arvo parmlibissa. Sekä 24-bittisen että 31-bittisen CSA-koon kasvattaminen 1 miljoonalla pienentää tehokkaasti 24-bittisen ja 31-bittisen yksityisen tallennustilan kokoa 1 miljoonalla, mikä on enemmän kuin ASLR:n maksimivähennys [7] .
ASLR:n käyttämiseksi suoritettavat tiedostot on rakennettava erityisillä lipuilla. Tämän seurauksena koodissa ei käytetä pysyviä osoitteita, mutta samalla:
Lisäksi suojaus voidaan ohittaa muistin ehtymisen [8] tai Heap Spray -menetelmien [9] avulla .