Uvod v pufer pufer

Buffer overflow je znan tudi kot Buffer overrun, je stanje računalnika, v katerem aplikacija poskuša shraniti več podatkov v medpomnilniški pomnilnik kot velikost pomnilnika. To vodi do tega, da se podatki shranijo v sosednji prostor za shranjevanje, ki lahko včasih prepiše obstoječe podatke, kar povzroči morebitno izgubo podatkov in včasih tudi zrušitev sistema. To je običajna programska napaka, ki jo večinoma storijo nevede. To najpogosteje izkoristijo hekerji za dostop do nezaželenih podatkov.

Kaj je vmesni pomnilnik?

Odlično vprašanje. Pomnilnik vmesnega pomnilnika ali medpomnilnik je preprosto zaporedni del RAM-a, ki začasno hrani podatke, medtem ko se ti prenašajo iz enega kraja v drugega - kraj, ki je običajno vhodna ali izhodna naprava. To se naredi za nadomestitev razlike v hitrostih, s katerimi naprave delujejo.

Na primer, ko daste nekaj dokumentov v tisk, je vaš najnovejši procesor i7 dovolj hiter, da lahko tiskalni ukaz izvede v nanosekundah, medtem ko slabi stari tiskalnik ni opremljen s tem hitrim procesorjem. Dokumenti se torej hranijo v pomnilniškem pomnilniku in se s tisto hitrostjo pošljejo tiskalniku. To sprosti RAM vašega CPU-ja za druge naloge.

Napad preliva na pufer

Zdaj, ko je bila z računalniki ugotovljena ranljivost, jo bodo hekerji izkoristili in skušali napasti različne sisteme z napadi preplastitve medpomnilnikov. Zdaj se postavlja vprašanje, kako heker izvede tak napad in kakšne so posledice?

V napadu prelivanja medpomnilnika dodatni podatki vključujejo navodila, ki naj bi sprožila škodljive dejavnosti, kot so poškodovanje datotek, spreminjanje podatkov, pošiljanje zasebnih podatkov po internetu itd. Napadalec bi preprosto izkoristil vsak program, ki čaka na določenega uporabnika vnesite in vstavite presežne podatke v medpomnilnik.

Napad preliva na pufer lahko razvrstimo predvsem v dve vrsti

  • Na osnovi zlaganja: Ko je napad dodeljen v pomnilniku na osnovi zlaganja. To je preprostejše za izkoriščanje in je tako bolj nagnjeno k napadom.
  • Na osnovi heap : ko je napad dodeljen v pomnilniškem paketu. To ni tako enostavno izkoristiti in je zato veliko manj pogosto.

Jeziki, ki so najbolj ranljivi za napade prelivanja medpomnilnikov, so C, C ++, Fortran in Assembly, saj uporabljajo tehnike razporejanja pomnilnika, ki temeljijo na zgibu.

Zdravilo

Ko so podatki poškodovani, obnovitve prvotnih podatkov preprosto ni. Še več, intenzivnost napada v veliki meri določa ozdravitev. Če je napad majhen in prizadene le del spomina izoliranega stroja, je preprost sistemski format lahko zdravilo. Če je napad razširjen in ogrozi podatke na več strojih, oblikovanje celotnega omrežja ne bi pomagalo, razen če je odpravljen program, ki vbrizga zlonamerno kodo.

Preprečevanje je boljše od zdravljenja

Kot razvijalci smo odgovorni, da preverimo, ali so v kodi prelivi puferji. Če se prelivi puferja obravnavajo v sami kodi, varnost sistema ne ovira napadov prelivanja medpomnilnika.

Sledi nekaj preprostih previdnostnih korakov, s katerimi lahko preprečite prelivanje medpomnilnikov.

  • Ravnanje z izjemami je treba uporabiti za odkrivanje prelivov medpomnilnika in preprečevanje izvršitve kode v primeru le-tega.
  • Dodelite dovolj veliko velikost, da se medpomni, tako da se nenamerne velike količine podatkov obravnavajo pravilno.
  • Izogibajte se uporabi knjižničnih funkcij ali metod drugih proizvajalcev, ki niso vezane s preverjanjem prelivov medpomnilnikov. Pogosti primeri takšnih funkcij, ki se jih je treba izogibati, so get (), scanf (), strcpy () Te so predvsem v jeziku C / C ++.
  • Testiranje kode mora upoštevati takšne ranljivosti in strogo testirati kodo in odpraviti napake, ki lahko vodijo do prelivanja.
  • Sodobni programski jeziki, operacijski sistemi in prevajalniki kode so se razvili, da ustavijo izvajanje ukaza v primeru prelivanja medpomnilnika. To je postal najbolj zanesljiv način za samodejno zaznavanje puferjev.

Poskusite sami …

Ste razumeli toliko o Buffer Overflow in Buffer Attacks, zakaj ne poskusite sami kodirati nekaj zlonamernega?

Izjava o omejitvi odgovornosti - Naslednji program je samo za ponazoritev in se ga ne sme uporabljati za kakršno koli škodo. Vsaka podobnost zlonamerne kode je zgolj naključna. Poleg tega so dandanes operacijski sistemi dovolj pametni, da lahko izvajajo preventivne preglede pred napadi.

Spodaj je program C, ki lahko povzroči prekoračitev potencialnega pufra. Zakaj izbira jezika C? Razlog za to je, da so bili naprednejši programski jeziki razviti samo za prekoračitve medpomnilnikov med časom prevajanja. Čeprav imajo dandanes prevajalniki C tudi določene preglede, da preprečijo zaznavanje prelivanja medpomnilnikov. Torej, videli bi samo sporočilo o napaki, ki kaže, da je bilo zaznano prekoračenje medpomnilnika.

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

Kaj se je zgodilo, ko je bil 123456789 program naveden kot argument ukazne vrstice? Program je ustvaril napako, ki se vrže, ko prevajalnik zazna prekrivanje medpomnilnika. Danes imajo prevajalniki in operacijski sistemi dodano zaščitno plast. Ta plast ni nič, ampak spremenljivke, imenovane Kanari, ki jih sprožijo določene vrednosti v času prevajanja. Te spremenljivke se nato shranijo v sosednje pomnilniške enote v medpomnilnik. Torej, kadar pufer preplavi, se dodatni podatki pretakajo v sosednji pomnilnik in poškodujejo vrednost Kanarskih otokov. Takoj ko odkrijejo pokvarjen kanarček, sistem prekine izvršitev.

Še en primer v jeziku C ++:

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

Vnos - 123456789

Izhod -

Zaključek - Buffer Overflow

Do sedaj sem prepričan, da bi že razumeli pomen ravnanja z medpomnilniki v vašem programu. Vključite to prakso, da preverite, ali obstajajo meje medpomnilnikov med pisanjem in preizkušanje kode. To vam bo pomagalo napisati varno kodo.

Priporočeni članki

To je vodnik o tem, kaj je pufer puferja. Tu smo razpravljali o definiciji, preprečevanju, pomnjenju, napadu v Buffer Overflow. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

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