Inleiding tot bufferoverloop

Bufferoverloop wordt ook wel bufferoverloop genoemd. Dit is een toestand van de computer waarbij een toepassing meer gegevens in het buffergeheugen probeert op te slaan dan de grootte van het geheugen. Dit leidt ertoe dat gegevens worden opgeslagen in aangrenzende opslag die soms de bestaande gegevens overschrijft, wat mogelijk gegevensverlies en soms ook een systeemcrash veroorzaakt. Het is een veel voorkomende programmeerfout die de meeste ontwikkelaars onbewust begaan. Dit wordt meestal door hackers misbruikt om toegang te krijgen tot ongevraagde gegevens.

Wat is buffergeheugen?

Uitstekende vraag. Een buffergeheugen of buffer is gewoon een opeenvolgend deel van het RAM-geheugen dat is gereserveerd om gegevens tijdelijk te bewaren terwijl deze van de ene naar de andere plaats worden overgedragen - de plaats is meestal een invoer- of uitvoerapparaat. Dit wordt gedaan om het verschil in snelheid waarmee de apparaten werken te compenseren.

Wanneer u bijvoorbeeld enkele documenten geeft om af te drukken, is uw nieuwste i7-processor snel genoeg om het afdrukcommando in nanoseconden uit te voeren, terwijl de arme oude printer niet is uitgerust met die snelle processor. De documenten worden dus in het buffergeheugen bewaard en aan de printer doorgegeven met een snelheid die de printer accepteert. Dit maakt het RAM-geheugen van uw CPU vrij voor andere taken.

Aanval bufferoverloop

Nu een kwetsbaarheid met de computers is geïdentificeerd, moeten hackers deze misbruiken en proberen verschillende systemen aan te vallen via bufferoverloopaanvallen. Nu rijst de vraag, hoe voert een hacker een dergelijke aanval uit en wat zijn de gevolgen?

In een buffer overflow-aanval bevatten de extra gegevens instructies die zijn bedoeld om schadelijke activiteiten te activeren, zoals het beschadigen van bestanden, het wijzigen van gegevens, het verzenden van privéinformatie via internet, enz. Een aanvaller zou gewoon profiteren van elk programma dat op een bepaalde gebruiker wacht voer overtollige gegevens in en injecteer deze in de buffer.

Bufferoverloopaanval kan voornamelijk in twee typen worden ingedeeld

  • Stack-gebaseerd: wanneer de aanval op stack-gebaseerde geheugentoewijzing is. Dit is eenvoudiger te exploiteren en is dus gevoeliger voor aanvallen.
  • Heap-gebaseerd: wanneer de aanval plaatsvindt op heap-gebaseerde geheugentoewijzing. Dit is niet zo gemakkelijk te exploiteren en komt dus veel minder vaak voor.

De talen die het meest kwetsbaar zijn voor buffer overflow-aanvallen zijn C, C ++, Fortran en Assembly omdat ze stack-gebaseerde geheugentoewijzingstechnieken gebruiken.

De oplossing

Zodra gegevens corrupt zijn, is er eenvoudigweg geen remedie om de oorspronkelijke gegevens te herstellen. Bovendien bepaalt de intensiteit van de aanval grotendeels de remedie. Als de aanval mager is en slechts een deel van het geheugen van een geïsoleerde machine beïnvloedt, kan een eenvoudig systeemformaat de remedie zijn. Terwijl, als de aanval wijdverbreid is en de gegevens over meerdere machines heeft gecompromitteerd, het formatteren van het hele netwerk niet zou helpen, tenzij het programma dat de kwaadaardige code injecteert vast is.

Voorkomen is beter dan genezen

Als ontwikkelaars is het onze verantwoordelijkheid om te controleren op bufferoverloop in onze code. Als bufferoverlopen in de code zelf worden afgehandeld, wordt de beveiliging van het systeem niet gehinderd door buffer-overflow-aanvallen.

Hier volgen enkele eenvoudige voorzorgsmaatregelen om bufferoverloop te voorkomen.

  • Uitzonderingsafhandeling moet worden gebruikt om bufferoverlopen te detecteren en code-uitvoering te voorkomen als deze zich voordoet.
  • Wijs groot genoeg toe om te bufferen zodat niet-bedoelde grote hoeveelheden gegevens op een juiste manier worden behandeld.
  • Gebruik geen bibliotheekfuncties of methoden van derden die niet gebonden zijn aan bufferoverloop. Veelvoorkomende voorbeelden van dergelijke functies die u moet vermijden, zijn gets (), scanf (), strcpy () Deze zijn voornamelijk in de taal C / C ++.
  • Codetests moeten rekening houden met dergelijke kwetsbaarheden en de code rigoureus testen en bugs oplossen die tot overloop kunnen leiden.
  • Moderne programmeertalen, besturingssystemen en code-compilers zijn geëvolueerd om de opdrachtuitvoering te stoppen in geval van een bufferoverloop. Dit is de meest betrouwbare manier geworden om buffer-overflows automatisch te detecteren.

Probeer het zelf…

Heb zoveel begrepen van Bufferoverloop en Bufferaanvallen, waarom probeer je dan niet zelf iets kwaadaardig te coderen?

Disclaimer - Het volgende programma dient uitsluitend ter illustratie en mag niet worden gebruikt om schade te berokkenen. Elke gelijkenis met kwaadaardige code is louter toevallig. Bovendien zijn de besturingssystemen tegenwoordig slim genoeg om bufferaanval-preventieve controles te kunnen uitvoeren.

Hieronder staat het C-programma dat een mogelijke bufferoverschrijding kan veroorzaken. Waarom de taalkeuze C? Dit komt omdat de meer geavanceerde programmeertalen alleen zijn ontwikkeld om bufferoverschrijdingen aan te pakken tijdens de compilatie. Hoewel de compilers van C tegenwoordig ook bepaalde controles hebben om overloop van de buffer te voorkomen. U ziet dus alleen een foutmelding die aangeeft dat een bufferoverschrijding is gedetecteerd.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Wat gebeurde er toen 123456789 als opdrachtregelargument aan het programma werd gegeven? Het programma heeft een fout gegenereerd die wordt gegenereerd wanneer de compiler bufferoverloop detecteert. De compilers en besturingssystemen hebben tegenwoordig een extra beschermingslaag. Deze laag is niets, maar variabelen die de Canarische eilanden worden genoemd en die tijdens het compileren naar bepaalde waarden worden geïnitieerd. Deze variabelen worden vervolgens opgeslagen in aangrenzende geheugeneenheden in de buffer. Dus, wanneer de buffer overloopt, stromen de extra gegevens in het aangrenzende geheugen en corrumpeert de waarde van de Canarische eilanden. Zodra een corrupte kanarie wordt gedetecteerd, wordt de uitvoering afgebroken.

Een ander voorbeeld in C ++ taal:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Invoer - 123456789

Uitgang -

Conclusie - bufferoverloop

Dus nu weet ik zeker dat je het belang van bufferafhandeling in je programma zou hebben begrepen. Gebruik deze methode om tijdens het schrijven op buffergrenzen te controleren en uw code te testen. Dit helpt u bij het schrijven van veilige code.

Aanbevolen artikelen

Dit is een leidraad geweest voor What is Buffer Overflow. Hier hebben we de definitie, preventie, geheugen, aanval in bufferoverloop besproken. U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie -

  1. Wat is JavaScript?
  2. Wat is Django?
  3. Wat is SQL Developer?
  4. Wat is Azure?