Úvod do přetečení vyrovnávací paměti

Přetečení vyrovnávací paměti je také známé jako přetečení vyrovnávací paměti, je stav počítače, ve kterém se aplikace pokouší uložit do vyrovnávací paměti více dat, než je velikost paměti. To vede k ukládání dat do sousedního úložiště, které může někdy přepsat stávající data, což může vést ke ztrátě dat a někdy také k selhání systému. Je to běžná chyba programování, kterou se většina vývojářů dopustí nevědomky. Hackeři to nejčastěji využívají k získání přístupu k nevyžádaným datům.

Co je vyrovnávací paměť?

Skvělá otázka. Vyrovnávací paměť nebo vyrovnávací paměť je jednoduše sekvenční část paměti RAM vyhrazené pro dočasné uložení dat, zatímco se přenáší z jednoho místa na druhé - místo obvykle představuje vstupní nebo výstupní zařízení. To se provádí za účelem kompenzace rozdílu v rychlosti, při které zařízení pracují.

Například když dáte nějaké dokumenty k tisku, váš nejnovější procesor i7 je dostatečně rychlý, aby provedl příkaz tisku v nanosekundách, zatímco chudá stará tiskárna není vybavena tímto rychlým procesorem. Dokumenty jsou tedy drženy do vyrovnávací paměti a předávány do tiskárny rychlostí, kterou tiskárna přijímá. Tím se uvolní RAM vašeho procesoru pro další úkoly.

Útok přetečení vyrovnávací paměti

Nyní, když byla u počítačů identifikována chyba zabezpečení, hackeři ji musí využít a pokusit se zaútočit na různé systémy pomocí útoků přetečením vyrovnávací paměti. Nyní vyvstává otázka, jak hacker provede takový útok a jaké jsou důsledky?

Při útoku přetečením vyrovnávací paměti obsahují dodatečná data pokyny, které mají za cíl vyvolat škodlivé činnosti, jako je poškození souborů, změna dat, zasílání soukromých informací přes internet atd. Útočník jednoduše využije jakýkoli program, který čeká na určitého uživatele vstupovat a vkládat nadbytečná data do vyrovnávací paměti.

Útok přetečením vyrovnávací paměti lze primárně rozdělit do dvou typů

  • Stack-based: Když je útok na alokaci paměti založené na stacku. Využití je jednodušší, a je tedy náchylnější k útokům.
  • Heap-based: Je-li útok na alokaci paměti založené na haldě. To není tak snadné využít a je tak daleko méně časté.

Nejzranitelnějšími útoky na přetečení vyrovnávací paměti jsou C, C ++, Fortran a Assembly, protože používají techniky přidělování paměti založené na zásobníku.

Lék

Jakmile jsou data poškozena, jednoduše není možné obnovit původní data. Intenzita útoku navíc do velké míry určuje léčbu. Pokud je útok skromný a ovlivňuje pouze část paměti izolovaného stroje, může být vyléčením jednoduchý systémový formát. Vzhledem k tomu, že je-li útok rozšířen a ohrozil data na několika počítačích, formátování celé sítě by nepomohlo, pokud nebude opraven program, který vstřikuje škodlivý kód.

Prevence je lepší než léčba

Jako vývojáři je naší povinností zkontrolovat přetečení vyrovnávací paměti v našem kódu. Pokud je přetečení vyrovnávací paměti řešeno v samotném kódu, není zabezpečení systému omezeno útoky přetečení vyrovnávací paměti.

Následuje několik jednoduchých preventivních kroků, které mohou zabránit přetečení vyrovnávací paměti.

  • Zpracování výjimek musí být využito k detekci přetečení vyrovnávací paměti a zabránění spuštění kódu v případě, že dojde.
  • Přiřaďte dostatečně velkou velikost, aby bylo možné vyrovnávací paměť, aby bylo s řádně nakládáno s neplánovanými velkými objemy dat.
  • Vyvarujte se přetečení vyrovnávací paměti, nepoužívejte knihovní funkce nebo metody třetích stran, které nejsou vázány na kontrolu. Běžnými příklady takových funkcí, kterým je třeba se vyhnout, jsou get (), scanf (), strcpy () Jedná se především o jazyk C / C ++.
  • Testování kódu by mělo zohledňovat taková zranitelnost a důsledně otestovat kód a opravit chyby, které mohou vést k přetečení.
  • Moderní programovací jazyky, operační systémy a kompilátory kódu se vyvinuly, aby zastavily provádění příkazů v případě přetečení vyrovnávací paměti. To se stalo nejspolehlivějším způsobem, jak automaticky detekovat přetečení vyrovnávací paměti.

Zkus to sám…

Už jste pochopili tolik o přetečení vyrovnávací paměti a útokech z vyrovnávací paměti, proč se sami nesnažit kódovat něco škodlivého?

Zřeknutí se odpovědnosti - Následující program slouží pouze pro ilustraci a neměl by se používat k poškození jakéhokoli druhu. Jakákoli podobnost se škodlivým kódem je pouze náhodná. Kromě toho jsou dnes operační systémy dostatečně chytré, aby mohly být zavedeny preventivní kontroly vyrovnávací paměti.

Níže je program C, který může způsobit potenciální přetečení vyrovnávací paměti. Proč volba jazyka C? Je tomu tak proto, že pokročilejší programovací jazyky byly vyvinuty pro překonání vyrovnávací paměti pouze během kompilace. I když v dnešní době mají kompilátory C také určité kontroly, aby se zabránilo detekci přetečení vyrovnávací paměti. Takže by se vám zobrazila pouze chybová zpráva označující, že bylo detekováno přetečení vyrovnávací paměti.

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

Co se stalo, když program dostal argument argumentu příkazového řádku 123456789? Program generoval chybu, která je vyvolána, když kompilátor detekuje přetečení vyrovnávací paměti. Kompilátory a operační systémy mají dnes přidanou ochrannou vrstvu. Tato vrstva není nic jiného než proměnné nazývané Kanárské ostrovy, které jsou inicializovány na určité hodnoty v době kompilace. Tyto proměnné jsou potom uloženy v sousedních paměťových jednotkách do vyrovnávací paměti. Takže kdykoli přetečení vyrovnávací paměti, další data proudí do sousední paměti a poškozuje hodnotu Kanárských ostrovů. Jakmile je detekován jakýkoli poškozený kanár, systém přeruší provádění.

Další příklad v jazyce C ++:

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

Vstup - 123456789

Výstup -

Závěr - přetečení vyrovnávací paměti

Teď jsem si jist, že byste pochopili důležitost zacházení s vyrovnávací pamětí ve vašem programu. Zahrňte tento postup, abyste zkontrolovali meze vyrovnávací paměti při psaní i testování kódu. To vám pomůže napsat bezpečný kód.

Doporučené články

Toto byl průvodce Co je přetečení vyrovnávací paměti. Zde jsme probrali definici, prevenci, paměť a útok v přetečení vyrovnávací paměti. Další informace naleznete také v dalších navrhovaných článcích -

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

Kategorie: