Coders Conquer Security: Share & Learn Series - OS Command Injection

Veröffentlicht am 07. Feb. 2019
von Jaap Karan Singh
FALLSTUDIE

Coders Conquer Security: Share & Learn Series - OS Command Injection

Veröffentlicht am 07. Feb. 2019
von Jaap Karan Singh
Ressource anzeigen
Ressource anzeigen

Ein Angriff durch OS-Befehlsinjektion kann immer dann erfolgen, wenn eine Anwendung es Benutzern erlaubt, Eingaben in eine Shell zu machen, aber keine Maßnahmen ergreift, um zu überprüfen, ob die Eingabezeichenfolgen gültig sind. Auf diese Weise kann ein Angreifer Befehle direkt in das Betriebssystem einspeisen, das die Anwendung hostet, und zwar auf allen Berechtigungsstufen, die für die kompromittierte Anwendung festgelegt sind.  

OS-Befehlsinjektionsangriffe können von Einsteigern und weniger erfahrenen Hackern durchgeführt werden, was sie zu einer der häufigsten Schwachstellen macht, die Sicherheitsteams erfahren. Glücklicherweise gibt es einige sehr effektive Möglichkeiten, um sie zu verhindern. In dieser Folge lernen wir es:

       Wie sie funktionieren

       Warum sie so gefährlich sind

       Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.

Wie verwenden Angreifer OS Command Injection?

Das erste, was ein Angreifer tun muss, um einen OS-Befehlsinjektionsangriff zu initiieren, ist das Auffinden von Benutzereingaben innerhalb einer Anwendung. Formulare, die Benutzer ausfüllen, sind potenziell gute Absprungpunkte. Die cleversten Angreifer können auch Dinge wie Cookies oder sogar HTTP-Header als Startpunkt verwenden, etwas, das von fast jeder Anwendung oder Website verwendet wird.

Als zweites müssen sie herausfinden, auf welchem Betriebssystem die Anwendung läuft. Da es nur eine Handvoll Auswahlmöglichkeiten gibt, kann Versuch und Irrtum in dieser Phase gut funktionieren. Die meisten Anwendungsserver werden entweder Windows-basiert sein (die Windows-Variante spielt normalerweise keine Rolle), eine Art Linux-Box oder möglicherweise Unix.

An diesem Punkt modifiziert der Hacker die Eingabe, um einen Betriebssystembefehl in eine scheinbar harmlose Eingabe zu injizieren. Dadurch kann das Host-Betriebssystem dazu gebracht werden, unbeabsichtigte Befehle auf der jeweiligen Berechtigungsebene der Anwendung auszuführen.

Der folgende Befehl kann z. B. von gültigen Benutzern innerhalb einer Anwendung verwendet werden, um den Inhalt einer Datei zu sehen, in diesem Fall die Notizen einer monatlichen Vorstandssitzung.

exec("cat " + Dateiname)

In unserem Beispiel würde dies den folgenden Befehl ausführen und die Besprechungsnotizen an den Benutzer zurückgeben.

$ ./cat MeetingNotes.txt
Bei der Juli-Sitzung waren drei Mitglieder des Vorstands anwesend. Das neue Budgetprojekt wurde diskutiert, aber es wurden keine Aktionen oder Abstimmungen durchgeführt.

Das passiert, wenn ein Angreifer zusätzliche Befehle am Ende der Eingabe hinzufügt, wie z. B. den, der zum Auflisten des Inhalts eines Verzeichnisses in Linux verwendet wird. In diesem Fall wird der ursprüngliche Befehl, die Anzeige der Besprechungsnotizen, immer noch ausgeführt. Aber dem böswilligen Benutzer wird auch angezeigt, was sich sonst noch in dem Verzeichnis befindet und welche anderen Befehle er bei nachfolgenden OS-Befehlsinjektionsangriffen verwenden kann. Sie geben ein:

$ ./cat MeetingNotes.txt && ls

