Co je Kód Injekce a Jak se Můžete Vyhnout It
Kód Vstřikování zranitelnosti je obecný termín, který popisuje zranitelnost, která může být zneužita útočníkem k injekci a spustit škodlivý kód.
k této chybě zabezpečení dochází obvykle kvůli nedostatku nedůvěryhodného ověření dat. Aplikace, které přímo vyhodnocují kód, aniž by jej nejprve ověřily, by byly zranitelné vůči tomuto typu útoku.
vstřikování kódu je někdy zaměňováno s jinými zranitelnostmi, jako je a vstřikování příkazů. Je třeba poznamenat, že injekce kódu je jiný typ zranitelnosti, kdy útočník vstřikuje Kód Místo příkazů operačního systému. To znamená, že pokud jde o zranitelnosti při vkládání kódu, útočník je omezen jazykovou funkčností aplikace.
omezení útočníků
při využívání takových zranitelností jsou útočníci omezeni funkčností jazyka aplikace (například PHP / Python). Ve většině případů však může být útočník schopen využít funkce tlumočníka k přechodu od vstřikování kódu k vstřikování příkazů.
například, pokud útočník vloží PHP kód do webové aplikace, útočník by byl omezen funkčností dostupnou interpretem PHP. Když injekce útok nastane, PHP interpretru by spuštění vloženého kódu a závisí na tlumočníka funkčnost, útočník by mohl využít spuštění programu funkce, které jsou k dispozici v PHP, jako je system() nebo shell_exec s cílem vykonávat systémové příkazy.
Dopad vložení Kódu
dopad, že úspěšný útok by se může lišit v závislosti na několika faktorech, jako jsou jazyk, který používají aplikace, funkce jsou k dispozici prostřednictvím aplikace, atd.
ve většině případů by však úspěšný útok mohl zcela ohrozit důvěrnost, integritu a dostupnost aplikace a jejích dat.
příklad
Představte si webovou aplikaci, která předává nedůvěryhodná data, například vstup uživatele do funkce PHP eval (). Funkce eval () jednoduše vyhodnotí řetězec jako kód PHP, pokud má platnou syntaxi PHP a končí středníkem.
<?php
$ backup = “”;
$input = $_GET;
eval (“\$backup = \$input;”);
?>
vzhledem k tomu, že aplikace předává vstup uživatele do nebezpečné funkce PHP eval() a není prováděna žádná validace, aplikace by byla zranitelná vůči útokům na vstřikování kódu.
útočník by mohl tuto slabost využít dodáním vstupu 1; phpinfo(); jak je uvedeno níže:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo();
Spustit operační systém příkazů
Po ověření zranitelnosti, útočník by mohl pokračovat vykonávající systém příkazů s využitím tlumočníka funkce, které umožňují spuštění příkazu. V tomto případě se používá funkce system ().
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; systém (‘whoami’);
příkaz whoami při vyvolání vytiskne uživatelské jméno aktuálního uživatele. To znamená, že když aplikace
předá vstup uživatele funkci eval (), interpret PHP provede příkaz whoami na
podkladovém operačním systému.
Jakmile útočník může provádět systémové příkazy, mohli by pokračovat s získává interaktivní shell na zranitelné
systém a provádět další útoky na jiné systémy v rámci vašeho systému vnitřní sítě.
prevence
bez ohledu na jazyk, který se používá, lze zranitelnosti při vstřikování kódu zabránit dodržováním níže popsaných osvědčených postupů
:
- Vyhněte se hodnocení nedůvěryhodné údaje
◦ Pokud to není nezbytně nutné, ne přímo hodnotit nedůvěryhodné údaje použití nebezpečných funkcí, například eval(). * Zacházejte se všemi daty jako s nedůvěryhodnými
◦ Všimněte si, že nedůvěryhodná data se nevztahují pouze na vstupy poskytované prostřednictvím formulářů HTML. Informace, které jsou řízeny uživateli, jako jsou soubory cookie, záhlaví požadavků HTTP a nahrané soubory, by měly být považovány za nedůvěryhodné.
- ověření nedůvěryhodných údajů
◦ vždy ověřte vstup uživatele na straně serveru.
◦ Pokud uživatel má předložit údaje v určitém formátu, jako je datum, psč, čísla, e-mail
adresa, atd, ujistěte se, že uživatel je vstup odpovídá očekávanému formátu.
◦ Pokud aplikace očekává hodnotu v rámci omezené možnosti nastavení, postupujte podle whitelist přístup a zajistit, že
vstupní předloženy, je jedním z povolených možností.
- Harden tlumočník
◦ například, PHP interpret je funkčnost by měla být omezena na minimum funkce, která je vyžadována pro aplikace fungovat. To by útočníkům mohlo mnohem ztížit provádění systémových příkazů. Například funkce provádění programu PHP by mohly být deaktivovány úpravou php.ini soubor.
- statická analýza
◦ proveďte statické analytické činnosti k identifikaci zranitelností souvisejících s nebezpečným hodnocením.
- VAPT
◦ Provádět pravidelné Hodnocení Zranitelnosti a Penetrační Testování činnosti k identifikaci a zmírnění těchto nedostatků.