Bufferoverloop: definitie, aanvallen, typen en meer

Bufferoverloop
Afbeelding door tonodiaz op Freepik

Een bufferoverloop, ook wel bufferoverloop genoemd, vindt plaats wanneer de hoeveelheid gegevens die in de geheugenbuffer wordt opgeslagen de opslaglimiet overschrijdt. De toepassing overschrijft nabijgelegen geheugenlocaties terwijl wordt geprobeerd de gegevens naar de buffer te kopiëren. In dit artikel zullen we kijken naar bufferoverflow-aanvallen, typen en kwetsbaarheid 

Bufferoverloop 

Bufferoverflow is een softwarecoderingsfout of kwetsbaarheid die door hackers kan worden uitgebuit om ongeoorloofde toegang tot bedrijfssystemen te verkrijgen. Het is een van de bekendste kwetsbaarheden in de softwarebeveiliging, maar toch komt het nog steeds vrij vaak voor. Dit komt deels doordat het op verschillende manieren kan voorkomen, en de technieken die worden gebruikt om dit te voorkomen zijn vaak foutgevoelig.

De softwarefout richt zich op buffers, dit zijn opeenvolgende delen van het computergeheugen die gegevens tijdelijk vasthouden terwijl deze tussen locaties worden overgedragen. Een bufferoverloop, ook wel bufferoverloop genoemd, treedt op wanneer de hoeveelheid gegevens in de grens de opslagcapaciteit overschrijdt. Die extra gegevens stromen over naar aangrenzende geheugenlocaties en beschadigen of overschrijven de gegevens op die locaties.

Bufferoverflow-aanval 

Een bufferoverflow-aanval vindt plaats wanneer een hacker een coderingsfout manipuleert om het aangetaste systeem te doorbreken en schadelijke acties uit te voeren. De aanvaller wijzigt het uitvoeringspad van het programma om reeds bestaande bestanden te beschadigen of gegevens vrij te geven. Ze herschrijven ook delen van het geheugen van de applicatie.

Schending van de programmeertaal en het overschrijven van buffergrenzen zijn veelvoorkomende componenten van buffer-overflow-aanvallen. Verkeerde aannames over de hoeveelheid of samenstelling van gegevens zijn, samen met geheugenmanipulatie, de belangrijkste oorzaken van bufferoverflows.

Hoe werkt een bufferoverloopaanval?

Meestal combineert de aanvaller kwaadaardige code met zorgvuldig samengestelde invoergegevens om te profiteren van softwarefouten in het beoogde systeem. Door de buffer te manipuleren en deze te laten overstromen, geeft de kwaadaardige code de aanvaller toegang om deze code uit te voeren.

Een aanvaller moet eerst een softwareprogramma of -systeem lokaliseren dat kwetsbaar is voordat hij een lading gegevens creëert die bedoeld is om misbruik te maken van de kwetsbaarheid om een ​​bufferoverflow-aanval uit te voeren. De payload wordt geleverd door een netwerk- of webgebaseerde aanvalsvector, inclusief phishing-websites of e-mails. 

Nadat de payload door het doelsysteem is ontvangen, wordt het softwareprogramma verwerkt en probeert het de binnenkomende gegevens in de buffer op te slaan. De code wordt uitgevoerd zoals bedoeld als de rand te klein is om de gegevens te bevatten; anders zal het overstromen.

Nadat de aanvaller het systeem heeft overgenomen, kan hij besluiten vertrouwelijke informatie te stelen, de reguliere bedrijfsvoering te verstoren of toegang te krijgen tot andere systemen op het netwerk. Om deze aanvallen te stoppen moeten beveiligingsmaatregelen zoals firewalls en inbraakdetectiesystemen worden ingevoerd, samen met routinematige software-updates.

Bufferoverflow-aanvallen in het verleden 

Laten we enkele bekende voorbeelden van bufferaanvallen uit de geschiedenis onderzoeken.

  • De Morris-worm van 2 november 1988, ook wel bekend als de internetworm, was een van de eerste computerwormen die aanzienlijke aandacht kreeg van de reguliere media. De Morris-wormaanval maakte gebruik van meerdere kwetsbaarheden, waaronder UNIX sendmail (via een achterdeur), Finger (via een overschrijdende grens) en rsh/rexec. Het was ook in staat zwakke wachtwoorden te raden. Bovendien kon het zwakke wachtwoorden raden. 
  • Het bedrijf Sony Pictures Entertainment kreeg in november 2014 te maken met een aanzienlijke inbreuk op zijn computersystemen als gevolg van een buffer-overflow-aanval. De aanvallers stalen gevoelige gegevens, waaronder niet eerder uitgebrachte films en de persoonlijke gegevens van werknemers en beroemdheden.
  • In juni 2011 vond een bufferoverflow-aanval tegen Citigroup Bank plaats, waardoor hackers toegang kregen tot de namen, adressen en rekeningnummers van ongeveer 200,000 klanten. Met deze informatie konden de aanvallers ruim 2.7 miljoen dollar van de bank stelen.
  • In januari 2021 brachten de Libgcrypt-ontwikkelaars een beveiligingspatchupdate uit nadat ze een ernstige heap-gebaseerde bufferoverflow-kwetsbaarheid in het programma hadden gevonden. Dankzij dit probleem konden aanvallers zich op machines richten en elke gewenste code schrijven.

Manieren om bufferoverlopen te voorkomen

Door beveiligingsmaatregelen in hun code op te nemen of door gebruik te maken van programmeertalen met ingebouwde beveiliging kunnen ontwikkelaars zich beschermen tegen kwetsbaarheden in de bufferoverloop. Runtime-bescherming is een ander kenmerk van hedendaagse besturingssystemen. Er zijn drie typische waarborgen:

  • Om de uitbuitende SEH-overschrijfmethode te gebruiken. Functioneel wordt een op de stapel gebaseerde bufferoverloop gebruikt om een ​​uitzonderingsregistratierecord te overschrijven dat op de stapel van een thread wordt bewaard om een ​​SEH-overschrijving tot stand te brengen.
  • Bescherming van besturingssystemen en codebeveiligingsmaatregelen alleen zijn onvoldoende. Een organisatie moet snel handelen om de getroffen software te repareren en ervoor te zorgen dat gebruikers de patch kunnen verkrijgen wanneer ze een overlopend grensprobleem ontdekken.
  • Adresruimte-randomisatie (ASLR) schudt de adresruimten van gegevensgebieden willekeurig. Over het algemeen vereisen deze aanvallen kennis van de locatie van de uitvoerbare code, wat vrijwel onmogelijk is wanneer adresruimten willekeurig worden gegenereerd.
  • Preventie van gegevensuitvoering voorkomt dat een aanval code uitvoert in een niet-uitvoerbaar gebied door specifieke geheugenlocaties als uitvoerbaar of niet-uitvoerbaar te markeren.

Exploitaties van bufferoverloop

Het besturingssysteem en de architectuur van het doelwit bepalen de bufferoverflow-aanvalsstrategieën die een hacker gebruikt. De aanvullende informatie die ze naar de software verzenden, zal echter waarschijnlijk kwaadaardige code bevatten, waardoor de aanvaller meer opdrachten kan starten en meer activiteiten kan starten. 

Het toevoegen van nieuwe code aan een programma kan het bijvoorbeeld ertoe aanzetten nieuwe dingen te doen, waardoor de aanvaller toegang kan krijgen tot het IT-systemen van het bedrijf. Een aanvaller kan mogelijk doelbewust gegevens invoeren die de buffer niet kan bevatten, als hij of zij op de hoogte is van de geheugenindeling van het programma. Ze kunnen de controle overnemen door dit te gebruiken om uitvoerbare code die is opgeslagen in geheugengebieden te vervangen door kwaadaardige code.

Bufferoverlooptypen 

Aanvallers gebruiken verschillende buffer-overflow-technieken om misbruik te maken van systemen binnen bedrijven. De meest typische zijn:

#1. Op stapel gebaseerde bufferoverlopen

Het meest voorkomende type bufferoverflow-aanval is deze. Met behulp van de stackgebaseerde techniek kan een aanvaller kwaadaardige code bevattende gegevens aan een applicatie leveren, die deze vervolgens in een stackbuffer opslaat. Dit geeft de aanvaller controle over overdrachten door alles op de stapel te overschrijven, inclusief de retouraanwijzer.

#2. Op heap gebaseerde bufferoverlopen

Het is moeilijker om een ​​heap-gebaseerde aanval uit te voeren dan een stack-gebaseerde aanval. Bij dit type aanval wordt het geheugen van een programma overbelast, meer dan nodig is voor de lopende runtime-functies.

#3. Formaat String Attack

Wanneer een toepassing invoergegevens als een opdracht verwerkt of de invoergegevens niet goed controleert, vindt er een formatstring-exploit plaats. Dit type geeft de aanvaller de mogelijkheid om code uit te voeren, toegang te krijgen tot gegevens uit de stack en applicatiesegmentatiefouten te creëren. Dit kan extra gebeurtenissen veroorzaken die de stabiliteit en veiligheid van het systeem in gevaar brengen. 

