Úvod do pretečenia vyrovnávacej pamäte

Pretečenie vyrovnávacej pamäte je tiež známe ako pretečenie vyrovnávacej pamäte, je stav počítača, v ktorom sa aplikácia pokúša uložiť viac údajov do vyrovnávacej pamäte, ako je veľkosť pamäte. To vedie k ukladaniu údajov do susedného úložiska, ktoré môže niekedy prepísať existujúce údaje, čo môže spôsobiť stratu údajov a niekedy aj zlyhanie systému. Je bežnou chybou programovania, ktorú väčšina vývojárov pácha nevedomky. Hackeri to najčastejšie využívajú na získanie prístupu k nevyžiadaným údajom.

Čo je to vyrovnávacia pamäť?

Skvelá otázka. Vyrovnávacia pamäť alebo vyrovnávacia pamäť je jednoducho sekvenčná časť pamäte RAM vyhradenej na dočasné uloženie údajov počas ich prenosu z jedného miesta na druhé - miesto zvyčajne predstavuje vstupné alebo výstupné zariadenie. Týmto sa kompenzuje rozdiel v rýchlostiach, pri ktorých zariadenia pracujú.

Napríklad, keď dáte nejaké dokumenty na tlač, váš najnovší procesor i7 je dostatočne rýchly na vykonanie príkazu na tlač v nanosekundách, zatiaľ čo zlá stará tlačiareň nie je vybavená týmto rýchlym procesorom. Dokumenty sú teda držané vo vyrovnávacej pamäti a prenášané na tlačiareň rýchlosťou, ktorú tlačiareň prijíma. Tým sa uvoľní RAM vášho CPU pre ďalšie úlohy.

Attack Overflow Attack

Teraz, keď bola počítačom identifikovaná zraniteľnosť, hackeri ju musia zneužiť a pokúsiť sa zaútočiť na rôzne systémy prostredníctvom útokov na pretečenie vyrovnávacej pamäte. Teraz vyvstáva otázka, ako hacker vykoná taký útok a aké sú dôsledky?

Pri útoku na pretečenie vyrovnávacej pamäte obsahujú dodatočné údaje pokyny, ktoré sú určené na spustenie škodlivých aktivít, ako je poškodenie súborov, zmena údajov, odosielanie súkromných informácií cez internet atď. Útočník by jednoducho využil akýkoľvek program, ktorý čaká na určitého používateľa. vstup a vstrekujte nadbytočné údaje do medzipamäte.

Útok na pretečenie vyrovnávacej pamäte možno primárne rozdeliť do dvoch typov

  • Zásobník: Keď je útok založený na alokácii pamäte založenej na zásobníku. Toto sa ľahšie využíva, a preto je náchylnejšie k útokom.
  • Heap-based: Keď je útok na alokácii pamäte založenej na halde. Nie je to také ľahké využiť, a preto je oveľa menej časté.

Jazyky, ktoré sú najviac náchylné na útoky s pretečením vyrovnávacej pamäte, sú C, C ++, Fortran a Assembly, pretože používajú techniky prideľovania pamäte založenej na zásobníku.

Liek

Keď sú údaje poškodené, jednoducho nie je možné obnoviť pôvodné údaje. Intenzita útoku navyše do veľkej miery určuje liečbu. Ak je útok slabý a ovplyvňuje iba časť pamäte izolovaného počítača, môže sa vyliečiť jednoduchý systémový formát. Keďže ak je útok rozsiahly a ohrozil údaje na niekoľkých počítačoch, formátovanie celej siete by nepomohlo, pokiaľ nebude opravený program, ktorý vstrekuje škodlivý kód.

Prevencia je lepšia ako liečba

Ako vývojári sme zodpovední za kontrolu pretečenia vyrovnávacej pamäte v našom kóde. Ak je pretečenie vyrovnávacej pamäte riešené v samotnom kóde, bezpečnosť systému nie je obmedzená útokmi na pretečenie vyrovnávacej pamäte.

