Introduktion till buffertöverskridning

Buffertöverskridning kallas också buffertöverskridning, är ett datortillstånd där ett program försöker lagra mer data i buffertminnet än minnet. Detta leder till att data lagras i angränsande lagring som ibland kan skriva över befintliga data, vilket kan orsaka potentiell dataförlust och ibland också en systemkrasch. Det är ett vanligt programmeringsfel som de flesta utvecklare begår medvetet. Detta utnyttjas oftast av hackare för att få tillgång till oönskad data.

Vad är buffertminne?

Utmärkt fråga. Ett buffertminne, eller buffert, är helt enkelt en sekvensiell del av RAM-enheten som avsätts för att lagra data tillfälligt medan den överförs från en plats till en annan - platsen är vanligtvis en in- eller utgångsenhet. Detta görs för att kompensera för skillnaden i hastigheter med vilka enheterna arbetar.

När du till exempel ger några dokument för utskrift är din senaste i7-processor snabb nog att köra kommandot i nanosekunder, medan den dåliga gamla skrivaren inte är utrustad med den snabba processorn. Så dokumenten hålls i buffertminnet och skickas till skrivaren med en hastighet som skrivaren accepterar. Detta frigör din CPU: s RAM för andra uppgifter.

Buffer Overflow Attack

Nu när en sårbarhet har identifierats med datorerna måste hackare utnyttja den och försöka attackera olika system genom buffertöverskridningsattacker. Nu uppstår frågan, hur utför en hacker en sådan attack och vilka är konsekvenserna?

I en buffertöverskridningsattack omfattar extradata instruktioner som är avsedda att utlösa skadliga aktiviteter som att skada filer, ändra data, skicka privat information över internet etc. En angripare skulle helt enkelt dra fördel av alla program som väntar på en viss användare mata in och injicera överskottsdata i bufferten.

Buffertöverskridningsattack kan huvudsakligen klassificeras i två typer

  • Stack-baserad: När attacken är baserad på minnesallokering. Detta är enklare att utnyttja och är därmed mer benägna för attacker.
  • Heap-baserad: När attacken är på heap-baserad minnesallokering. Detta är inte så lätt att utnyttja och är därför mycket mindre frekvent.

De språk som är mest sårbara för buffertöverskridningsattacker är C, C ++, Fortran och Assembly eftersom de använder stackbaserade minnesallokeringstekniker.

Botemedlet

När data är skadade finns det helt enkelt inget botemedel för att återställa originaldata. Dessutom avgör intensiteten av attacken till stor del botemedlet. Om attacken är liten och bara påverkar en del av minnet på en isolerad maskin, kan ett enkelt systemformat vara botemedel. Medan attacken är utbredd och har kompromitterat data över flera maskiner, skulle formatering av hela nätverket inte hjälpa såvida inte programmet som injicerar den skadliga koden är rätt.

Att förebygga är bättre än att bota

Som utvecklare är det vårt ansvar att kontrollera för buffertöverskridningar i vår kod. Om buffertöversvämningar hanteras i själva koden hämmas inte systemets säkerhet genom buffertöversvämningsattacker.

Följande är några enkla försiktighetsåtgärder som kan hjälpa till att förhindra buffertöverskridande.

  • Undantagshantering måste utnyttjas för att upptäcka buffertöverskridanden och förhindra körning av kod i händelse av det.
  • Tilldela tillräckligt stor storlek för att buffra så att icke avsedda stora datamängder hanteras på ett korrekt sätt.
  • Undvik att använda biblioteksfunktioner eller tredjepartsmetoder som inte är gränskontrollerade för buffertöversvämningar. Vanliga exempel på sådana funktioner som ska undvikas är get (), scanf (), strcpy () Dessa är främst på C / C ++ -språk.
  • Kodtest bör ta hänsyn till sådana sårbarheter och testa noggrant koden och fixa buggar som kan leda till överflöd.
  • Moderna programmeringsspråk, operativsystem och kodkompilatorer har utvecklats för att stoppa exekveringen av kommandot i händelse av ett buffertöverskridande. Detta har blivit det mest pålitliga sättet att automatiskt upptäcka buffertöverskridningar.

Prova själv…

Har förstått så mycket om buffertöverflöde och buffertattacker, varför inte försöka koda något skadligt själv?

Disclaimer - Följande program är endast för illustrationssyfte och ska inte användas för att orsaka skada av något slag. All likhet med skadlig kod är bara en slump. Dessutom är operativsystemen numera tillräckligt smarta för att ha buffert-attack-förebyggande kontroller på plats.

Nedan är C-programmet som kan orsaka en potentiell buffertöverskridning. Varför valet av språk C? Detta beror på att de mer avancerade programmeringsspråken har utvecklats för att endast hantera buffertöverskridanden under kompileringstiden. Även idag har kompilatorerna av C också vissa kontroller på plats för att undvika att detektera buffertöverskridning. Så du skulle bara se ett felmeddelande som indikerar att en buffertöverskridning upptäcktes.

#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;
)

Vad hände när 123456789 gavs som kommandoradsargumentet till programmet? Programmet genererade ett fel som kastas när kompilatorn upptäcker buffertöverskridning. Kompilatorerna och operativsystemen har idag ett extra skyddslager. Detta lager är ingenting, men variabler som kallas Kanarieöarna som initieras till vissa värden vid sammanställningstiden. Dessa variabler lagras sedan i angränsande minnesenheter i bufferten. Så, när bufferten flyter över, flödar extradata in i det intilliggande minnet och förstör värdet på Kanarieöarna. Så snart någon skadad kanarie upptäcks, avbryter systemet exekveringen.

Ett annat exempel på C ++ -språk:

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

Ingång - 123456789

Utgång -

Slutsats - buffertöverskridning

Så nu är jag säker på att du skulle ha förstått vikten av bufferthantering i ditt program. Inkludera den här praxisen för att kontrollera om buffertgränserna när du skriver samt testa din kod. Detta hjälper dig att skriva säker kod.

Rekommenderade artiklar

Detta har varit en guide till What is Buffer Overflow. Här diskuterade vi definitionen, förebyggande, minne, attack i buffertöverflöde. Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Vad är JavaScript?
  2. Vad är Django?
  3. Vad är SQL Developer?
  4. Vad är Azure?

Kategori: