Injekčné útoky sú jedným z najbežnejších spôsobov, ako hackeri útočia na systémy, pretože im umožňujú jednoducho spúšťať mnoho príkazov a kódov. Injekcia príkazov OS je jedným z takýchto injekčných útokov, o ktorých si musíte byť vedomí. Toto využíva zraniteľnosť, ktorú by správcovia systémov, databáz a webových aplikácií mali brať veľmi vážne.
Čo je teda útok vstrekovaním príkazov OS?
Definícia OS Command Injection
Vkladanie príkazov OS umožňuje útočníkovi so zlým úmyslom spustiť ľubovoľný príkaz, ktorý chce, a to zneužitím zraniteľného operačného systému, programu, aplikácie, databázy alebo doplnku. Stáva sa to, keď aplikácie nedokážu správne overiť a vyčistiť parametre, ktoré používajú pri volaní funkcií shellu, ako napr systém() alebo exec() vykonávať systémové príkazy.
Na lepšie pochopenie detekcie a využívania vstrekovania príkazov OS je užitočné preskúmať tento problém v troch hlavných kategóriách.
1. Priamy príkaz vstrekovania
Zvážte to z pohľadu útočníka. Kybernetický útočník zistí, že aplikácia spúšťa špecifický systémový príkaz; zadávajú škodlivý príkaz ako súčasť očakávaných argumentov. Aplikácia potom vykoná pôvodný príkaz, po ktorom nasleduje škodlivý príkaz.
Útočník používa rôzne prístupy na nájdenie takejto zraniteľnosti. Najjednoduchší spôsob, ako proti tomu bojovať, je udržiavať operačný systém vždy aktuálny; môžete to urobiť v spolupráci s kompetentným IT tímom. Mali by ste sa vyhnúť všetkým aplikáciám a programom, ktoré by mohli spôsobiť zraniteľnosť systému, pretože útočník môže priamo vložiť kód a poškodenie je nepredvídateľné.
2. Nepriame vstrekovanie príkazov
V prípade nepriameho vstrekovania príkazov útočník priamo nevloží kód alebo príkaz do systému. Na tento účel používajú zraniteľnú aplikáciu alebo program v systéme. Zraniteľnosť vytvára most medzi útočníkom a operačným systémom. Útočník využíva túto komunikáciu a snaží sa spustiť na cieľ škodlivé kódy a príkazy.
Útočník vykoná sériu testov na identifikáciu tejto zraniteľnosti a zistí, že softvér používa údaje z externého zdroja, ako je súbor alebo premenná prostredia, na volanie systémového príkazu. Útočník potom upraví obsah externého zdroja, takže teraz obsahuje škodlivý príkaz. Toto sa potom vykoná spolu s pokynmi pôvodnej aplikácie.
Hlavným rozdielom medzi priamym a nepriamym vstrekovaním príkazov je, že útočník používa aplikáciu na komunikáciu s operačným systémom. Nie je však žiadny skutočný rozdiel medzi škodami, ktoré tieto dve formy injekcie môžu spôsobiť, takže je potrebné riešiť obe. Preto by ste sa mali uistiť, že programy vo vašej sieti sú spoľahlivé a potrebné. Nenechávajte si na svojom zariadení aplikácie, ktorým nedôverujete.
3. Blind Command Injection
Ďalším typom vstrekovania príkazov OS je vstrekovanie slepých príkazov. To znamená, že aplikácia nevracia žiadny výstup príkazu v odpovedi HTTP. Útočník používa rôzne techniky, ako je časové oneskorenie a smerovanie výstupu, aby zneužil túto zraniteľnosť.
Predstavte si, že hľadáte webovú stránku a hodnota "/?search=id" v adrese URL sa mení pri každom vyhľadávaní. Hodnota id tu môže byť používateľská stránka, adresa fotografie produktu alebo akákoľvek stránka na webe. Útočník môže získať rôzne výsledky zmenou hodnoty id. Je ťažké to urobiť ručne, ale existujú nástroje ako Burp Suite pre to. Neskôr útočník objaví na stránke zvláštnosť: môže sa vrátiť hodnota id, ktorá, aj keď nezobrazila žiadne výsledky, odozva webu bola 200, čo naznačuje, že je všetko v poriadku. V takom prípade by útočník mohol použiť slepú príkazovú injekciu.
Obzvlášť užitočná je technika, ako je časové oneskorenie. Keďže stránka, ktorá sa otvorí, bude prázdna, nedostanete žiadnu odpoveď, ale stále môžete zbierať informácie o tom, čo je uložené v databáze, na základe časových oneskorení, ktoré načítajú stránku len v prípade, že ide o určitý znak prítomný. Je to príliš časovo náročné na to, aby to bol manuálny proces, ale množstvo nástrojov dokáže automatizovať útok.
Príklad scenára útoku
Zopakujme si všetko vyššie na príklade. Predstavte si, že máte nákupnú aplikáciu, ktorá používateľovi umožňuje zistiť, či sú produkty na sklade. Na prístup ku všetkým týmto informáciám použite adresu URL, ako je tá nižšie:
example_unsafe_store.com/stockStatus? productID=245&storeID=
Predstavte si odovzdanie ID produktu a uloženia ako argumenty príkazu shellu, napríklad „stockstat.pl 245 38“, pretože aplikácia by musela vyhľadávať staré záznamy. Ak vývojár nepodnikne žiadne kroky proti vstrekovaniu príkazov, útočník môže poslať vstup na vykonanie požadovaného príkazu:
& ozvena tento_a_škodlivý_príkaz &
Ak sa táto položka dostane do parametra productID, príkaz vykonaný aplikáciou bude:
stockstat.pl & ozvena tento_a_škodlivý_príkaz & 38
Príkaz echo je užitočná metóda na detekciu vstrekovania príkazov, ako aj na zabezpečenie toho, aby sa daný reťazec objavil vo výstupe. Znak „&“ je a oddeľovač príkazov shell, takže to, čo sa vykoná, sú tri samostatné príkazy, jeden po druhom. Výsledkom je, že výstup vrátený používateľovi bude:
Chyba -productID sa nenašlo
tento_škodlivý_príkaz
38: príkaz nenájdené
Tu súbor "stockstat.pl" vykonal príkaz bez argumentov, ktoré očakával, a preto vrátil chybové hlásenie. Potom sa spustil príkaz echo, ktorý vložil útočník, a útočník videl výraz, ktorý zadal na obrazovke. Pôvodný argument "38" sa spustil ako príkaz spôsobujúci chybu.
Ako sa chrániť pred injekciami príkazov OS
Hoci je vstrekovanie príkazov mocným a škodlivým vektorom útoku, existuje niekoľko trikov, ako sa mu vyhnúť. Dôvodom útokov na vstrekovanie príkazov OS je vykonávanie určitých príkazov operačného systému pomocou aplikácie. Musíte tomu zabrániť. Je potrebné zvážiť niekoľko problémov:
- Musíte zabrániť komukoľvek s prístupom k aplikácii, aby mohol spúšťať kód.
- Mali by ste zabrániť komukoľvek s prístupom k aplikácii v odosielaní požiadaviek na server pomocou syntaktických výrazov.
- Musíte zašifrovať frázy, ktoré požaduje ktokoľvek s prístupom.
Poďme si prejsť každú položku jednu po druhej. Dobrým riešením prvého problému je použite metódu whitelistu aby sa zabránilo komukoľvek, kto dosiahne aplikačnú vrstvu, spustiť určité kódy alebo požiadavky. Ktokoľvek, koho neidentifikujete, nebude môcť spustiť kód.
Druhým riešením je neakceptovať niektoré textové výrazy používané v príkazoch. Užívateľ môže zadávať iba číselné hodnoty. Použite to spolu s metódou whitelistu a budete mať oveľa bezpečnejší systém.
Tretia položka sa týka šifrovania syntaktických parametrov, ako je zadaný znak a medzery. Výsledkom je, že metóda whitelistingu, syntaktická kontrola vstupov a šifrovanie vstupov by vás mali chrániť pred vstrekovaním príkazov OS.
Injekčné útoky sa vyvíjajú každý deň
Existuje mnoho metód vstrekovania s rôznymi technikami útoku, ako je príkaz OS, SQL, SSI a XPath. Nie je ľahké pokúsiť sa zabrániť každému z nich. Majte na pamäti, že všetky tieto útoky sa vyvíjajú každý deň a využívajú malé zraniteľnosti, ktoré vývojári prehliadali. Preto je dôležité, aby ste boli vždy informovaní a pozorne sledovali aktuálny vývoj vo svete kybernetickej bezpečnosti.