Nasleduje niekoľko jednoduchých preventívnych krokov, ktoré môžu pomôcť zabrániť pretečeniu vyrovnávacej pamäte.

  • Spracovanie výnimiek sa musí využívať na zistenie pretečenia vyrovnávacej pamäte a na zabránenie vykonania kódu v prípade, že dôjde k pretečeniu.
  • Pridelte dostatočne veľkú veľkosť na vyrovnávaciu pamäť, aby sa s neplánovanými veľkými objemami údajov zaobchádzalo správne.
  • Nepoužívajte funkcie knižníc alebo metódy tretích strán, ktoré nie sú viazané na kontrolu pretečenia vyrovnávacej pamäte. Bežnými príkladmi takýchto funkcií, ktorým sa treba vyhnúť, sú get (), scanf (), strcpy () Jedná sa predovšetkým o jazyk C / C ++.
  • Testovanie kódu by malo zohľadňovať takéto zraniteľné miesta a dôsledne testovať kód a opraviť chyby, ktoré môžu viesť k pretečeniu.
  • Moderné programovacie jazyky, operačné systémy a kompilátory kódov sa vyvinuli tak, aby zastavili vykonávanie príkazov v prípade pretečenia vyrovnávacej pamäte. Toto sa stalo najspoľahlivejším spôsobom, ako automaticky zisťovať pretečenie vyrovnávacej pamäte.

Vyskúšajte sami …

Už ste toho veľa pochopili o pretečení vyrovnávacích pamätí a útokoch z vyrovnávacích pamätí, prečo by ste sa sami nesnažili kódovať niečo škodlivé?

Zrieknutie sa zodpovednosti - nasledujúci program slúži iba na ilustráciu a nemal by sa používať na poškodenie akéhokoľvek druhu. Akákoľvek podobnosť so škodlivým kódom je iba náhodná. Okrem toho sú v súčasnosti operačné systémy dosť inteligentné, aby mohli mať zavedené preventívne kontroly vyrovnávacích pamätí.

Nižšie je uvedený program C, ktorý môže spôsobiť potenciálne prekročenie vyrovnávacej pamäte. Prečo výber jazyka C? Dôvodom je skutočnosť, že pokročilejšie programovacie jazyky boli vyvinuté tak, aby riešili prekročenie vyrovnávacej pamäte iba počas kompilácie. Aj keď v súčasnosti kompilátory C majú zavedené určité kontroly, aby sa zabránilo detekcii pretečenia vyrovnávacej pamäte. Takže by sa vám zobrazila iba chybová správa naznačujúca, že bolo zistené prekročenie vyrovnávacej pamäte.

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

Čo sa stalo, keď program dostal argument príkazového riadku 123456789? Program generoval chybu, ktorá sa vyvolá, keď kompilátor zistí pretečenie vyrovnávacej pamäte. Kompilátory a operačné systémy majú v súčasnosti pridanú ochrannú vrstvu. Táto vrstva nie je nič iné ako premenné nazývané Kanárske ostrovy, ktoré sa inicializujú na určité hodnoty v čase kompilácie. Tieto premenné sa potom ukladajú do susedných pamäťových jednotiek do vyrovnávacej pamäte. Kedykoľvek dôjde k pretečeniu medzipamäte, ďalšie údaje tečú do susednej pamäte a poškodia hodnotu Kanárskych ostrovov. Akonáhle sa zistí poškodený kanárik, systém preruší vykonanie.

Ďalší príklad v jazyku C ++:

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

Vstup - 123456789

Výstup -

Záver - pretečenie vyrovnávacej pamäte

Takže som si už istý, že by ste pochopili dôležitosť spracovania vyrovnávacej pamäte vo vašom programe. Túto prax zahrňte, aby ste skontrolovali hranice medzipamäte pri písaní, ako aj testovali svoj kód. Pomôže vám to napísať bezpečný kód.

Odporúčané články

Toto bol návod na Čo je pretečenie vyrovnávacej pamäte. Tu sme diskutovali o definícii, prevencii, pamäti, útoku v pretečení vyrovnávacej pamäte. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Čo je to JavaScript?
  2. Čo je Django?
  3. Čo je SQL Developer?
  4. Čo je liek Azure?

Kategórie: