Hur utnyttjande av buffertspill inträffar
I attacker där buffertspill utnyttjas för att köra koder översvämmas minnesbufferten (som har en fast storlek som är reserverad för en indataprocess). Med den här koden kan en angripare ta över måldatorn eller skada data i datorn.
I följande beskrivs stackbaserade buffertspillattacker:
- Minnesprocess i normal stack – minnesobjektet i stacken (som har en fast storlek) är oftast tomt och väntar på användarindata. När indata anges av en användare i ett program, till exempel ett namn, lagras dessa data överst i stacken och tilldelas en returminnesadress. När stacken bearbetas skickas användarens indata till returadressen som är angiven i programmet.
- Översvämma stacken – när ett program skapas reserveras ett visst minnesutrymme för data. Stacken översvämmas om mängden data som skrivs är större än dess tilldelade minnesutrymme i minnesstacken. Det här problemet inträffar endast i kombinationer med skadliga indata.
- Utnyttja spill – om ett program väntar på att en användare ska ange sitt namn, men samtidigt körs ett kommando av en angripare som överskrider stackstorleken så sparas kommandot utanför det tilldelade området.
- Köra skadlig kod – kommandot körs inte automatiskt bara för att det överskrider utrymmet för stackbufferten. Men det kan hända om returadressen som pekar på det skadliga kommandot kommer från en angripare. Programmet kraschar innan buffertspillet inträffar, men programmet försöker att återställa genom att använda returadressen som kommer från angriparen. Om returadressen är en giltig adress innebär det att det skadliga kommandot körs.
- Utnyttja tillstånd – eftersom program vanligtvis körs i kernelläge eller med tillstånd som ärvs från ett servicekonto körs nu den skadliga koden med samma tillstånd som programmet som kraschade. Det kan innebära att angriparen kan ta kontroll över hela operativsystemet.