Kwetsbaarheid van bufferoverloop 

Bufferoverflows worden door aanvallers gebruikt om de controle over een machine over te nemen, willekeurige code uit te voeren en te knoeien met de uitvoeringsstack van webapplicaties. Zowel webservers als applicatieservers kunnen kwetsbaarheden in de bufferoverloop hebben, vooral in webapplicaties die gebruik maken van bibliotheken zoals grafische bibliotheken. Codering voor kwetsbaarheidsapplicaties kan ook bufferoverflow-defecten bevatten. Dit is waarschijnlijker omdat ze moeilijker te exploiteren zijn, minder snel door hackers worden gevonden en minder aandacht krijgen van beveiligingsprofessionals.

Een bufferoverloopkwetsbaarheid treedt doorgaans op wanneer code:

  • Is afhankelijk van externe gegevens om zijn gedrag te controleren
  • Is afhankelijk van gegevenseigenschappen die buiten het directe bereik worden afgedwongen
  • Is zo complex dat programmeurs het gedrag ervan niet nauwkeurig kunnen voorspellen

Gevolgen van bufferoverloop

De volgende zijn typische uitkomsten van een bufferoverflow-aanval:

  • Systeem crasht: Meestal zorgt deze aanval ervoor dat het systeem crasht. Het kan er ook voor zorgen dat programma's in een eindeloze cyclus terechtkomen en een gebrek aan beschikbaarheid veroorzaken.
  • Verlies van toegangscontrole: Bij deze aanval wordt vaak gebruik gemaakt van willekeurige code, die vaak buiten de parameters van de beveiligingsvoorschriften in applicaties valt.
  • Bijkomende beveiligingsproblemen: Een aanvaller kan deze aanval, die leidt tot het uitvoeren van willekeurige code, gebruiken om in te breken in andere systemen en andere beveiligingsmaatregelen in gevaar te brengen.

Wat is een voorbeeld van een bufferoverloop? 

Code die afhankelijk is van externe gegevens en de functie ‘gets()’ gebruikt om gegevens uit een stapelbuffer te halen, kan bijvoorbeeld resulteren in een eenvoudige bufferoverflow. Gebruikers moeten minder tekens invoeren dan ‘BUFSIZE’ om de veiligheid van de code te garanderen, omdat het systeem de hoeveelheid gegevens die de functie kan lezen niet kan beperken.

Is bufferoverflow een Ddos-aanval? 

De meest typische vorm van DDoS-aanval is een buffer-overflow-aanval. Hoewel sommige programmeertalen kwetsbaarder zijn dan andere, beïnvloeden ze vrijwel alle apps en webservers.

Wat veroorzaakt een bufferoverloop? 

Schending van de programmeertaal en het overschrijven van buffergrenzen zijn veelvoorkomende componenten van buffer-overflow-aanvallen. Verkeerde aannames over de hoeveelheid of samenstelling van gegevens zijn, samen met geheugenmanipulatie, de belangrijkste oorzaken van grensoverschrijdingen.

Wat betekent status_stack_buffer_overrun?

Hoewel het in eerste instantie impliceerde dat er sprake was van een stackbufferoverschrijding, heb ik er eerder op gewezen dat STATUS_STACK_BUFFER_OVERRUN dit niet noodzakelijkerwijs aangeeft. Het was te laat om de statuscode te hernoemen toen deze later werd uitgebreid om te impliceren: “Programma zelf-getriggerde abnormale beëindiging.” 

Welke hulpmiddelen worden gebruikt om bufferoverloop te detecteren?

Ze kunnen uw code verifiëren vóór of nadat deze is uitgevoerd, omdat deze statisch of dynamisch is. Hulpmiddelen voor het detecteren van grensoverschrijdingen zijn Fuzzing, AddressSanitizer en Valgrind.

Welke debugger is het beste voor bufferoverloop?

U kunt bijvoorbeeld de geheugenindeling, registers, stapel en heap van uw programma onderzoeken met behulp van een debugger zoals gdb, lldb of Visual Studio Debugger. Om geheugenproblemen op te sporen en te rapporteren, kunt u ook een geheugenfoutopsporingsprogramma gebruiken, zoals Dr. Memory, AddressSanitizer of Valgrind.

Referentie

0 aandelen:
Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *

Dit vind je misschien ook leuk