Introduktion til bufferoverløb

Bufferoverløb er også kendt som Buffer overrun, er en tilstand af computeren, hvor en applikation forsøger at gemme flere data i bufferhukommelsen end hukommelsens størrelse. Dette fører til, at data gemmes i tilstødende lager, som undertiden kan overskrive de eksisterende data, hvilket kan forårsage potentielt datatab og undertiden også et systemnedbrud. Det er en almindelig programmeringsfejl, som de fleste udviklere begår ubevidst. Dette bliver ofte udnyttet af hackere for at få adgang til uopfordrede data.

Hvad er bufferhukommelse?

Fremragende spørgsmål. En bufferhukommelse eller buffer er simpelthen en sekventiel del af RAM, der er afsat til midlertidigt at opbevare data, mens de overføres fra et sted til et andet - stedet er normalt en input- eller outputenhed. Dette gøres for at kompensere for forskellen i de hastigheder, hvormed enhederne fungerer.

For eksempel, når du giver nogle dokumenter til udskrivning, er din seneste i7-processor hurtig nok til at udføre printkommandoen i nanosekunder, mens den fattige gamle printer ikke er udstyret med den hurtige processor. Så dokumenterne holdes i bufferhukommelsen og overføres til printeren med en hastighed, som printeren accepterer. Dette frigør din CPUs RAM til andre opgaver.

Buffer Overflow Attack

Nu, hvor der er identificeret en sårbarhed med computere, er hackere bundet til at udnytte den og forsøge at angribe forskellige systemer gennem buffervoldoverfald. Nu opstår spørgsmålet, hvordan udfører en hacker et sådant angreb, og hvad er konsekvenserne?

I et bufferoverløbeangreb inkluderer de ekstra data instruktioner, der er beregnet til at udløse ødelæggende aktiviteter, såsom korruption af filer, ændring af data, afsendelse af privat information over internettet osv. En angriber vil simpelthen drage fordel af ethvert program, der venter på en bestemt bruger input og injicere overskydende data i bufferen.

Bufferoverløbsangreb kan primært klassificeres i to typer

  • Stakbaseret: Når angrebet er på stakebaseret hukommelsesallokering. Dette er enklere at udnytte og er derfor mere tilbøjelige til angreb.
  • Heap-baseret: Når angrebet er på heap-baseret hukommelsesallokering. Dette er ikke så let at udnytte og er derfor langt mindre hyppigt.

De sprog, der er mest sårbare over for bufferoverløbsangreb, er C, C ++, Fortran og Assembly, da de bruger stakebaserede hukommelsestildelingsteknikker.

Kuren

Når dataene først er korrupte, er der simpelthen ingen kur til at gendanne de originale data. Derudover bestemmer intensiteten af ​​angrebet stort set kuren. Hvis angrebet er mager og kun påvirker en del af hukommelsen på en isoleret maskine, kan et simpelt systemformat være kur. Mens angrebet er udbredt og har kompromitteret dataene over flere maskiner, ville formatering af hele netværket ikke hjælpe, medmindre programmet, der injicerer den ondsindede kode, er rettet.

Forebyggelse er bedre end kur

Som udviklere er det vores ansvar at tjekke for bufferoverløb i vores kode. Hvis bufferoverløb håndteres i selve koden, hæmmes ikke systemets sikkerhed gennem bufferoverløbsangreb.

Følgende er nogle enkle forholdsregler, der kan hjælpe med at forhindre bufferoverløb.

  • Undtagelseshåndtering skal udnyttes til at registrere bufferoverløb og forhindre eksekvering af kode i tilfælde af det.
  • Tildel stor nok størrelse til at buffe, så ikke-tilsigtede store mængder data behandles på en ordentlig måde.
  • Undgå at bruge biblioteksfunktioner eller tredjepartsmetoder, der ikke er bundet-kontrolleret for bufferoverløb. Almindelige eksempler på sådanne funktioner, der skal undgås, er får (), scanf (), strcpy () Disse er primært på C / C ++ sprog.
  • Kodetest skal tage højde for sådanne sårbarheder og nøje teste koden og rette fejl, der kan føre til overløb.
  • Moderne programmeringssprog, operativsystemer og kodekompilatorer har udviklet sig til at stoppe udførelsen af ​​kommandoen i tilfælde af et bufferoverløb. Dette er blevet den mest pålidelige måde at automatisk registrere bufferoverløb på.

Prøv det selv …

Har forstået så meget om Buffer Overflow og Buffer Attacks, hvorfor ikke prøve at kode noget ondsindet selv?

Ansvarsfraskrivelse - Følgende program er kun til illustrationsformål og bør ikke bruges til at forårsage skade af nogen art. Enhver lighed med ondsindet kode er kun tilfældig. Desuden er operativsystemerne i dag smarte nok til at have buffer-angreb-forebyggende kontrol på plads.

Nedenfor er C-programmet, der kan forårsage en potentiel bufferoverskridelse. Hvorfor valget af sprog C? Dette skyldes, at de mere avancerede programmeringssprog blev udviklet til kun at håndtere bufferoverskridelser i kompileringstiden. Selvom i dag i dag kompilatorerne af C også har visse kontroller på plads for at undgå at detektere bufferoverløb. Så du ser kun en fejlmeddelelse, der angiver, at en bufferoverskridelse blev fundet.

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

Hvad skete der, da 123456789 blev givet som kommandolinjeargumentet til programmet? Programmet genererede en fejl, der kastes, når kompilatoren registrerer bufferoverløb. Kompilatorerne og operativsystemerne har i dag et ekstra beskyttelseslag. Dette lag er intet, men variabler kaldet De Kanariske Øer, der indledes til bestemte værdier på sammenstillingstiden. Disse variabler gemmes derefter i tilstødende hukommelsesenheder i bufferen. Så når bufferen flyder over, flyder de ekstra data ind i den tilstødende hukommelse og ødelægger værdien af ​​De Kanariske Øer. Så snart enhver korrupt kanarie opdages, afbryder systemet udførelsen.

Et andet eksempel på C ++ sprog:

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

Input - 123456789

Output -

Konklusion - Bufferoverløb

Så nu er jeg sikker på, at du ville have forstået betydningen af ​​bufferstyring i dit program. Inkluder denne praksis for at kontrollere, om der er buffergrænser, mens du skriver samt tester din kode. Dette vil hjælpe dig med at skrive sikker kode.

Anbefalede artikler

Dette har været en guide til Hvad er Buffer Overflow. Her diskuterede vi Definition, forebyggelse, hukommelse, angreb i Buffer Overflow. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Hvad er JavaScript?
  2. Hvad er Django?
  3. Hvad er SQL Developer?
  4. Hvad er Azure?

Kategori: