Hoe bufferoverloopmisbruik plaatsvindt
Aanvallers kunnen bufferoverloop misbruiken en uitvoerbare code uitvoeren door de buffers met een vaste grootte die zijn gereserveerd voor een invoerproces, te laten overlopen. Met deze code kan de aanvaller de doelcomputer overnemen of de gegevens schade toebrengen.
Hieronder worden de stack-gebaseerde overloopaanvallen beschreven:
- Normaal stackgeheugenproces – Het stackgeheugenobject met vaste grootte is meestal leeg en gereed voor invoer van de gebruiker. Wanneer een programma invoer van de gebruiker ontvangt, bijvoorbeeld een naam, worden de gegevens bovenop de stack opgeslagen en wordt een geheugenretouradres toegewezen. Wanneer de stack wordt verwerkt, wordt de invoer van de gebruiker verzonden naar het retouradres dat is opgegeven door het programma.
- De stack laten overlopen – Wanneer het programma wordt geschreven, wordt een bepaalde hoeveelheid geheugenruimte gereserveerd voor de gegevens. De stack loopt over als de gegevens die worden geschreven, een grotere omvang hebben dan de ruimte die hiervoor is gereserveerd in de geheugenstack Dit is alleen een probleem als dit in combinatie met schadelijke invoer gebeurt.
- Misbruik maken van de overloop – Als het programma wacht tot de gebruiker zijn/haar naam invoert en de aanvaller voert een uitvoerbare opdracht in die groter is dan de stackgrootte, wordt die opdracht buiten de gereserveerde ruimte opgeslagen.
- De schadelijke code uitvoeren – De opdracht wordt niet automatisch uitgevoerd omdat deze groter is dan de stackbufferruimte. Maar dit kan wel gebeuren als de aanvaller een retouradres levert dat verwijst naar de schadelijke opdracht. Het programma begint eerst vast te lopen vanwege de bufferoverloop, maar probeert zich vervolgens te herstellen door het retouradres te gebruiken dat door de aanvaller is geleverd. Als het retouradres een geldig adres is, wordt de schadelijke code uitgevoerd.
- Misbruik maken van machtigingen – Aangezien programma’s meestal worden uitgevoerd in de kernelmodus of met machtigingen die zijn overgenomen van een serviceaccount, wordt de schadelijke code nu uitgevoerd met dezelfde machtigingen als die van de toepassing die is gehackt. Dit kan betekenen dat de aanvaller het beheer van het besturingssysteem volledig kan overnemen.