OS parancs injection (más néven shell injection) egy webes biztonsági rés, amely lehetővé teszi a támadó számára, hogy tetszőleges operációs rendszer (OS) parancsokat hajtson végre az alkalmazást futtató kiszolgálón, és általában teljesen veszélyeztesse az alkalmazást és az összes adatot.
- miért kell a webes alkalmazásoknak Rendszerparancsokat végrehajtaniuk?
- miért kell óvatosnak lenni a rendszerparancsok használatakor a webes alkalmazásokban?
- példa egy Parancsinjekciós sebezhetőségre
- hogyan lehet megakadályozni a rendszerparancsok Injection sebezhetőségét
- sebezhetőségi osztályozási és súlyossági táblázat
miért kell a webes alkalmazásoknak Rendszerparancsokat végrehajtaniuk?
a webalkalmazásoknak néha operációs rendszer parancsokat (OS parancsokat) kell végrehajtaniuk, hogy kommunikáljanak az alapul szolgáló host operációs rendszerrel és a fájlrendszerrel. Ez megtehető a rendszerparancsok futtatásához, egy másik programozási nyelven írt alkalmazások indításához, vagy shell, python, perl vagy PHP szkriptek futtatásához. Bármely operációs rendszer, beleértve a Windows, Unix és Linux, funkciók állnak rendelkezésre, hogy végre egy parancsot, amely átkerül a többi szkript, mint egy shell parancsot. Bár rendkívül hasznos, ez a funkció veszélyes lehet, ha helytelenül használják, és webalkalmazások biztonsági problémáihoz vezethet, amint azt ebben a cikkben kifejtettük.
miért kell óvatosnak lenni a rendszerparancsok használatakor a webes alkalmazásokban?
egy sérülékeny alkalmazás parancsinjekciós sebezhetőségének kihasználásával a támadók további parancsokat adhatnak hozzá, vagy beadhatják saját operációs rendszer parancsaikat. Ez azt jelenti, hogy egy parancsinjekciós támadás során a támadó könnyen átveheti a webszerver gazdagép operációs rendszerének teljes irányítását. Ezért a fejlesztőknek nagyon óvatosnak kell lenniük, hogyan kell átadni a felhasználói bevitelt az egyik ilyen funkcióba a webes alkalmazások fejlesztésekor.
példa egy Parancsinjekciós sebezhetőségre
a parancsinjekciós sebezhetőség ezen példájában a ping funkciót használjuk, amely sok útválasztón köztudottan nem biztonságos. Képzeljen el egy sebezhető alkalmazást, amelynek közös funkciója van, amely IP-címet továbbít a felhasználói bemenetről a rendszer ping parancsára. Ezért, ha a felhasználói bemenet 127.0.0.1, a következő parancs kerül végrehajtásra a gazdagép operációs rendszeren:
ping -c 5 127.0.0.1
mivel egy sebezhető webes alkalmazással van dolgunk, lehetséges, hogy kitörjön a ping parancsból, vagy hibát okozhat, amely hasznos információkat ad vissza a támadónak. A támadó ezután használhatja ezt a funkciót saját tetszőleges parancsainak végrehajtására. A további rendszerparancsok hozzáadásának példája így nézhet ki:
ping -c 5 127.0.0.1; id
a fenti példában először a ping parancsot hajtják végre, majd közvetlenül az id parancs végrehajtása után. Ezért a parancs kimenet az oldalon fog kinézni:
az operációs rendszer parancsinjekciós támadása során a támadó hibaalapú támadást is beállíthat. Például egy kódinjekció ebben az esetben általában az alábbiak szerint néz ki:
ping -c 5 "$(id)"
a fenti kódinjekció a következő választ adja vissza:
ping: unknown host uid=0(root) gid=0(root) groups=0(root)
hogyan lehet megakadályozni a rendszerparancsok Injection sebezhetőségét
annak érdekében, hogy a támadó ne használhasson ki egy sebezhető webes alkalmazást, és ne illesszen be speciális karaktereket az operációs rendszer parancsába, meg kell próbálnia általában kerülje a rendszerhívásokat, ahol lehetséges. Minden esetben kerülje a felhasználói bemenetet, kivéve, ha ez feltétlenül szükséges. És ha szükséges, győződjön meg arról, hogy megfelelő bemeneti érvényesítés van a helyén – a bemeneti érvényesítés mindig elengedhetetlen annak biztosításához, hogy a webes alkalmazás kódja ne legyen sebezhető más nagy hatású sebezhetőségekkel szemben, beleértve az XSS-t és az SQL-injekciót.
ezenkívül deaktiválja ezt a funkciót a nyelv konfigurációs fájljában, ha nincs rá szüksége, így a támadók soha nem tudnak hozzáférni a gazdagép operációs rendszerének rendszerhéjához sérülékeny webes alkalmazások révén. Egyes nyelveken elválaszthatja a folyamat végrehajtását a bemeneti paraméterektől. Összeállíthat egy fehér listát a lehetséges bemenetekről, és ellenőrizheti a formátumokat, például Csak egész számot fogadhat el numerikus azonosítóhoz.