Tänään keskustelemme käyttöjärjestelmän komentojen sisäänsyöttöhaavoittuvuuksista. Kuinka suuri uhka ne ovat? Miten voit estää nämä haavoittuvuudet? Miten NexDAST auttaa niiden korjaamisessa? Vastaamme kaikkiin näihin kysymyksiin yksityiskohtaisesti alla!
Mitä ovat käyttöjärjestelmän komentoinjektiot?
Älä sekoita komentoinjektiota ja koodin injektiota keskenään. Haitallisen koodin joutuminen ohjelmointikieleen on koodi-injektiohaavoittuvuus. Käyttöjärjestelmän komentoinjektiot ovat eräänlainen hyötykuorma, jonka hakkeri injektoi. Hyötykuorma suoritetaan sitten käyttöjärjestelmän komentona.
Hakkeri suorittaa tilapäisen käyttöjärjestelmäkomennon sovellusten palvelimella, mikä johtaa sovelluksen ja tietojen vaarantumiseen. Hakkerit käyttävät usein käyttöjärjestelmäkomentojen injektiohaavoittuvuuksia ponnahduslautana. Tämä on pahin mahdollinen skenaario käyttöjärjestelmäkomentojen injektoinnissa, sillä se alkaa käyttöjärjestelmäkomentojen injektoinnista ja johtaa isännöinti-infrastruktuurin muiden osien hyväksikäyttöön, mikä johtaa koko joukon muiden järjestelmien paljastumiseen.
Python, Ruby, Perl, Java, C, PHP. Kaikki nämä ohjelmointikielet antavat käyttäjille mahdollisuuden kutsua järjestelmän komentotulkkikomentoa. Tämä tekee niistä haavoittuvia OS Command Injectionille. Injektoidun väliaikaisen komennon suoritus riippuu kuitenkin web-palvelimen oikeuksista. Tämän vuoksi komentoinjektiohaavoittuvuudet eivät ole yksinään kovin vaarallisia. Mutta hakkeri voi hyödyntää etuoikeuksien eskaloitumista ja päästä käsiksi lisätietoihin. Näiden tietojen avulla voidaan löytää lisää haavoittuvuuksia ja hyödyntää niitä.
Esimerkkejä käyttöjärjestelmän Command Injection -haavoittuvuuksista
Asetetaan, että haluat ostaa näppäimistön verkkosivustolta. Sovelluksen on ensin annettava sinun nähdä, onko haluamaasi näppäimistöä varastossa. Käyttäjät saavat nämä tiedot tämän kaltaisten URL-osoitteiden kautta:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
Sovellus pyytää vanhoja järjestelmiä antamaan käyttäjälle varastotiedot. Kutsuminen komentotulkkikomentoon edustaa tätä toiminnallisuutta. Tuote- ja myymälätunnukset ovat argumentteina, joten shell-komento näyttää jotakuinkin tältä:
Keyboards.py 111 22
Käyttäjä näkee nyt, onko hänen haluamaansa näppäimistöä varastossa. Tässä on kuitenkin ongelma. Sovellusta ei ole suojattu käyttöjärjestelmän komentojen injektioita vastaan. Hakkerit voivat nyt lähettää syötteen, joka suorittaa väliaikaisen komennon. Se näyttää jotakuinkin seuraavalta: ”& echo randomstring &” storeID-parametrissa. Tämän jälkeen sovellus suorittaa tämän komennon:
Keyboards.py & echo randomstring & 22
Mitä tämä komento tekee? Se saa syötetyn merkkijonon kaikumaan tulosteeseen. Tehokas tapa testata käyttöjärjestelmän komentojen injektiotyyppejä. Shellin komentojen erotin ( & ) muuttaa yhden komennon kolmeksi. Käyttäjät näkevät tällöin kolme tulosta:
Error - productID was not provided
Randomstring
22: command not found
Alkuperäinen Keyboard.py-komento suoritettiin, mutta odotetut argumentit puuttuivat. Siksi saimme virheilmoituksen. Toimitettu merkkijono (Randomstring) kaikui tulosteessa. Se on injektoidun echo-komennon tarkoitus. Mutta 22: komentoa ei löytynyt näkyy. Miksi? Koska alkuperäinen 22-argumentti suoritettiin komentona, mikä aiheutti virheen.
Käsittelemme nyt sokean käyttöjärjestelmän komentojen injektiohaavoittuvuuksia. Tämä tapahtuu, kun sovellus ei palauta komennon tulostetta vastauksessaan. Tästä huolimatta hakkereilla on edelleen erilaisia tekniikoita näiden haavoittuvuuksien hyödyntämiseen:
- aikaviiveet
- ulostulon ohjaaminen
Injektoidun komennon käyttäminen aikaviiveen laukaisemiseen antaa hakkerille mahdollisuuden varmistua siitä, onko komento suoritettu. Aika, joka kuluu sovelluksen vastaamiseen, kertoo, suoritettiinko komento vai ei. Yksi tehokkaimmista komennoista tämän sokean haavoittuvuuden hyödyntämiseen on ping. Tämän komennon avulla voit valita lähetettävien ICMP-pakettien tarkan määrän. Tämä määrä on aika, joka tarvitaan tämän komennon suorittamiseen.
Tulosteen uudelleenohjaaminen on toinen käyttöjärjestelmän komentojen injektiohyökkäys. Ohjaat injektoidun komennon tulosteen suoraan tiedostoon. Tämä tiedosto löytyy webrootista, joka haetaan selaimen kautta.
Käyttöjärjestelmän komentoinjektioiden estäminen
Miten voit estää käyttöjärjestelmän komentoinjektiot? Yksinkertaisin ja tehokkain tapa on, ettet koskaan käytä shell_exec- tai vastaavia kutsuja isäntäjärjestelmän komentoja varten. Käytä sen sijaan samoja komentoja käyttämässäsi ohjelmointikielessä. Ongelma ilmenee, jos ohjelmointikielelläsi ei ole vastaavaa komentoa kuin mitä tarvitset. Näissä tapauksissa kannattaa käyttää syötteen sanitointia. Siitä on apua, jos teet tämän ennen kuin annat arvon komentotulkin komennolle. Valkoisen listan käyttö on aina turvallisin vaihtoehto, kun on kyse injektioista.
Muita tehokkaan syötteen validoinnin vaihtoehtoja ovat mm. seuraavat:
- Alfanumeeristen merkkien validointi (Vahvista, että syötteessä on vain aakkosnumeerisia merkkejä ilman välilyöntejä tai syntaksia)
- Lukujen validointi (Vahvista, että syötteessä on numero)
- Sallittujen arvojen valkoluettelo (Vahvista sallittujen arvojen valkoluetteloita vasten)
Ei koskaan kannata vältellä komentosuorakytkimen metamerkkiä eikä yrittää puhdistaa syötettä sillä tavalla. Koska se tekee syötteestä haavoittuvan älykkäille hakkereille, jotka voivat ohittaa sen helposti.
Miten NexDAST voi auttaa ehkäisemään käyttöjärjestelmän komentoinjektioita
Yksinkertaisin ja tehokkain tapa ehkäistä käyttöjärjestelmän komentoinjektioita on käyttää NexDASTia. Mustan laatikon tietoturvatestausratkaisumme tutkii sovelluksesi automaattisesti. Kun OS Command Injection havaitaan, kehittäjälle tai SecOps-tiimille lähetetään korjausohjeet. NexDASTin avulla ei tarvita pitkää ja hidasta manuaalista testausta.
Esimerkki NexDASTin tunnistamasta OS Command Injectionista:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
-osa on haavoittuvuus. NexDAST tarjoaa myös korjausohjeet, joiden avulla voit korjata tämän haavoittuvuuden mahdollisimman tehokkaasti.
Haluatko lisätietoja NexDASTista? Olemme käsitelleet sitä perusteellisesti yhdessä blogissamme aiemmin, ja jos sinulla on ongelma, jossa NexDAST voi auttaa, pyydä esittelyä täältä!