ASLR ( address space layout randomization - " adresse space layout randomization ") er en teknologi, der bruges i operativsystemer , som tilfældigt ændrer placeringen i adresserummet af en proces af vigtige datastrukturer, nemlig eksekverbare filbilleder , indlæsbare biblioteker , heaps og stack .
ASLR er designet til at gøre det sværere at udnytte flere typer sårbarheder . For eksempel, hvis en angriber opnår evnen til at overføre kontrol til en vilkårlig adresse ved hjælp af et bufferoverløb eller en anden metode, skal han gætte, på hvilken adresse stakken, heapen eller andre datastrukturer kan placeres i shellcode . Lignende problemer vil opstå med et return -to-libc-angreb: angriberen vil ikke kende adressen, hvor biblioteket er indlæst. I ovenstående eksempler er specifikke adresser skjult for angriberen, og hvis den korrekte adresse ikke kan gættes, vil applikationen sandsynligvis gå ned, og derved fratage angriberen muligheden for at angribe igen og tiltrække sig systemadministratorens opmærksomhed .
OpenBSD- udviklerne var blandt de første til at implementere ASLR. ASLR er aktiveret som standard.
Linux-kernen har haft en simpel variant af ASLR siden 2005 (siden version 2.6.12). Mere komplekse og komplette ASLR-varianter tilbydes som patches ( PaX , ExecShield osv.). I distributioner, der inkluderer ordet "hærdet" i deres navne, såvel som i moderne versioner af Ubuntu -distributionen , er hårde varianter aktiveret som standard.
For at ASLR skal fungere (for at placere eksekverbare filer i hukommelsen på tilfældige adresser), skal eksekverbare filer kompileres i positionsuafhængig eksekverbar tilstand (en slags positionsuafhængig kode for eksekverbare filer).
På Windows er ASLR blevet understøttet siden Windows Vista (2007) [1] for eksekverbare filer og biblioteker bygget med specielle flag.
ASLR understøttes også på senere versioner af Windows såsom Windows Server 2008 , Windows 7 , Windows Server 2008 R2 , Windows 8 , Windows 8.1 , Windows 10 .
ASLR bruges ikke til applikationer bygget uden specielle flag, og når de kører i kompatibilitetstilstand for tidligere versioner af Windows.
På Windows XP og Windows Server 2003 kan ASLR aktiveres for enhver valgt applikation ved hjælp af Microsoft EMET [2] (Enhanced Mitigation Experience Toolkit).
En vis tilfældighed i biblioteksindlæsning blev tilføjet i Mac OS X v10.5 Leopard (2007) [3] . I OS X 10.8 Mountain Lion (2012) er ASLR en del af systemets kerne [4] .
iOS har brugt ASLR-teknologi siden version 4.3 [5] . Til kerne, brugt siden iOS 6 [6] .
ASLR er et kompromis mellem øget sikkerhed og reduceret tilgængelig 24-bit, 31-bit og 64-bit privat lagring. Aktivering af 24-bit og 31-bit virtuel lagring vil reducere den tilgængelige private lagring til henholdsvis 63 sider og 255 sider. Den ønskede jobområdestørrelse skal stadig være opfyldt fra det reducerede private område, for at jobbet kan køre. Job, hvis omfangsstørrelse ikke kan opfyldes, vil resultere i en ABEND 822-fejl. Hvis jobbets ønskede omfangsstørrelse opfylder, er det muligt, at den reducerede private lagerstørrelse forhindrer jobbet i at fuldføre, hvilket resulterer i ABEND-fejl 878.
En måde at afgøre, om jobs ikke kan køre med den 24-bit eller 31-bit private lagerstørrelsesgrænse, der vil forekomme med ASLR aktiveret, er at angive en større værdi for CSA-parameteren i parmlib. Forøgelse af både 24-bit og 31-bit CSA-størrelserne med 1M reducerer effektivt størrelsen af 24-bit og 31-bit private lager med 1M, hvilket er mere end den maksimale reduktion, der vil forekomme med ASLR [7] .
For at bruge ASLR skal eksekverbare filer bygges med specielle flag. Som følge heraf vil permanente adresser ikke blive brugt i koden, men samtidig:
Derudover kan beskyttelse omgås gennem hukommelsesudtømning [8] eller Heap Spray-metoder [9] .