Command Injection

Command Injection

Copyright © Shutterstock/LeoWolfert

Was ist Command Injection?

Definition

Command Injection ist ein Angriff, bei dem das Ziel die Ausführung beliebiger Befehle auf dem Host-Betriebssystem über eine anfällige Anwendung ist. Command Injection Angriffe sind möglich, wenn eine Anwendung unsichere Daten (Formulare, Cookies, HTTP-Header usw.) an das zugrundeliegende Betriebssystem übergibt.

Bei diesem Angriff werden die vom Angreifer bereitgestellten Betriebssystembefehle normalerweise mit den Berechtigungen der verwundbaren Anwendung ausgeführt. Command Injection Angriffe sind weitgehend auf unzureichende Eingabevalidierung zurückzuführen.

Beschreibung

Die Software erstellt einen kompletten oder einen Teil eines Betriebssystembefehls unter Verwendung von extern beeinflussten Eingaben von einer vorgelagerten Komponente. Spezielle Elemente werden aber nicht oder fehlerhaft neutralisiert, welche den beabsichtigten Betriebssystembefehl modifizieren könnten, wenn dieser an eine nachgeordnete Komponente gesendet wird. Dadurch können Angreifer unerwartete, gefährliche Befehle direkt auf dem Betriebssystem ausführen.

Diese Schwachstelle kann zu einer Sicherheitsanfälligkeit in Umgebungen führen, in denen der Angreifer keinen direkten Zugriff auf das Betriebssystem hat, beispielsweise in Webanwendungen. Wenn die Schwäche in einem privilegierten Programm auftritt, kann der Angreifer alternativ Befehle angeben, auf die normalerweise nicht zugegriffen werden kann, oder alternative Befehle mit Berechtigungen aufrufen, die der Angreifer nicht hat.

Das Problem wird noch verschärft, wenn der gefährdete Prozess nicht dem Prinzip der geringsten Privilegien folgt, da die vom Angreifer gesteuerten Befehle möglicherweise mit speziellen Systemprivilegien ausgeführt werden, die den Schaden erhöhen.

Tipp

Überprüfen Sie die Sicherheit Ihrer Website mit unserem kostenlosen Security Crawler oder mit der OSG Performance Suite Free Version.

Lösung

Stellen Sie für alle Sicherheitsprüfungen, die auf der Clientseite durchgeführt werden, sicher, dass diese Prüfungen auf der Serverseite doppelt vorhanden sind. Angreifer können die clientseitigen Prüfungen umgehen, indem sie Werte ändern, nachdem die Prüfungen ausgeführt wurden, oder indem der Client so geändert wird, dass die clientseitigen Prüfungen vollständig entfernt werden. Diese geänderten Werte werden dann an den Server übermittelt.

  • Die Verwendung dynamisch generierter Abfragezeichenfolgen, Codes oder Befehle, die Steuerelement und Daten miteinander kombinieren, ist riskant. Manchmal kann dies jedoch unvermeidlich sein.
  • Zitieren Sie Argumente ordnungsgemäß und entfernen Sie alle Sonderzeichen innerhalb dieser Argumente. Der konservativste Ansatz besteht darin, alle Zeichen zu entgehen oder zu filtern, die keine extrem strenge Whitelist passieren (z. B. alles, was nicht alphanumerisch oder Leerzeichen ist). Seien Sie vorsichtig bei der Argumentation.
  • Wenn das auszuführende Programm die Angabe von Argumenten innerhalb einer Eingabedatei oder einer Standardeingabe zulässt, sollten Sie diesen Modus verwenden, um Argumente anstelle der Befehlszeile zu übergeben.

Wenn der Satz akzeptabler Objekte wie Dateinamen oder URLs begrenzt oder bekannt ist, erstellen Sie eine Zuordnung von einem Satz fester Eingabewerte (z.B. numerische IDs) zu den tatsächlichen Dateinamen oder URLs, und lehnen Sie alle anderen Eingaben ab.

  • Stellen Sie sicher, dass die Fehlermeldungen nur minimale Details enthalten, die für die beabsichtigte Zielgruppe nützlich sind, und für niemanden anderen. Die Nachrichten müssen das Gleichgewicht zwischen zu kryptisch und nicht kryptisch genug finden. Sie sollten nicht unbedingt die Methoden offenlegen, mit denen der Fehler ermittelt wurde.
  • Vermeiden Sie es, hochsensible Informationen wie Passwörter in irgendeiner Form aufzuzeichnen.
  • Vermeiden Sie inkonsistente Nachrichten, bei denen ein Angreifer versehentlich über den internen Status informiert wird, z.B. ob ein Benutzername gültig ist oder nicht.
  • Im Kontext der OS-Befehlseingabe können an den Benutzer zurückgegebene Fehlerinformationen Aufschluss darüber geben, ob ein OS-Befehl ausgeführt wird und möglicherweise welcher Befehl verwendet wird.

Führen Sie Ihren Code mit den niedrigsten Berechtigungen aus, die zum Ausführen der erforderlichen Aufgaben erforderlich sind. Erstellen Sie nach Möglichkeit isolierte Konten mit eingeschränkten Berechtigungen, die nur für eine einzelne Aufgabe verwendet werden. Auf diese Weise kann ein Angreifer bei einem erfolgreichen Angriff nicht sofort auf die übrige Software oder deren Umgebung zugreifen. Beispielsweise müssen Datenbankanwendungen, insbesondere im täglichen Betrieb, selten als Datenbankadministrator ausgeführt werden.

  • Wenn Sie PHP verwenden, konfigurieren Sie die Anwendung so, dass sie register_globals nicht verwendet. Entwickeln Sie die Anwendung während der Implementierung so, dass sie nicht auf diese Funktion angewiesen ist, sondern achten Sie auf die Implementierung einer register_globals-Emulation, die Schwächen und ähnlichen Problemen unterliegt.

Datenbanklink zur Schwachstelle

https://cwe.mitre.org/data/definitions/78.html 


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte