OS command injection (tunnetaan myös nimellä shell injection) on web security haavoittuvuus, jonka avulla hyökkääjä voi suorittaa mielivaltaisia käyttöjärjestelmän (OS) komentoja palvelimelle, joka ajaa sovellusta, ja tyypillisesti täysin vaarantaa sovelluksen ja kaikki sen tiedot.
miksi verkkosovellusten täytyy suorittaa Järjestelmäkäskyjä?
verkkosovellusten on joskus suoritettava käyttöjärjestelmän komentoja (OS-komentoja) kommunikoidakseen taustalla olevan isäntäkäyttöjärjestelmän ja tiedostojärjestelmän kanssa. Näin voidaan suorittaa järjestelmäkomentoja, käynnistää toisella ohjelmointikielellä kirjoitettuja sovelluksia tai suorittaa shell -, python -, perl-tai PHP-skriptejä. Mille tahansa käyttöjärjestelmälle, kuten Windowsille, Unixille ja Linuxille, on saatavilla toimintoja, jotka voivat suorittaa komentotulkkikomennona muille komentosarjoille siirretyn komennon. Vaikka tämä toiminto on erittäin hyödyllinen, se voi olla vaarallinen, kun sitä käytetään väärin, ja se voi johtaa verkkosovellusten tietoturvaongelmiin, kuten tässä artikkelissa selitetään.
miksi sinun pitäisi olla varovainen käyttäessäsi Järjestelmäkomentoja verkkosovelluksissa
hyödyntämällä komentojensiirtohaavoittuvuutta haavoittuvassa sovelluksessa, hyökkääjät voivat lisätä ylimääräisiä komentoja tai pistää omia käyttöjärjestelmäkomentojaan. Tämä tarkoittaa sitä, että komentojännityshyökkäyksen aikana hyökkääjä voi helposti ottaa web-palvelimen isäntäkäyttöjärjestelmän täysin hallintaansa. Siksi kehittäjien tulisi olla hyvin varovaisia, miten siirtää käyttäjän panos johonkin näistä toiminnoista web-sovelluksia kehitettäessä.
esimerkki komennon Injektiohaavoittuvuudesta
tässä esimerkissä komennon injektiohaavoittuvuudesta käytämme ping-toimintoa, joka on tunnetusti epävarma monissa reitittimissä. Kuvittele haavoittuva sovellus, jolla on yhteinen toiminto, joka siirtää IP-osoitteen käyttäjän syötöstä järjestelmän ping-komentoon. Siksi, jos käyttäjän syöte on 127.0.0.1, seuraava komento suoritetaan isäntäkäyttöjärjestelmässä:
ping -c 5 127.0.0.1
koska kyseessä on haavoittuva verkkosovellus, on mahdollista murtautua ulos ping-komennosta tai aiheuttaa virhe, joka palauttaa hyödyllistä tietoa hyökkääjälle. Hyökkääjä voi sitten käyttää tätä toimintoa suorittaakseen omia mielivaltaisia komentojaan. Esimerkki järjestelmän lisäkomentojen lisäämisestä voisi näyttää tältä:
ping -c 5 127.0.0.1; id
yllä olevassa esimerkissä suoritetaan ensin ping-komento ja heti sen jälkeen id-komennon suoritus. Siksi komennon ulostulo sivulla näyttää tältä:
OS-komennon ruiskutushyökkäyksen aikana hyökkääjä voi myös asettaa virhepohjaisen hyökkäyksen. Esimerkiksi koodiruiske tässä tapauksessa näyttää tyypillisesti alla olevalta:
ping -c 5 "$(id)"
yllä oleva koodiruiske palauttaa vastauksen näin:
ping: unknown host uid=0(root) gid=0(root) groups=0(root)
Miten estää System Command Injection-haavoittuvuudet
estääkseen hyökkääjää hyödyntämästä haavoittuvaa verkkosovellusta ja lisäämästä erikoismerkkejä käyttöjärjestelmän komentoon, kannattaa yrittää yleensä vältä järjestelmäkutsuja mahdollisuuksien mukaan. Vältä kaikissa tapauksissa käyttäjän syötteitä, ellei se ole ehdottoman välttämätöntä. Ja jos se on tarpeen, varmista, että syötteen validointi on paikallaan-syötteen validointi on aina välttämätöntä, jotta web-sovelluskoodisi ei ole altis muille suuren vaikutuksen haavoittuvuuksille, kuten XSS: lle ja SQL-injektiolle.
poista tämä toiminto myös kielesi asetustiedostosta, jos et tarvitse sitä, joten hyökkääjät eivät voi koskaan päästä käsiksi isäntäkäyttöjärjestelmän järjestelmäpäällykseen haavoittuvien verkkosovellusten kautta. Joissakin kielissä prosessin suorituksen voi erottaa syöttöparametreista. Voit myös rakentaa valkoisen listan mahdollisista syötöistä ja tarkistaa formaatit, esimerkiksi hyväksymällä vain kokonaisluvun numeeriselle id: lle.