Und holen Sie sich stattdessen das hier:

Bei der Juli-Sitzung waren drei Mitglieder des Vorstands anwesend. Das neue Budgetprojekt wurde diskutiert, aber es wurden keine Aktionen oder Abstimmungen durchgeführt.

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

Wie Sie sehen können, wurde dem Hacker in diesem Fall nicht nur der Inhalt des Verzeichnisses gezeigt, sondern auch ein Menü mit anderen Befehlen, die er verwenden konnte " Befehle, von denen er jetzt weiß, dass er sie auf dem Host-Betriebssystem ausführen kann.

Warum sind OS Command Injection Attacken so gefährlich?

Es ist äußerst riskant, Benutzern zu erlauben, den Zweck der anvisierten Anwendung zu umgehen und sie zur Ausführung von Betriebssystembefehlen zu verwenden. Ein Angreifer kann leicht verheerende Aktionen durchführen, wie z. B. das Stehlen vertraulicher Daten oder das Formatieren eines ganzen Serverlaufwerks. Die Möglichkeiten, die einem Angreifer zur Verfügung stehen, sind nur durch die erlaubten Befehle innerhalb des Betriebssystems und seine Kreativität bei der Verwendung derselben begrenzt.

Betriebssystembefehle werden auf der gleichen Berechtigungsebene wie die Anwendung ausgeführt. Apps, die mit administrativen Rechten laufen, bedeuten, dass Hacker, die sie kompromittieren, jeden Betriebssystembefehl ausführen können.

Die Angriffsmuster für OS Command Injection sind gut bekannt und dokumentiert. Eine anfällige Anwendung ist für Script-Kiddies genauso anfällig wie für professionelle Hacker. Angreifer mit sehr geringen Kenntnissen können versuchen, Betriebssystembefehle per Cut-and-Paste in Anwendungen einzufügen, um zu sehen, was passiert.

Ein Sicherheits-OK gegen OS-Befehlsinjektionen erhalten

Es gibt mehrere gute Techniken, die OS-Befehlsinjektionen stoppen können. Der erste Schritt besteht darin, Anwendungen mit den geringsten Rechten auszuführen, die für die Ausführung ihrer Funktion erforderlich sind. Dadurch wird ein Angriff zwar nicht verhindert, aber wenn es doch zu einer Verletzung kommt, wird der Schaden minimiert.

Die meisten Programmiersprachen und Frameworks bieten API-Aufrufe für gängige Betriebssystemmethoden wie das Auflisten von Verzeichnisinhalten, das Erstellen oder Lesen von Dateien auf der Festplatte. Eine perfekte Möglichkeit, OS-Befehlsinjektionen aus Ihrer Umgebung zu eliminieren, besteht darin, dass alle Anwendungen diese API-Aufrufe anstelle von OS-Befehlen direkt verwenden.

Wenn dies nicht möglich ist, validieren Sie Benutzereingaben, bevor Sie sie in Betriebssystembefehlen verwenden. Whitelists können verwendet werden, um sicherzustellen, dass nur ein kleiner Satz vertrauenswürdiger Werte verwendet werden kann. Es ist technisch möglich, dies auch mit einer Blacklist zu tun, aber es gibt wahrscheinlich viel weniger erlaubte Befehle, so dass eine Whitelist fast immer einfacher ist. Vergessen Sie nicht, gültige POST- und GET-Parameter in Ihre Whitelist aufzunehmen, ebenso wie oft übersehene Benutzereingabevektoren wie Cookies.

Wenn keine Programmier-API verfügbar ist und keine Whitelist verwendet werden kann, verwenden Sie eine Sanitization Library, um Sonderzeichen in Benutzereingaben zu entschlüsseln, bevor sie in Betriebssystembefehlen verwendet werden.

Weitere Informationen über OS Command Injection Attacken

Als weitere Lektüre können Sie einen Blick auf die OWASP-Schreibweise zu OS Command Injection-Angriffen werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Abwehr dieser Schwachstelle und einer Reihe anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .

Ressource anzeigen
Ressource anzeigen

Autor

Jaap Karan Singh

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

Coders Conquer Security: Share & Learn Series - OS Command Injection

Veröffentlicht am 07. Feb. 2019
Von Jaap Karan Singh

Ein Angriff durch OS-Befehlsinjektion kann immer dann erfolgen, wenn eine Anwendung es Benutzern erlaubt, Eingaben in eine Shell zu machen, aber keine Maßnahmen ergreift, um zu überprüfen, ob die Eingabezeichenfolgen gültig sind. Auf diese Weise kann ein Angreifer Befehle direkt in das Betriebssystem einspeisen, das die Anwendung hostet, und zwar auf allen Berechtigungsstufen, die für die kompromittierte Anwendung festgelegt sind.  

OS-Befehlsinjektionsangriffe können von Einsteigern und weniger erfahrenen Hackern durchgeführt werden, was sie zu einer der häufigsten Schwachstellen macht, die Sicherheitsteams erfahren. Glücklicherweise gibt es einige sehr effektive Möglichkeiten, um sie zu verhindern. In dieser Folge lernen wir es:

       Wie sie funktionieren

       Warum sie so gefährlich sind

       Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.

Wie verwenden Angreifer OS Command Injection?

Das erste, was ein Angreifer tun muss, um einen OS-Befehlsinjektionsangriff zu initiieren, ist das Auffinden von Benutzereingaben innerhalb einer Anwendung. Formulare, die Benutzer ausfüllen, sind potenziell gute Absprungpunkte. Die cleversten Angreifer können auch Dinge wie Cookies oder sogar HTTP-Header als Startpunkt verwenden, etwas, das von fast jeder Anwendung oder Website verwendet wird.

Als zweites müssen sie herausfinden, auf welchem Betriebssystem die Anwendung läuft. Da es nur eine Handvoll Auswahlmöglichkeiten gibt, kann Versuch und Irrtum in dieser Phase gut funktionieren. Die meisten Anwendungsserver werden entweder Windows-basiert sein (die Windows-Variante spielt normalerweise keine Rolle), eine Art Linux-Box oder möglicherweise Unix.

An diesem Punkt modifiziert der Hacker die Eingabe, um einen Betriebssystembefehl in eine scheinbar harmlose Eingabe zu injizieren. Dadurch kann das Host-Betriebssystem dazu gebracht werden, unbeabsichtigte Befehle auf der jeweiligen Berechtigungsebene der Anwendung auszuführen.

Der folgende Befehl kann z. B. von gültigen Benutzern innerhalb einer Anwendung verwendet werden, um den Inhalt einer Datei zu sehen, in diesem Fall die Notizen einer monatlichen Vorstandssitzung.

exec("cat " + Dateiname)

In unserem Beispiel würde dies den folgenden Befehl ausführen und die Besprechungsnotizen an den Benutzer zurückgeben.

$ ./cat MeetingNotes.txt
Bei der Juli-Sitzung waren drei Mitglieder des Vorstands anwesend. Das neue Budgetprojekt wurde diskutiert, aber es wurden keine Aktionen oder Abstimmungen durchgeführt.

Das passiert, wenn ein Angreifer zusätzliche Befehle am Ende der Eingabe hinzufügt, wie z. B. den, der zum Auflisten des Inhalts eines Verzeichnisses in Linux verwendet wird. In diesem Fall wird der ursprüngliche Befehl, die Anzeige der Besprechungsnotizen, immer noch ausgeführt. Aber dem böswilligen Benutzer wird auch angezeigt, was sich sonst noch in dem Verzeichnis befindet und welche anderen Befehle er bei nachfolgenden OS-Befehlsinjektionsangriffen verwenden kann. Sie geben ein:

$ ./cat MeetingNotes.txt && ls

Und holen Sie sich stattdessen das hier:

