A mai napon az operációs rendszer parancsbeviteli sebezhetőségeit tárgyaljuk. Mekkora veszélyt jelentenek? Hogyan lehet megelőzni ezeket a sebezhetőségeket? Hogyan segít a NexDAST ezek orvoslásában? Az alábbiakban mindezekre a kérdésekre részletesen válaszolunk!
Mi az operációs rendszer parancsinjektálás?
Ne keverje össze a parancsinjektálást a kódinjektálással. A rosszindulatú kód bejuttatása egy programozási nyelvbe kódinjekciós sebezhetőség. Az operációs rendszer parancsinjekciók egyfajta hasznos teher, amelyet a hacker befecskendez. A hasznos teher ezután operációs rendszerparancsként kerül végrehajtásra.
A hacker ideiglenes operációs rendszerparancsot hajt végre az alkalmazások kiszolgálóján, ami az alkalmazás és az adatok veszélyeztetésének kockázatát eredményezi. Az operációs rendszerparancs injekciós sebezhetőségeket a hackerek gyakran használják ugródeszkaként. Ez a legrosszabb forgatókönyv az OS-parancsinjekciókkal kapcsolatban, mivel az OS-parancsinjekciókkal kezdődik, és a tárhely-infrastruktúra más részeinek kihasználásához vezet, ami egy egész sor más rendszer kiszolgáltatottságát eredményezi.
Python, Ruby, Perl, Java, C, PHP. Mindezek a programozási nyelvek lehetővé teszik a felhasználók számára a rendszer shell parancsának meghívását. Ez sebezhetővé teszi őket az OS Command Injections számára. Mégis, az injektált ideiglenes parancs végrehajtása a webszerver jogosultságaitól függ. Ezért a parancsinjekciós sebezhetőségek önmagukban nem olyan veszélyesek. Egy hacker azonban kihasználhatja a jogosultságok kiterjesztését, és több információhoz férhet hozzá. Ezekkel az információkkal több sebezhetőséget lehet találni és kihasználni.
Példák az OS Command Injection sebezhetőségekre
Tegyük fel, hogy billentyűzetet szeretne vásárolni egy weboldalról. Az alkalmazásnak először meg kell mutatnia, hogy a kívánt billentyűzet van-e raktáron. A felhasználók ezt az információt az ehhez hasonló URL-címeken keresztül kapják meg:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
Az alkalmazás a régebbi rendszerektől kéri a készletinformációkat. Egy héjparancs meghívása képviseli ezt a funkcionalitást. A termék- és üzletazonosítók az argumentumok, így a héjparancs valahogy így néz ki:
Keyboards.py 111 22
A felhasználók most láthatják, hogy a kívánt billentyűzet van-e raktáron. Mégis van itt egy probléma. Az alkalmazás nincs biztosítva az operációs rendszer parancsainak befecskendezése ellen. A hackerek most olyan bemenetet küldhetnek, amely egy ideiglenes parancsot hajt végre. Valahogy így néz ki: “& echo randomstring &” a storeID paraméterben. Az alkalmazás ezután végrehajtja ezt a parancsot:
Keyboards.py & echo randomstring & 22
Mit csinál ez a parancs? A megadott karakterláncot echóvá teszi a kimeneten. Hatékony módja az OS-parancsok befecskendezésének típusainak tesztelésére. A héjparancs elválasztó ( & ) egy parancsból három parancsot csinál. A felhasználók ekkor három eredményt látnak:
Error - productID was not provided
Randomstring
22: command not found
Az eredeti Keyboard.py parancs végrehajtódott, de a várt argumentumok hiányoztak. Ezért kaptunk hibaüzenetet. A megadott karakterlánc (Randomstring) visszhangzott a kimeneten. Ez a célja a beszúrt echo parancsnak. De a 22: nem talált parancsot mutatja. Miért? Mert a 22 eredeti argumentum parancsként hajtódott végre, hibát okozva.
Most nézzük a vak operációs rendszer parancsinjekciós sebezhetőségeit. Ez akkor fordul elő, amikor egy alkalmazás nem adja vissza a parancs kimenetét a válaszában. Ennek ellenére a hackerek különböző technikákat alkalmaznak e sebezhetőségek kihasználására:
- időkésleltetés
- kimenet átirányítása
Az injektált parancs időbeli késleltetéssel történő kiváltása lehetővé teszi a hacker számára, hogy meggyőződjön arról, hogy a parancs végrehajtásra került. Az az idő, amely alatt az alkalmazás válaszol, megmondja, hogy a parancs végrehajtásra került-e vagy sem. Az egyik leghatékonyabb parancs ennek a vak sebezhetőségnek a kihasználására a ping. Ez a parancs lehetővé teszi az elküldendő ICMP-csomagok pontos számának kiválasztását. Ez a szám lesz a parancs futtatásához szükséges idő.
A kimenet átirányítása egy másik OS parancsinjekciós kihasználás. A befecskendezett parancs kimenetét közvetlenül egy fájlba irányítja át. Ez a fájl a böngészőn keresztül lekérdezett webrootban található.
Az operációs rendszer parancsinjektálások megakadályozása
Hogyan lehet megakadályozni az operációs rendszer parancsinjektálásokat? A legegyszerűbb és leghatékonyabb módszer, ha soha nem használjuk a shell_exec vagy hasonló hívásokat a gazdabiztonsági operációs rendszer parancsaihoz. Ehelyett alkalmazza ugyanezeket a parancsokat az Ön által használt programozási nyelven. Probléma akkor merül fel, ha a programozási nyelve nem rendelkezik a szükségesnek megfelelő paranccsal. Ezekben az esetekben input szanálást kell használnia. Segít, ha ezt még azelőtt megteszi, mielőtt hozzárendeli az értéket a héjparancshoz. A fehérlista használata mindig a legbiztonságosabb megoldás, ha befecskendezésekről van szó.
A hatékony bemenet-érvényesítés további lehetőségei a következők:
- Alfanumerikus karakterek érvényesítése (Megerősíti, hogy csak alfanumerikus karakterek szerepelnek a bemenetben szóközök és szintaxis nélkül)
- Számok érvényesítése (Megerősíti, hogy a bemenet egy szám)
- Megengedett értékek fehérlistája (Megerősíti a megengedett értékek fehérlistájával szemben)
Soha nem szabad elkerülnie a shell metakaraktereit, és így próbálja szanálni a bemenetet. Mivel ez sebezhetővé teszi a bemenetet az okos hackerek számára, amit könnyen megkerülhetnek.
Hogyan segíthet a NexDAST az operációs rendszer parancsbefecskendezéseinek megelőzésében
A legegyszerűbb és leghatékonyabb módja az OS Command Injections megelőzésének a NexDAST használata. Fekete dobozos biztonsági tesztelési megoldásunk automatikusan megvizsgálja az alkalmazást. Ha OS Command Injectiont észlel, javítási irányelveket küld a fejlesztőnek vagy a SecOps-csapatnak. A NexDAST segítségével nincs szükség hosszadalmas és lassú kézi tesztelésre.
Példa a NexDAST OS Command Injection azonosítására:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
A %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
rész a sebezhetőség. A NexDAST olyan javítási irányelveket is biztosít, amelyek segítségével a lehető leghatékonyabban orvosolhatja ezt a sebezhetőséget.
Még többet szeretne megtudni a NexDAST-ról? Egyik blogunkban már korábban részletesen foglalkoztunk vele, és ha olyan problémája van, amin a NexDAST segíthet, kérjen bemutatót itt!