ASLR ( adressutrymmeslayoutrandomisering - " adressutrymmeslayoutrandomisering ") är en teknik som används i operativsystem , som slumpmässigt ändrar platsen i adressutrymmet för en process av viktiga datastrukturer, nämligen exekverbara filbilder , laddningsbara bibliotek , heaps och stack .
ASLR är designat för att göra det svårare att utnyttja flera typer av sårbarheter . Till exempel, om en angripare får möjligheten att överföra kontroll till en godtycklig adress med ett buffertspill eller annan metod, måste han gissa på vilken adress stacken, högen eller andra datastrukturer kan placeras i skalkoden . Liknande problem kommer att uppstå med en retur -till-libc-attack: angriparen kommer inte att känna till adressen där biblioteket är laddat. I exemplen ovan är specifika adresser dolda för angriparen, och om den korrekta adressen inte kan gissas kommer programmet sannolikt att krascha, vilket berövar angriparen möjligheten att attackera igen och drar till sig systemadministratörens uppmärksamhet .
OpenBSD - utvecklarna var bland de första att implementera ASLR. ASLR är aktiverat som standard.
Linuxkärnan har haft en enkel variant av ASLR sedan 2005 (sedan version 2.6.12). Mer komplexa och kompletta ASLR-varianter erbjuds som patchar ( PaX , ExecShield, etc.). I distributioner som innehåller ordet "härdad" i sina namn, såväl som i moderna versioner av Ubuntu- distributionen , är hårda varianter aktiverade som standard.
För att ASLR ska fungera (för att placera körbara filer i minnet på slumpmässiga adresser) måste körbara filer kompileras i positionsoberoende körbart läge (en sorts positionsoberoende kod för körbara filer).
På Windows har ASLR stöds sedan Windows Vista (2007) [1] för körbara filer och bibliotek byggda med speciella flaggor.
ASLR stöds även på senare versioner av Windows som Windows Server 2008 , Windows 7 , Windows Server 2008 R2 , Windows 8 , Windows 8.1 , Windows 10 .
ASLR används inte för applikationer byggda utan speciella flaggor och när de körs i kompatibilitetsläge för tidigare versioner av Windows.
På Windows XP och Windows Server 2003 kan ASLR aktiveras för alla valda program med hjälp av Microsoft EMET [2] (Enhanced Mitigation Experience Toolkit).
Viss slumpmässighet i biblioteksladdning lades till i Mac OS X v10.5 Leopard (2007) [3] . I OS X 10.8 Mountain Lion (2012) är ASLR en del av systemets kärna [4] .
iOS har använt ASLR-teknik sedan version 4.3 [5] . För kärna, använd sedan iOS 6 [6] .
ASLR är en kompromiss mellan ökad säkerhet och minskad tillgänglig 24-bitars, 31-bitars och 64-bitars privat lagring. Om du aktiverar 24-bitars och 31-bitars virtuell lagring minskar det tillgängliga privata lagringsutrymmet till 63 respektive 255 sidor. Den begärda arbetsytans storlek måste fortfarande uppfyllas från det minskade privata området för att jobbet ska köras. Jobb vars omfattningsstorlek inte kan uppfyllas kommer att resultera i ett ABEND 822-fel. Om jobbets begärda omfångsstorlek uppfyller, är det möjligt att den minskade storleken på privat lagring hindrar jobbet från att slutföras, vilket resulterar i ABEND-fel 878.
Ett sätt att avgöra om jobb inte kan köras med 24-bitars eller 31-bitars storleksgräns för privat lagring som kommer att inträffa med ASLR aktiverat är att ange ett större värde för CSA-parametern i parmlib. Att öka både 24-bitars och 31-bitars CSA-storlekarna med 1M minskar effektivt storleken på den 24-bitars och 31-bitars privata lagringen med 1M, vilket är mer än den maximala minskningen som kommer att ske med ASLR [7] .
För att använda ASLR måste körbara filer byggas med speciella flaggor. Som ett resultat kommer permanenta adresser inte att användas i koden, men samtidigt:
Dessutom kan skyddet kringgås genom minnesutarmning [8] eller Heap Spray-metoder [9] .