Sårbarheder ved kommandoinjektion og den fare, de udgør

I dag vil vi diskutere sårbarheder ved kommandoinjektion i operativsystemer. Hvor stor en trussel er de? Hvordan kan du forhindre disse sårbarheder? Hvordan NexDAST hjælper med at afhjælpe dem? Vi besvarer alle disse spørgsmål i detaljer nedenfor!

Hvad er kommandoinjektioner i operativsystemet?

Du må ikke forveksle kommandoinjektion med kodeinjektion. En skadelig kode, der bliver injiceret i et programmeringssprog, er en kodeinjektionssårbarhed. OS command injections er en type nyttelast, som hackeren injicerer. Payload’en bliver derefter udført som en operativsystemkommando.

En hacker udfører en midlertidig operativsystemkommando på applikationernes server, hvilket medfører en risiko for, at applikationen og dataene bliver kompromitteret. Sårbarheder i forbindelse med injektion af operativsystemkommandoer bruges ofte som et springbræt af hackere. Dette er det værst tænkelige scenarie med OS command injections, da det starter med OS command injections og fører til udnyttelse af andre dele af hostinginfrastrukturen, hvilket resulterer i, at en lang række andre systemer bliver eksponeret.

Python, Ruby, Perl, Java, C, PHP. Alle disse programmeringssprog giver brugerne mulighed for at kalde en shell-kommando fra systemet. Det gør dem sårbare over for OS Command Injections. Den injicerede midlertidige kommandoudførelse afhænger dog af webserverens privilegier. Derfor er kommandoinjektionssårbarheder ikke så farlige i sig selv. Men en hacker kan udnytte privilegieeskalering og få adgang til flere oplysninger. Med disse oplysninger kan flere sårbarheder findes og udnyttes.

Eksempler på OS Command Injection-sårbarheder

Lad os sige, at du ønsker at købe et tastatur fra et websted. Applikationen skal først lade dig se, om det ønskede tastatur er på lager. Brugerne får disse oplysninger via URL’er som denne:

https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22

Applikationen beder legacy-systemer om at give brugeren lageroplysninger. Kaldet ud til en shell-kommando repræsenterer denne funktionalitet. Produkt- og butiks-id’er er argumenter, så shell-kommandoen ser nogenlunde sådan ud:

Keyboards.py 111 22

Brugerne kan nu se, om deres foretrukne tastatur er på lager. Alligevel er der et problem her. Applikationen er ikke sikret mod OS-kommandoinjektioner. Hackere kan nu indsende et input, som udfører en midlertidig kommando. Den ser noget i retning af “& echo randomstring &” i parameteren storeID. Programmet udfører derefter denne kommando:

Keyboards.py & echo randomstring & 22

Hvad gør denne kommando? Den får den angivne streng til at ekko i output. En effektiv måde at teste for typer af OS-kommandoinjektioner på. Shell-kommandoseparatoren ( & ) forvandler én kommando til tre. Brugerne ser derefter tre resultater:

Error - productID was not provided
Randomstring
22: command not found

Den oprindelige Keyboard.py-kommando blev udført, men de forventede argumenter manglede. Det er derfor, at vi fik en fejlmeddelelse. Den leverede streng (Randomstring) gav ekko i output. Det er målet med den injicerede ekko-kommando. Men, 22: command not found vises. Hvorfor? Fordi det oprindelige argument 22 blev udført som en kommando, hvilket forårsagede en fejl.

Nu skal vi dække blind OS command injection-sårbarheder. Dette sker, når et program ikke returnerer output fra en kommando i sit svar. På trods af dette har hackere stadig forskellige teknikker til at udnytte disse sårbarheder:

  • tidsforsinkelser
  • omdirigerer output

Hvis man bruger en injiceret kommando til at udløse en tidsforsinkelse, kan en hacker bekræfte, om kommandoen er blevet udført. Det er den tid, det tager et program at reagere, der fortæller, om kommandoen blev udført eller ej. En af de mest effektive kommandoer til udnyttelse af denne blinde sårbarhed er en ping-kommando. Denne kommando giver dig mulighed for at vælge et nøjagtigt antal ICMP-pakker, der skal sendes. Dette antal vil være den tid, der er nødvendig for at denne kommando kan køre.

Omdirigering af output er en anden OS command injection exploit. Du omdirigerer output af den injicerede kommando direkte til en fil. Denne fil findes i webroot, der hentes via din browser.

Forebyggelse af operativsystemkommandoinjektioner

Hvordan kan du forhindre OS Command Injections? Den enkleste og mest effektive måde er aldrig at bruge shell_exec eller lignende kald til værts-OS-kommandoer. Anvend i stedet de samme kommandoer i det programmeringssprog, som du bruger. Der opstår et problem, hvis dit programmeringssprog ikke har en tilsvarende kommando til den kommando, du har brug for. I disse tilfælde bør du bruge input sanitization. Det vil hjælpe, hvis du gør dette, før du tildeler værdien til shell-kommandoen. Brug af whitelist er altid den sikreste løsning, når det drejer sig om injektioner.

Andre muligheder for kraftfuld inputvalidering omfatter:

  • Validering af alfanumeriske tegn (Bekræft, at der kun indgår alfanumeriske tegn uden whitespace eller syntaks i input)
  • Talsvalidering (Bekræft, at input er et tal)
  • Hvidliste over tilladte værdier (Bekræft mod hvidlister over tilladte værdier)

Du bør aldrig undgå shell-metakendetegn og forsøge at sanitize input på den måde. Da det gør input sårbart for smarte hackere, som de nemt kan omgås.

Hvordan NexDAST kan hjælpe med at forhindre kommandoinjektioner i operativsystemet

Den enkleste og mest effektive måde at forhindre OS Command Injections på er at bruge NexDAST. Vores black-box sikkerhedstestløsning undersøger automatisk din applikation. Når der opdages en OS Command Injection, sendes retningslinjer for afhjælpning til udvikleren eller SecOps-teamet. Der er ikke behov for langvarig og træg manuel testning med NexDAST.

Eksempel på NexDAST, der identificerer en OS Command Injection:

vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd

Den %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd del er sårbarheden. NexDAST indeholder også retningslinjer for afhjælpning, der hjælper dig med at afhjælpe denne sårbarhed så effektivt som muligt.

Vil du vide mere om NexDAST? Vi har dækket det i dybden i en af vores blogs før, og hvis du har et problem, som NexDAST kan hjælpe dig med, kan du anmode om en demo her!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.