Uvod u punjenje pufera

Buffer overflow poznat je i kao Buffer overrun, stanje je računala u kojem aplikacija pokušava pohraniti više podataka u međuspremnik, nego veličine memorije. To dovodi do spremanja podataka u susjedni prostor za pohranu, koji ponekad može prebrisati postojeće podatke, uzrokujući potencijalni gubitak podataka, a ponekad i pad sustava. To je uobičajena greška u programiranju koju većina programera čini nesvjesno. To najčešće koriste hakeri kako bi dobili pristup neželjenim podacima.

Što je memorija međuspremnika?

Izvrsno pitanje. Memorija međuspremnika ili međuspremnik je jednostavno slijedni dio RAM-a izdvojenog za privremeno zadržavanje podataka tijekom prijenosa s jednog mjesta na drugo - mjesto koje obično predstavlja uređaj za unos ili izlaz. To se radi kako bi se nadoknadila razlika u brzinama s kojima uređaji rade.

Na primjer, kada date neke dokumente za ispis, vaš najnoviji i7 procesor je dovoljno brz da izvrši naredbu ispisa u nanosekundama, dok stari stari pisač nije opremljen tim brzim procesorom. Dakle, dokumenti se čuvaju u međuspremniku i šalju na pisač brzinom kojom pisač prihvaća. Ovo oslobađa RAM memoriju vašeg CPU-a za druge zadatke.

Napad preljeva pufera

Sada kada je ranjivost identificirana s računalima, hakeri će je iskoristiti i pokušati napasti različite sustave napadima prepunjenosti međuspremnika. Sada se postavlja pitanje, kako haker izvršava takav napad i kakve su posljedice?

U napadu prelijevanja međuspremnika dodatni podaci uključuju upute koje su namijenjene pokretanju štetnih aktivnosti kao što su oštećenje datoteka, promjena podataka, slanje privatnih podataka putem interneta itd. Napadač će jednostavno iskoristiti svaki program koji čeka određenog korisnika unos i ubrizgavanje viška podataka u međuspremnik.

Napad preljeva pufera može se prije svega klasificirati u dvije vrste

  • Temeljeno na skupu: Kad je napad dodijeljen na memoriji na bazi snopa. To je jednostavnije iskoristiti i na taj način je sklonije napadima.
  • Na temelju heap-a: kada je napad dodijeljen na heap dodjeli memorije. To nije tako jednostavno iskoristiti, pa je zato i rjeđe.

Jezici koji su najranjiviji za napade prepunjenja međuspremnika su C, C ++, Fortran i Assembly jer koriste tehnike raspodjele memorije utemeljene na skupu.

Lijek

Nakon što su podaci oštećeni, jednostavno nema lijeka za vraćanje izvornih podataka. Štoviše, intenzitet napada u velikoj mjeri određuje izlječenje. Ako je napad blag i zahvaća samo dio memorije izoliranog stroja, jednostavan oblik sustava može biti lijek. Dok je napad široko rasprostranjen i kompromitirao podatke na nekoliko strojeva, oblikovanje cijele mreže neće pomoći ako se ne popravi program koji ubrizgava zlonamjerni kod.

Bolje spriječiti nego liječiti

Kao programeri, naša je odgovornost provjeriti punjenja međuspremnika u našem kodu. Ako se punjenjem međuspremnika upravlja u samom kodu, sigurnost sustava nije ometana napadima prepunjenja međuspremnika.

Slijedi nekoliko jednostavnih mjera predostrožnosti kako bi se spriječilo prepunjenje međuspremnika.

  • Rukovanje iznimkama mora se utjecati na otkrivanje prepunjenosti međuspremnika i sprečavanje izvršavanja koda u slučaju njega.
  • Dodijelite dovoljno veliku veličinu za međuspremnik tako da se s nenamjeravanim velikim količinama podataka postupa na pravilan način.
  • Izbjegavajte korištenje knjižničnih funkcija ili metoda trećih strana koje nisu obavezno provjerene zbog punjenja međuspremnika. Uobičajeni primjeri takvih funkcija koje treba izbjegavati su get (), scanf (), strcpy () Oni su prije svega na jeziku C / C ++.
  • Testiranje koda trebalo bi uzeti u obzir takve ranjivosti i strogo testirati kôd i popraviti pogreške koje mogu dovesti do prelijevanja.
  • Moderni programski jezici, operativni sustavi i prevoditelji koda razvili su se za zaustavljanje izvršenja naredbi u slučaju prekrivanja međuspremnika. Ovo je postao najpouzdaniji način za automatsko otkrivanje prekrivanja međuspremnika.

Pokušajte sami …

Toliko ste razumjeli o Buffer Overflow i Buffer Attacks, zašto ne biste pokušali sami kodirati nešto zlonamjerno?

Izjava o odricanju odgovornosti - Sljedeći je program samo za ilustraciju i ne bi se trebao koristiti za bilo koju vrstu štete. Bilo kakva sličnost zloćudnog koda samo je slučajna. Štoviše, operativni sustavi danas su dovoljno pametni da omogućuju preventivne napade i zaštite.

Ispod je C program koji može uzrokovati potencijalno prekoračenje međuspremnika. Zašto izbor jezika C? To je zato što su napredniji programski jezici razvijeni za rješavanje prekoračenja međuspremnika samo za vrijeme kompilacije. Iako, u današnje vrijeme sastavljači C-a imaju određene provjere kako bi se izbjeglo otkrivanje prekrivanja međuspremnika. Vidjeli biste samo poruku pogreške koja pokazuje da je otkriveno prekoračenje međuspremnika.

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

Što se dogodilo kada je 123456789 kao argument naredbenog retka dat programu? Program je stvorio pogrešku koja se baca kada prevoditelj otkriva preplavljivanje međuspremnika. Kompajleri i operativni sustavi danas imaju dodatni zaštitni sloj. Taj sloj nije ništa, već varijable koje se zovu Kanari, a koje se pokreću na određene vrijednosti u vrijeme sastavljanja. Te se varijable zatim pohranjuju u susjedne memorijske jedinice u međuspremnik. Dakle, kad god se međuspremnik prelije, dodatni podaci se slijevaju u susjednu memoriju i korumpiraju vrijednost Kanara. Čim se otkrije bilo koji oštećeni kanarinac, sustav prekida izvršenje.

Još jedan primjer na jeziku C ++:

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

Unos - 123456789

Izlaz -

Zaključak - Buffer Overflow

Dakle, do sada sam siguran da biste shvatili važnost rukovanja međuspremnicima u svom programu. Uključite ovu praksu da provjerite ima li međuspremnika tijekom pisanja i testiranja koda. To će vam pomoći da napišete siguran kôd.

Preporučeni članci

Ovo je vodič za ono što je punjenje pufera. Ovdje smo raspravljali o Definiciji, prevenciji, pamćenju, napadu u Buffer Overflowu. Možete i proći naše druge predložene članke da biste saznali više -

  1. Što je JavaScript?
  2. Što je Django?
  3. Što je SQL Developer?
  4. Što je Azure?

Kategorija: