Heute werden wir Schwachstellen durch Befehlsinjektion in Betriebssystemen erörtern. Wie groß ist die Gefahr, die von ihnen ausgeht? Wie kann man diese Schwachstellen verhindern? Wie kann NexDAST helfen, sie zu beheben? All diese Fragen werden wir im Folgenden ausführlich beantworten!
Was sind Operating System Command Injections?
Verwechseln Sie Command Injection nicht mit Code Injection. Ein bösartiger Code, der in eine Programmiersprache injiziert wird, ist eine Code-Injection-Schwachstelle. OS-Befehlsinjektionen sind eine Art Nutzlast, die der Hacker einschleust. Die Nutzlast wird dann als Betriebssystembefehl ausgeführt.
Ein Hacker führt einen temporären Betriebssystembefehl auf dem Anwendungsserver aus, wodurch das Risiko besteht, dass die Anwendung und die Daten kompromittiert werden. Schwachstellen bei der Injektion von Betriebssystembefehlen werden von Hackern oft als Sprungbrett genutzt. Dies ist das Worst-Case-Szenario bei OS-Befehlsinjektionen, da es mit OS-Befehlsinjektionen beginnt und zur Ausnutzung anderer Teile der Hosting-Infrastruktur führt, was dazu führt, dass eine ganze Reihe anderer Systeme angreifbar wird.
Python, Ruby, Perl, Java, C, PHP. All diese Programmiersprachen ermöglichen es den Benutzern, einen System-Shell-Befehl aufzurufen. Das macht sie anfällig für OS Command Injections. Die Ausführung des injizierten temporären Befehls hängt jedoch von den Rechten des Web-Servers ab. Aus diesem Grund sind Schwachstellen durch Befehlsinjektionen für sich genommen nicht so gefährlich. Ein Hacker kann jedoch eine Privilegienerweiterung ausnutzen und auf mehr Informationen zugreifen. Mit diesen Informationen können weitere Schwachstellen gefunden und ausgenutzt werden.
Beispiele für Schwachstellen durch Befehlsinjektion in Betriebssystemen
Angenommen, Sie möchten eine Tastatur auf einer Website kaufen. Die Anwendung muss Ihnen zunächst mitteilen, ob die gewünschte Tastatur auf Lager ist. Benutzer erhalten diese Informationen über URLs wie diese:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
Die Anwendung bittet Legacy-Systeme, dem Benutzer Informationen über den Lagerbestand zu liefern. Der Aufruf eines Shell-Befehls stellt diese Funktionalität dar. Produkt- und Laden-IDs sind Argumente, so dass der Shell-Befehl etwa so aussieht:
Keyboards.py 111 22
Der Benutzer sieht nun, ob seine bevorzugte Tastatur vorrätig ist. Allerdings gibt es hier ein Problem. Die Anwendung ist nicht gegen OS-Befehlsinjektionen gesichert. Hacker können nun eine Eingabe übermitteln, die einen temporären Befehl ausführt. Er sieht etwa so aus: „& echo randomstring &“ im Parameter storeID. Die Anwendung führt dann diesen Befehl aus:
Keyboards.py & echo randomstring & 22
Was bewirkt dieser Befehl? Er bewirkt, dass die übergebene Zeichenfolge in der Ausgabe widerhallt. Ein effizienter Weg, um auf Arten von OS-Befehlsinjektionen zu testen. Der Shell-Befehlstrenner ( & ) verwandelt einen Befehl in drei. Der Benutzer sieht dann drei Ergebnisse:
Error - productID was not provided
Randomstring
22: command not found
Der ursprüngliche Befehl Keyboard.py wurde ausgeführt, aber die erwarteten Argumente fehlten. Deshalb kam eine Fehlermeldung. Die übergebene Zeichenkette (Randomstring) wurde in der Ausgabe wiedergegeben. Das ist das Ziel des eingefügten echo-Befehls. Aber es wird 22: command not found angezeigt. Und warum? Weil das ursprüngliche Argument 22 als Befehl ausgeführt wurde, was zu einem Fehler führte.
Nun wollen wir uns mit den Schwachstellen der blinden OS-Befehlsinjektion beschäftigen. Dies geschieht, wenn eine Anwendung die Ausgabe eines Befehls nicht in ihrer Antwort zurückgibt. Trotzdem haben Hacker verschiedene Techniken, um diese Schwachstellen auszunutzen:
- Zeitverzögerungen
- Umleitung der Ausgabe
Wenn ein injizierter Befehl eine Zeitverzögerung auslöst, kann ein Hacker feststellen, ob der Befehl ausgeführt wurde. Die Zeit, die eine Anwendung benötigt, um zu reagieren, gibt Aufschluss darüber, ob der Befehl ausgeführt wurde oder nicht. Einer der effektivsten Befehle zum Ausnutzen dieser blinden Sicherheitslücke ist ein Ping. Mit diesem Befehl können Sie die genaue Anzahl der zu sendenden ICMP-Pakete bestimmen. Diese Anzahl entspricht der Zeit, die für die Ausführung des Befehls benötigt wird.
Die Umleitung der Ausgabe ist ein weiterer Exploit für die OS-Befehlsinjektion. Sie leiten die Ausgabe des injizierten Befehls direkt in eine Datei um. Diese Datei befindet sich in der Webroot, die über Ihren Browser abgerufen wird.
Verhindern von Betriebssystem-Befehlsinjektionen
Wie können Sie Betriebssystem-Befehlsinjektionen verhindern? Der einfachste und effektivste Weg ist, niemals shell_exec oder ähnliche Aufrufe für Host-OS-Befehle zu verwenden. Wenden Sie stattdessen die gleichen Befehle in der Programmiersprache an, die Sie verwenden. Ein Problem tritt auf, wenn Ihre Programmiersprache keinen entsprechenden Befehl für den von Ihnen benötigten Befehl hat. In diesen Fällen sollten Sie die Eingabe bereinigen. Es ist hilfreich, wenn Sie dies tun, bevor Sie den Wert dem Shell-Befehl zuweisen. Die Verwendung einer Whitelist ist immer die sicherste Option, wenn es um Injektionen geht.
Andere Optionen einer leistungsfähigen Eingabeüberprüfung sind:
- Überprüfung alphanumerischer Zeichen (Bestätigen Sie, dass die Eingabe nur alphanumerische Zeichen ohne Leerzeichen oder Syntax enthält)
- Zahlenüberprüfung (Bestätigen Sie, dass die Eingabe eine Zahl ist)
- Whitelist zulässiger Werte (Bestätigen Sie anhand von Whitelists zulässiger Werte)
Sie sollten niemals Shell-Metacharaktere vermeiden und versuchen, die Eingabe auf diese Weise zu bereinigen. Denn das macht die Eingabe angreifbar für clevere Hacker, die sie leicht umgehen können.
Wie NexDAST helfen kann, Operating System Command Injections zu verhindern
Der einfachste und effektivste Weg, OS Command Injections zu verhindern, ist der Einsatz von NexDAST. Unsere Blackbox-Sicherheitstestlösung untersucht automatisch Ihre Anwendung. Wenn eine OS Command Injection entdeckt wird, werden dem Entwickler oder dem SecOps-Team Richtlinien zur Abhilfe übermittelt. Mit NexDAST ist kein langwieriges und träges manuelles Testen mehr nötig.
Beispiel für die Identifizierung einer OS Command Injection durch NexDAST:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
Der %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
Teil ist die Sicherheitslücke. NexDAST bietet auch Richtlinien zur Behebung, die Ihnen dabei helfen, diese Schwachstelle so effizient wie möglich zu beheben.
Wollen Sie mehr über NexDAST erfahren? Wir haben es bereits in einem unserer Blogs ausführlich behandelt. Wenn Sie ein Problem haben, bei dem NexDAST helfen kann, fordern Sie hier eine Demo an!