I dag ska vi diskutera sårbarheter för kommandoinjektion i operativsystemet. Hur stort är hotet? Hur kan du förebygga dessa sårbarheter? Hur NexDAST hjälper till att åtgärda dem? Vi kommer att besvara alla dessa frågor i detalj nedan!
Vad är kommandoinjektioner i operativsystemet?
Förväxla inte kommandoinjektion med kodinjektion. En skadlig kod som injiceras i ett programmeringsspråk är en sårbarhet för kodinjektion. Injektion av operativsystemkommandon är en typ av nyttolast som hackaren injicerar. Nyttolasten körs sedan som ett operativsystemkommando.
En hackare utför ett tillfälligt operativsystemkommando på applikationernas server vilket resulterar i en risk för att applikationen och data äventyras. Sårbarheter för injektion av operativsystemkommandon används ofta som en språngbräda av hackare. Detta är det värsta scenariot med injektion av operativsystemkommandon, eftersom det börjar med injektion av operativsystemkommandon och leder till utnyttjande av andra delar av värdinfrastrukturen, vilket resulterar i att en hel mängd andra system blir utsatta.
Python, Ruby, Perl, Java, C, PHP. Alla dessa programmeringsspråk gör det möjligt för användare att anropa ett systemskalkommando. Detta gör dem sårbara för kommandoinjektioner från operativsystemet. Men det injicerade tillfälliga kommandot är beroende av webbserverns privilegier. Detta är anledningen till att sårbarheter i form av kommandoinjektion inte är så farliga i sig själva. Men en hackare kan utnyttja privilegieeskalering och få tillgång till mer information. Med den informationen kan fler sårbarheter hittas och utnyttjas.
Exempel på sårbarheter i form av kommandoinjektion i operativsystem
Säg att du vill köpa ett tangentbord från en webbplats. Programmet måste först låta dig se om det tangentbord du vill ha finns i lager. Användarna får denna information via webbadresser som denna:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
Programmet ber äldre system att förse användaren med lagerinformation. Denna funktionalitet representeras av ett skalkommando. Produkt- och butiks-ID är argument, så skalkommandot ser ut ungefär så här:
Keyboards.py 111 22
Användarna kan nu se om det tangentbord de föredrar finns i lager. Det finns dock ett problem här. Applikationen är inte säkrad mot injektioner av OS-kommandon. Hackare kan nu skicka in en inmatning som utför ett tillfälligt kommando. Det ser ut ungefär som ”& echo randomstring &” i parametern storeID. Programmet utför sedan det här kommandot:
Keyboards.py & echo randomstring & 22
Vad gör det här kommandot? Det får den medföljande strängen att eka i utmatningen. Ett effektivt sätt att testa typer av injektioner av OS-kommandon. Skalkommandoseparatorn ( & ) förvandlar ett kommando till tre. Användarna ser då tre resultat:
Error - productID was not provided
Randomstring
22: command not found
Det ursprungliga kommandot Keyboard.py utfördes, men de förväntade argumenten saknades. Det är därför vi fick ett felmeddelande. Den medföljande strängen (Randomstring) ekade i utmatningen. Det är målet med det injicerade kommandot echo. Men, 22: command not found visas. Varför? Eftersom det ursprungliga argumentet 22 utfördes som ett kommando, vilket orsakade ett fel.
Nu ska vi täcka sårbarheter för injektion av kommandon i blind OS. Detta inträffar när ett program inte returnerar resultatet från ett kommando i sitt svar. Trots detta har hackare fortfarande olika tekniker för att utnyttja dessa sårbarheter:
- tidsfördröjningar
- omdirigering av utdata
Användning av ett injicerat kommando för att utlösa en tidsfördröjning gör det möjligt för en hackare att bekräfta om kommandot utfördes. Den tid det tar för ett program att svara är det som talar om om kommandot utfördes eller inte. Ett av de mest effektiva kommandona för att utnyttja denna blinda sårbarhet är ping. Med detta kommando kan du välja ett exakt antal ICMP-paket att skicka. Detta antal kommer att vara den tid som krävs för att kommandot ska köras.
Att omdirigera utdata är en annan exploatering för injektion av OS-kommandon. Du omdirigerar utdata från det injicerade kommandot direkt till en fil. Den filen finns i webroot som hämtas via din webbläsare.
Preventing Operating System Command Injections
Hur kan du förhindra OS Command Injections? Det enklaste och mest effektiva sättet är att aldrig använda shell_exec eller liknande anrop för värdoperativsystemets kommandon. Använd istället samma kommandon i det programmeringsspråk som du använder. Ett problem uppstår om ditt programmeringsspråk inte har ett motsvarande kommando till det du behöver. I dessa fall bör du använda sanering av indata. Det hjälper om du gör detta innan du tilldelar värdet till skalkommandot. Användning av vitlista är alltid det säkraste alternativet när det gäller injektioner.
Andra alternativ för kraftfull inmatningsvalidering inkluderar:
- Validering av alfanumeriska tecken (Bekräfta att endast alfanumeriska tecken utan vitrymder eller syntax ingår i inmatningen)
- Numervalidering (Bekräfta att inmatningen är ett nummer)
- Vitlista över tillåtna värden (Bekräfta mot vitlistor över tillåtna värden)
Du bör aldrig undvika metatecken i skalkommandot och försöka renodla inmatningen på det sättet. Eftersom det gör inmatningen sårbar för smarta hackare, som de lätt kan kringgå.
Hur NexDAST kan hjälpa till att förhindra kommandoinjektioner i operativsystemet
Det enklaste och mest effektiva sättet att förhindra kommandoinjektioner i operativsystemet är att använda NexDAST. Vår black-box lösning för säkerhetstestning undersöker automatiskt din applikation. När en OS Command Injection upptäcks skickas riktlinjer för korrigering till utvecklaren eller SecOps-teamet. Med NexDAST finns inget behov av långvariga och tröga manuella tester.
Exempel på NexDAST som identifierar en OS Command Injection:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
Den %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
delen är sårbarheten. NexDAST tillhandahåller också riktlinjer för korrigering som hjälper dig att åtgärda sårbarheten så effektivt som möjligt.
Vill du veta mer om NexDAST? Vi har behandlat det på djupet i en av våra bloggar tidigare, och om du har ett problem som NexDAST kan hjälpa dig med kan du begära en demo här!