Introduksjon til Buffer Overflow

Bufferoverløp er også kjent som Buffer overrun, er en datamaskinstilstand der et program prøver å lagre mer data i bufferminnet enn størrelsen på minnet. Dette fører til at data lagres i tilstøtende lagring som noen ganger kan overskrive eksisterende data, forårsake potensielt datatap og noen ganger også et systemkrasj. Det er en vanlig programmeringsfeil som de fleste utviklere begår ubevisst. Dette blir ofte utnyttet av hackere for å få tilgang til uoppfordret data.

Hva er bufferminne?

Utmerket spørsmål. Et bufferminne, eller buffer, er ganske enkelt en sekvensiell del av RAM-en som er avsatt for å lagre data midlertidig mens den overføres fra et sted til et annet - stedet er vanligvis en inngangs- eller utgangsenhet. Dette gjøres for å kompensere for forskjellen i hastighetene enhetene fungerer på.

For eksempel, når du gir noen dokumenter til utskrift, er den nyeste i7-prosessoren rask nok til å utføre utskriftskommandoen på nanosekunder, mens den stakkars gamle skriveren ikke er utstyrt med den raske prosessoren. Så blir dokumentene holdt på bufferminnet og ført til skriveren med en hastighet som skriveren godtar. Dette frigjør CPU-RAM for andre oppgaver.

Buffer Overflow Attack

Nå som en sårbarhet er blitt identifisert med datamaskinene, er hackere nødt til å utnytte den og prøver å angripe forskjellige systemer gjennom buffervoldoverfall. Nå oppstår spørsmålet, hvordan utfører en hacker et slikt angrep, og hva er konsekvensene?

I et bufferoverløpsangrep inkluderer de ekstra dataene instruksjoner som er ment å utløse skadelige aktiviteter som å ødelegge filer, endre data, sende privat informasjon over internett, etc. En angriper vil ganske enkelt benytte seg av ethvert program som venter på en bestemt bruker legge inn og injisere overskuddsdata i bufferen.

Bufferoverløpsangrep kan primært klassifiseres i to typer

  • Stakkbasert: Når angrepet er basert på stakkbasert minnetildeling. Dette er enklere å utnytte og er dermed mer utsatt for angrep.
  • Heapbasert: Når angrepet er basert på heapbasert minnetildeling. Dette er ikke så lett å utnytte og er dermed langt sjeldnere.

Språkene som er mest utsatt for angrep på bufferoverløp er C, C ++, Fortran og Assembly når de bruker stakkelbaserte teknikker for tildeling av minne.

The Cure

Når dataene er skadet, er det rett og slett ingen kur for å gjenopprette de opprinnelige dataene. Dessuten bestemmer intensiteten av angrepet i stor grad kuren. Hvis angrepet er lite og berører bare en del av minnet til en isolert maskin, kan et enkelt systemformat være kuren. Selv om angrepet er utbredt og har kompromittert dataene over flere maskiner, vil formatering av hele nettverket ikke hjelpe med mindre programmet som injiserer den ondsinnede koden er løst.

Det er bedre å forebygge enn å helbrede

Som utviklere er det vårt ansvar å sjekke for bufferoverløp i koden vår. Hvis bufferoverløp håndteres i selve koden, hindres ikke sikkerheten til systemet gjennom bufferoverløpsangrep.

Følgende er noen enkle forholdsregler som kan forhindre bufferoverløp.

  • Unntakshåndtering må utnyttes for å oppdage bufferoverløp og forhindre kjøring av kode i tilfelle det.
  • Tildel stor nok størrelse til å buffe slik at ikke-tilsiktede store datamengder blir behandlet på en ordentlig måte.
  • Unngå å bruke bibliotekfunksjoner eller tredjepartsmetoder som ikke er kontrollert for bufferoverløp. Vanlige eksempler på slike funksjoner å unngå er får (), scanf (), strcpy () Disse er først og fremst på C / C ++ språk.
  • Kodetesting skal redegjøre for slike sårbarheter og nøye teste koden og fikse feil som kan føre til overflow.
  • Moderne programmeringsspråk, operativsystemer og kodekompilatorer har utviklet seg for å stoppe utførelsen av kommandoen i tilfelle et bufferoverløp. Dette har blitt den mest pålitelige måten å automatisk oppdage bufferoverløp på.

Prøv det selv …

Har forstått så mye om Buffer Overflow og Buffer Attacks, hvorfor ikke prøve å kode noe ondsinnet selv?

Ansvarsfraskrivelse - Følgende program er kun ment som illustrasjonsformål og skal ikke brukes til å forårsake skade av noe slag. Enhver likhet med ondsinnet kode er bare tilfeldig. Videre er operativsystemene i dag smarte nok til å ha buffere-angrep-forebyggende kontroller på plass.

Nedenfor er C-programmet som kan forårsake en potensiell bufferoverskridelse. Hvorfor valg av språk C? Dette er fordi de mer avanserte programmeringsspråk ble utviklet for å håndtere bufferoverskridelser bare under kompileringstiden. Skjønt, i dag har kompilatorene av C også visse kontroller på plass for å unngå å oppdage bufferoverløp. Så du vil bare se en feilmelding som indikerer at en bufferoverskridelse ble oppdaget.

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

Hva skjedde da 123456789 ble gitt som kommandolinjeargumentet til programmet? Programmet genererte en feil som kastes når kompilatoren oppdager bufferoverløp. Kompilatorene og operativsystemene har i dag et ekstra beskyttelseslag. Dette laget er ingenting, men variabler kalt Kanariøyene som blir satt i gang til bestemte verdier på sammenstillingen. Disse variablene blir deretter lagret i tilstøtende minneenheter til bufferen. Så når bufferen flyter over, strømmer de ekstra dataene inn i det tilstøtende minnet og ødelegger verdien av Kanariøyene. Så snart korrupt kanari blir oppdaget, avbryter systemet kjøringen.

Et annet eksempel på C ++ språk:

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

Inndata - 123456789

Utgang -

Konklusjon - Buffer Overflow

Så nå er jeg sikker på at du ville forstått viktigheten av bufferstyring i programmet ditt. Ta med denne praksisen for å se etter buffervilkår mens du skriver i tillegg til å teste koden. Dette vil hjelpe deg med å skrive sikker kode.

Anbefalte artikler

Dette har vært en guide til What is Buffer Overflow. Her diskuterte vi Definisjon, forebygging, hukommelse, angrep i Buffer Overflow. Du kan også gå gjennom andre foreslåtte artikler for å lære mer -

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