Bei der Juli-Sitzung waren drei Mitglieder des Vorstands anwesend. Das neue Budgetprojekt wurde diskutiert, aber es wurden keine Aktionen oder Abstimmungen durchgeführt.

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

Wie Sie sehen können, wurde dem Hacker in diesem Fall nicht nur der Inhalt des Verzeichnisses gezeigt, sondern auch ein Menü mit anderen Befehlen, die er verwenden konnte " Befehle, von denen er jetzt weiß, dass er sie auf dem Host-Betriebssystem ausführen kann.

Warum sind OS Command Injection Attacken so gefährlich?

Es ist äußerst riskant, Benutzern zu erlauben, den Zweck der anvisierten Anwendung zu umgehen und sie zur Ausführung von Betriebssystembefehlen zu verwenden. Ein Angreifer kann leicht verheerende Aktionen durchführen, wie z. B. das Stehlen vertraulicher Daten oder das Formatieren eines ganzen Serverlaufwerks. Die Möglichkeiten, die einem Angreifer zur Verfügung stehen, sind nur durch die erlaubten Befehle innerhalb des Betriebssystems und seine Kreativität bei der Verwendung derselben begrenzt.

Betriebssystembefehle werden auf der gleichen Berechtigungsebene wie die Anwendung ausgeführt. Apps, die mit administrativen Rechten laufen, bedeuten, dass Hacker, die sie kompromittieren, jeden Betriebssystembefehl ausführen können.

Die Angriffsmuster für OS Command Injection sind gut bekannt und dokumentiert. Eine anfällige Anwendung ist für Script-Kiddies genauso anfällig wie für professionelle Hacker. Angreifer mit sehr geringen Kenntnissen können versuchen, Betriebssystembefehle per Cut-and-Paste in Anwendungen einzufügen, um zu sehen, was passiert.

Ein Sicherheits-OK gegen OS-Befehlsinjektionen erhalten

Es gibt mehrere gute Techniken, die OS-Befehlsinjektionen stoppen können. Der erste Schritt besteht darin, Anwendungen mit den geringsten Rechten auszuführen, die für die Ausführung ihrer Funktion erforderlich sind. Dadurch wird ein Angriff zwar nicht verhindert, aber wenn es doch zu einer Verletzung kommt, wird der Schaden minimiert.

Die meisten Programmiersprachen und Frameworks bieten API-Aufrufe für gängige Betriebssystemmethoden wie das Auflisten von Verzeichnisinhalten, das Erstellen oder Lesen von Dateien auf der Festplatte. Eine perfekte Möglichkeit, OS-Befehlsinjektionen aus Ihrer Umgebung zu eliminieren, besteht darin, dass alle Anwendungen diese API-Aufrufe anstelle von OS-Befehlen direkt verwenden.

Wenn dies nicht möglich ist, validieren Sie Benutzereingaben, bevor Sie sie in Betriebssystembefehlen verwenden. Whitelists können verwendet werden, um sicherzustellen, dass nur ein kleiner Satz vertrauenswürdiger Werte verwendet werden kann. Es ist technisch möglich, dies auch mit einer Blacklist zu tun, aber es gibt wahrscheinlich viel weniger erlaubte Befehle, so dass eine Whitelist fast immer einfacher ist. Vergessen Sie nicht, gültige POST- und GET-Parameter in Ihre Whitelist aufzunehmen, ebenso wie oft übersehene Benutzereingabevektoren wie Cookies.

Wenn keine Programmier-API verfügbar ist und keine Whitelist verwendet werden kann, verwenden Sie eine Sanitization Library, um Sonderzeichen in Benutzereingaben zu entschlüsseln, bevor sie in Betriebssystembefehlen verwendet werden.

Weitere Informationen über OS Command Injection Attacken

Als weitere Lektüre können Sie einen Blick auf die OWASP-Schreibweise zu OS Command Injection-Angriffen werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Abwehr dieser Schwachstelle und einer Reihe anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.