Elke dag ontdekken en exploiteren hackers over de hele wereld nieuwe kwetsbaarheden in websites, applicaties en zelfs systeemarchitectuur. Een gemeenschappelijk ding in alle elektronische apparaten, oud of nieuw, is dat ze worden uitgevoerd door programma's die in het geheugen zijn opgeslagen. Hackers hebben hier misbruik van gemaakt en hebben kwetsbaarheden gevonden die bekend staan als bufferoverflows.
Hoewel niet nieuw, hebben bufferoverloopaanvallen en kwetsbaarheden grote schade aangericht in cyberspace. Hier leggen we je uit wat buffer-overflow-aanvallen zijn en hoe je ze kunt voorkomen.
Buffers en systeemgeheugen begrijpen
Om te begrijpen wat een bufferoverloopaanval is en hoe deze werkt, moet u weten wat een buffer is en hoe het geheugen van een computer werkt.
Stapel en hoop geheugen zijn twee hoofdkenmerken van het geheugen van een computer. Het zijn gegevensstructuren die worden gebruikt voor geheugentoewijzing. Hoewel ze vergelijkbaar zijn, stack en heap geheugen verschillen op meerdere manieren.
De stapel, die het Last-in, First-out (LIFO)-concept gebruikt, wordt gebruikt in het RAM (Random Access Memory) om sla programma-uitvoeringen tijdelijk op, terwijl de heap geheugen toewijst met behulp van dynamische toewijzing aan global variabelen. Maar één ding hebben ze gemeen: een buffer.
Wat is een buffer?
Een buffer is een geheugengebied dat wordt gebruikt om gegevens op te slaan, hoogstwaarschijnlijk in het RAM-geheugen van een computer, terwijl het van de ene naar de andere locatie wordt verplaatst. Deze gegevens zijn meestal programma's die moeten worden uitgevoerd. Buffers worden opgeslagen in de stapel of heap. Ze optimaliseren de uitvoering van data.
Wat is een bufferoverloop?
Een bufferoverloop treedt op wanneer de buffer meer gegevens ontvangt dan de opslagcapaciteit. Omdat het die hoeveelheid gegevens niet kan verwerken, loopt het over.
Nu, in het geheugen van een computer, net na een buffer of een bufferruimte is een retouradres. Dit retouradres wordt eigenlijk een Extended Instruction Pointer (EIP) genoemd. Zijn functie is om de computer naar een bepaald programma te wijzen wanneer deze is gevuld. Wanneer een buffer meer gegevens heeft dan hij kan bevatten en overloopt, loopt deze over naar het retouradres.
Laten we, om dit te begrijpen, aannemen dat u een bufferruimte heeft die slechts vijf letters kan bevatten. Dus als je woorden als "suiker" of "vrede" invult, kan de bufferstroom het bevatten. Maar als je een woord als 'authenticatie' hebt, zal het onvermijdelijk overlopen. Dit leidt tot een bug of crash in het systeem. Maar hackers kunnen dit beveiligingslek misbruiken om een bufferoverloopaanval te starten.
Wat is een bufferoverloopaanval en hoe werkt het?
Bufferoverloopaanvallen vinden plaats wanneer de hacker de controle over het retouradres of EIP overneemt. Wanneer de aanvaller weet hoe groot het geheugen van een systeem is, kan hij opzettelijk gegevens naar dat systeem schrijven om het te overspoelen. Vervolgens zorgen ze ervoor dat het EIP- of retouradres wordt geschreven om te verwijzen naar een programma dat hen toegang tot het systeem kan geven of gevoelige informatie kan onthullen die op het systeem is opgeslagen.
De aanvaller kan zelfs enkele gegevens schrijven die kwaadaardige code bevatten en ervoor zorgen dat de buffer overloopt. De EIP wordt vervolgens geschreven om het systeem terug te leiden naar de kwaadaardige code, en deze wordt uitgevoerd. Vervolgens krijgt de hacker de controle over het systeem.
Er zijn vijf belangrijke stappen bij bufferoverloopaanvallen:
- Spiking
- Fuzzing
- De offset vinden
- Het EIP- of retouradres overschrijven
- De kwetsbaarheid uitbuiten
Spieren is de eerste stap. Hier vinden de hackers het deel van het programmageheugen dat kwetsbaar is voor bufferoverflows. Dan komt fuzzing, wat vergelijkbaar is met spiking, maar hier stuurt de hacker tekens naar het programma om te zien of het kan worden verbroken. Eenmaal succesvol, gaat de aanvaller verder met het vinden van de offset, waar de buffer overstroomde. Dit wordt gedaan om de grootte van de buffer en het retouradres te kennen. Vervolgens voegt de hacker een kwaadaardige shell-code in en bestuurt hij het systeem.
Wat zijn de soorten bufferoverloopaanvallen?
Er zijn twee hoofdtypen bufferoverloopaanvallen: stack-gebaseerde en heap-gebaseerde aanvallen.
1. Op stapels gebaseerde bufferoverloopaanvallen
Op stapels gebaseerde bufferoverloopaanvallen zijn het meest populaire type bufferoverloopaanvallen. Ze treden op wanneer het stackgeheugen van het systeem wordt overschreden en misbruikt. Het wordt ook wel stack-smashing genoemd.
2. Op heap gebaseerde bufferoverloopaanvallen
Dit type stack-overflow is niet erg gebruikelijk, omdat het moeilijk te implementeren en te exploiteren is. Het treedt op wanneer het geheugen dat aan een programma is toegewezen, overloopt. In januari 2021 ontdekte Google een op heap gebaseerde bufferoverloop kwetsbaarheid in de V8-component van Chrome.
Hoe kunt u bufferoverloopaanvallen voorkomen?
Bufferoverloopaanvallen kunnen worden beperkt door gebruik te maken van runtime-beveiligingen van het besturingssysteem, veilige programmeertalen, randomisatie van de indeling van adresruimten en het zorgen voor algemene juiste beveiligingsmaatregelen.
1. Runtimebeveiliging van het besturingssysteem gebruiken
Runtime-beveiliging wordt ook wel runtime-array-grenzencontrole genoemd. Dit zorgt ervoor dat elk programma dat wordt uitgevoerd zich binnen de beschikbare bufferruimte of geheugen bevindt. En het controleert alle gegevens die in het geheugen van het systeem zijn geschreven. Dit maakt het voor hackers moeilijk om gegevens in het systeem te overschrijven en de kwetsbaarheid te misbruiken.
2. Veilige programmeertalen gebruiken
Programmeertalen zoals C en C++ implementeren geen controle van runtime-arraygrenzen omdat er extra code nodig is om elk programma dat in het systeem is geschreven te controleren en het vertraagt. Daarom zijn ze vatbaarder voor bufferoverloopaanvallen. Het is beter om veiligere talen zoals C#, Java en Python te gebruiken omdat ze een lager risico lopen op bufferoverloopaanvallen.
3. Gebruik Randomisatie van adresruimte-indeling (ASLR)
Deze beveiligingsmaatregel wijst willekeurig de adressen van programma's en functies in het geheugen van een systeem toe aan verschillende gegevensgebieden. Het maakt het voor een aanvaller moeilijk om door gevoelige functies in het geheugen te navigeren.
4. Zorg voor een strikt beveiligingsbeleid
Dit houdt in dat het systeem regelmatig wordt bijgewerkt, dat alle in het systeem geschreven gegevens worden gevalideerd en dat de minste rechten aan gebruikers worden toegewezen. Met het juiste beveiligingsbeleid hoeft u zich geen zorgen te maken over een bufferoverloopaanval.
Uw beveiliging strak houden is essentieel om aanvallen van bufferoverloop te bestrijden
Volgens een populair gezegde in beveiliging, "zolang een systeem door mensen wordt gebruikt, bestaat er een kwetsbaarheid", wat waar en onvermijdelijk is. U kunt de kans op een aanval echter altijd verkleinen door ervoor te zorgen dat de juiste beveiligingsmaatregelen worden getroffen en strikt worden nageleefd.
Onthoud dat hackers voortdurend nieuwe manieren vinden om kwetsbaarheden zoals deze te misbruiken. Daarom is het aan jou om hen voor te blijven door de laatste ontwikkelingen op het gebied van cybersecurity in de gaten te houden.