Injekční útoky jsou jedním z nejběžnějších způsobů, jak hackeři útočí na systémy, protože jim umožňují snadno spouštět mnoho příkazů a kódů. Vstřikování příkazů OS je jedním z takových útoků injekcí, o kterých musíte vědět. To zneužívá zranitelnost, kterou by správci systémů, databází a webových aplikací měli brát velmi vážně.
Co je tedy útok OS command injection?
Definice OS Command Injection
Vkládání příkazů operačního systému umožňuje útočníkovi se zlými úmysly spustit libovolný příkaz, který chce, tím, že zneužije zranitelný operační systém, program, aplikaci, databázi nebo zásuvný modul. Stává se to, když aplikace nedokážou správně ověřit a vyčistit parametry, které používají při volání funkcí shellu, jako je např Systém() nebo exec() pro provádění systémových příkazů.
Chcete-li lépe porozumět detekci a využívání vkládání příkazů OS, je užitečné prozkoumat tento problém ve třech hlavních kategoriích.
1. Přímé povelové vstřikování
Zvažte to z pohledu útočníka. Kybernetický útočník zjistí, že aplikace spouští určitý systémový příkaz; zadávají škodlivý příkaz jako součást očekávaných argumentů. Aplikace poté provede původní příkaz následovaný škodlivým příkazem.
Útočník používá různé přístupy k nalezení takové zranitelnosti. Nejjednodušší způsob, jak s tím bojovat, je udržovat operační systém neustále aktuální; můžete to udělat ve spolupráci s kompetentním IT týmem. Měli byste se vyhnout všem aplikacím a programům, které by mohly způsobit zranitelnost systému, protože útočník může přímo vložit kód a poškození je nepředvídatelné.
2. Injekce nepřímého příkazu
V případě nepřímého vložení příkazu útočník nevloží přímo kód nebo příkaz do systému. K tomu používají zranitelnou aplikaci nebo program v systému. Tato chyba zabezpečení vytváří most mezi útočníkem a operačním systémem. Útočník využívá této komunikace a snaží se na cíl spustit škodlivé kódy a příkazy.
Útočník provede řadu testů k identifikaci této chyby zabezpečení a zjistí, že software používá data z externího zdroje, jako je soubor nebo proměnná prostředí, k volání systémového příkazu. Útočník poté upraví obsah externího zdroje, takže nyní obsahuje škodlivý příkaz. To se pak provede spolu s pokyny původní aplikace.
Hlavní rozdíl mezi přímým a nepřímým vkládáním příkazů spočívá v tom, že útočník používá aplikaci ke komunikaci s operačním systémem. Ale není žádný skutečný rozdíl mezi poškozením, které mohou dvě formy injekce způsobit, takže je třeba řešit obě. Proto byste se měli ujistit, že programy ve vaší síti jsou spolehlivé a potřebné. Nenechávejte na svém zařízení aplikace, kterým nedůvěřujete.
3. Blind Command Injection
Dalším typem vkládání příkazů OS je vkládání příkazů naslepo. To znamená, že aplikace nevrací žádný výstup příkazu v odpovědi HTTP. Útočník používá různé techniky, jako je časové zpoždění a směrování výstupu, aby zneužil tuto chybu zabezpečení.
Představte si, že hledáte webovou stránku a hodnota "/?search=id" v adrese URL se při každém vyhledávání mění. Hodnota id zde může být uživatelská stránka, adresa fotografie produktu nebo jakákoli stránka na webu. Útočník může získat různé výsledky změnou hodnoty id. Je těžké to udělat ručně, ale existují nástroje jako Burp Suite pro tohle. Později útočník objeví na stránce zvláštnost: může být vrácena hodnota id, která, i když neukázala žádné výsledky, odezva webu byla 200, což naznačuje, že je vše v pořádku. V takovém případě by útočník mohl použít slepou příkazovou injekci.
Zvláště užitečná je technika, jako je časové zpoždění. Vzhledem k tomu, že stránka, která se otevře, bude prázdná, neobdržíte žádnou odpověď, ale stále můžete shromažďovat informace informace o tom, co je uloženo v databázi, založené na časových prodlevách, které načítají stránku pouze tehdy, je-li určitý znak současnost, dárek. To je příliš časově náročné na to, aby to byl manuální proces, ale spousta nástrojů může útok automatizovat.
Příklad scénáře útoku
Zopakujme si vše výše uvedené na příkladu. Představte si, že máte nákupní aplikaci, která uživateli umožňuje zjistit, zda jsou produkty skladem. Pro přístup ke všem těmto informacím použijte adresu URL, jako je ta níže:
example_unsafe_store.com/stockStatus? productID=245&storeID=
Představte si předání ID produktu a úložiště jako argumenty příkazu shellu, například „stockstat.pl 245 38“, protože aplikace by se musela dotazovat na staré záznamy. Pokud vývojář nepodnikne žádnou akci proti injekcím příkazů, může útočník poslat vstup pro provedení požadovaného příkazu:
& echo tento_a_škodlivý_příkaz &
Pokud tato položka vstoupí do parametru productID, bude příkaz spuštěný aplikací:
stockstat.pl & echo tento_a_škodlivý_příkaz & 38
Příkaz echo je užitečná metoda pro detekci injekcí příkazů a také pro zajištění toho, aby se daný řetězec objevil na výstupu. Znak "&" je a oddělovač příkazů shell, takže to, co se provede, jsou tři samostatné příkazy, jeden po druhém. Výsledkem je, že výstup vrácený uživateli bude:
Chyba -productID nenalezeno
tento_škodlivý_příkaz
38: příkaz nenalezeno
Zde soubor "stockstat.pl" provedl příkaz bez očekávaných argumentů, a proto vrátil chybovou zprávu. Poté se rozběhl příkaz echo vložený útočníkem a útočník viděl výraz, který zadal na obrazovce. Původní argument "38" byl spuštěn jako příkaz způsobující chybu.
Jak se chránit před injekcemi příkazů OS
Ačkoli je vkládání příkazů mocným a škodlivým vektorem útoku, existuje několik triků, jak se mu vyhnout. Důvodem útoků OS command injection je provádění určitých příkazů operačního systému pomocí aplikace. Musíte tomu zabránit. Je třeba zvážit několik problémů:
- Musíte zabránit komukoli s přístupem k aplikaci, aby mohl spouštět kód.
- Měli byste zabránit komukoli s přístupem k aplikaci v zasílání požadavků na server pomocí syntaktických výrazů.
- Musíte zašifrovat fráze, které požaduje kdokoli s přístupem.
Pojďme si projít každou položku jednu po druhé. Dobrým řešením prvního problému je použijte metodu whitelistu aby se zabránilo komukoli, kdo se dostane do aplikační vrstvy, spouštět určité kódy nebo požadavky. Kdokoli, koho neidentifikujete, nebude moci spustit kód.
Řešením druhého je neakceptovat některé textové výrazy používané v příkazech. Uživatel může zadávat pouze číselné hodnoty. Použijte to společně s metodou whitelistu a budete mít mnohem bezpečnější systém.
Třetí položka je o šifrování syntaktických parametrů, jako je zadaný znak a mezery. V důsledku toho by vás metoda whitelisting, syntaktická kontrola vstupů a šifrování vstupů měla chránit před vkládáním příkazů OS.
Injekční útoky se vyvíjejí každý den
Existuje mnoho metod vkládání s různými technikami útoku, jako je příkaz OS, SQL, SSI a XPath. Není snadné snažit se každému z nich zabránit. Mějte na paměti, že všechny tyto útoky se vyvíjejí každý den a využívají malých zranitelností, které vývojáři přehlédli. Proto je důležité, abyste byli vždy aktuální a pozorně sledovali aktuální vývoj ve světě kybernetické bezpečnosti.