Blog

Programmierer erobern Sicherheit: Share & Learn-Serie — OS Command Injection

February 7, 2019
Jaap Karan Singh

Ein Betriebssystem-Command-Injection-Angriff kann immer dann erfolgen, wenn eine Anwendung Benutzern erlaubt, Eingaben in eine Shell vorzunehmen, 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 übertragen, das die Anwendung hostet, und zwar mit den für die gefährdeten Anwendungen festgelegten Berechtigungsstufen.

OS-Command-Injection-Angriffe können von Anfängern und weniger erfahrenen Hackern ausgeführt werden, was sie zu einer der häufigsten Schwachstellen von Sicherheitsteams macht. Zum Glück gibt es einige sehr effektive Möglichkeiten, um zu verhindern, dass sie erfolgreich sind. In dieser Episode werden wir lernen:

So funktionieren sie

Warum sie so gefährlich sind

Wie Sie Abwehrmechanismen einrichten können, um sie zu stoppen.

Wie verwenden Angreifer OS Command Injection?

Das erste, was ein Angreifer tun muss, um einen Betriebssystem-Command-Injection-Angriff zu starten, ist, Benutzereingaben innerhalb einer Anwendung zu lokalisieren. Formulare, die Benutzer ausfüllen, sind potenziell gute Ausgangspunkte. Die cleversten Angreifer können auch Dinge wie Cookies oder sogar HTTP-Header als Ausgangspunkt verwenden, was von fast jeder Anwendung oder Website verwendet wird.

Das zweite, was sie tun müssen, ist herauszufinden, welches Betriebssystem die Anwendung hostet. Angesichts der Tatsache, dass es nur eine Handvoll Auswahlmöglichkeiten gibt, können Versuch und Irrtum in dieser Phase gut funktionieren. Die meisten Anwendungsserver werden entweder Windows-basiert sein (die Art von Windows spielt normalerweise keine Rolle), irgendeine Art von Linux-Box oder möglicherweise Unix.

An diesem Punkt ändert der Hacker die Eingabe, um einen Betriebssystembefehl in eine scheinbar harmlose Eingabe einzufügen. Dies kann das Hosting-Betriebssystem dazu verleiten, unbeabsichtigte Befehle auf jeder Berechtigungsstufe der Anwendung auszuführen.

Beispielsweise kann der folgende Befehl von gültigen Benutzern innerhalb einer Anwendung verwendet werden, um den Inhalt einer Datei anzuzeigen, 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 Exekutivausschusses anwesend. Das neue Haushaltsprojekt wurde erörtert, es wurden jedoch keine Maßnahmen ergriffen oder Abstimmungen getroffen.

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

$. /cat MeetingNotes.txt && ls

Und hol dir stattdessen das:

Bei der Juli-Sitzung waren drei Mitglieder des Exekutivausschusses anwesend. Das neue Haushaltsprojekt wurde erörtert, es wurden jedoch keine Maßnahmen ergriffen oder Abstimmungen getroffen.

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
formatieren.c
falsch. C
kein Fehler. C
trunk.c
schreib was woher.c

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

Warum sind OS Command Injection-Angriffe so gefährlich?

Es ist äußerst riskant, Benutzern zu erlauben, den Zweck der Zielanwendung zu umgehen und sie zum Ausführen von Betriebssystembefehlen zu verwenden. Ein Angreifer kann leicht verheerende Aktionen ausführen, wie zum Beispiel vertrauliche Daten stehlen oder ein ganzes Serverlaufwerk formatieren. Die Optionen, die einem Angreifer zur Verfügung stehen, werden nur durch die zulässigen Befehle innerhalb des Betriebssystems und durch seine Kreativität bei der Verwendung dieser Befehle eingeschränkt.

Betriebssystembefehle werden auf derselben Berechtigungsstufe wie die Anwendung ausgeführt. Apps, die mit Administratorrechten ausgeführt werden, bedeuten, dass Hacker, die sie kompromittieren, jeden Betriebssystembefehl ausführen können.

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

Ein Sicherheits-OK gegen Betriebssystem-Befehlsinjektionen erhalten

Es gibt mehrere gute Techniken, mit denen Betriebssystembefehle verhindert werden 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 nicht verhindert, sollte es dennoch zu einer Sicherheitsverletzung kommen, 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 Methode, um Betriebssystembefehle aus Ihrer Umgebung zu eliminieren, besteht darin, dass alle Anwendungen diese API-Aufrufe anstelle der Betriebssystembefehle direkt verwenden.

Wenn dies nicht möglich ist, überprüfen 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 zulässige Befehle, sodass das Whitelisting fast immer einfacher ist. Vergessen Sie nicht, gültige POST- und GET-Parameter sowie häufig übersehene Benutzereingabevektoren wie Cookies in Ihre Whitelist aufzunehmen.

Wenn keine Programmier-API verfügbar ist und eine Whitelist nicht verwendet werden kann, verwenden Sie schließlich eine Sanitisierungsbibliothek, um alle Sonderzeichen in Benutzereingaben zu maskieren, bevor Sie sie in Betriebssystembefehlen verwenden.

Weitere Informationen zu OS Command Injection-Angriffen

Für weitere Informationen können Sie sich die OWASP ansehen schreiben Sie auf Angriffe mit Betriebssystem-Befehlsinjektion. Sie können Ihr neu gewonnenes Defensivwissen auch mit dem auf die Probe stellen kostenlose Demo der Secure Code Warrior-Plattform, die Cybersicherheitsteams zu ultimativen Cyberkriegern ausbildet. Um mehr über die Beseitigung dieser Sicherheitslücke und eine Galerie mit anderen Bedrohungen zu erfahren, besuchen Sie die Sicherer Code Warrior-Blog.

Slogan

Govern AI-driven development before it ships

Measure AI-assisted risk, enforce secure coding policy at commit, and accelerate secure delivery across your SDLC.

book a demo
Slogan

Explore more blogs

Lorem ipsum diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis.

browse all
Case Study
Filter Label
This is some text inside of a div block.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Learn More
Case Study
Filter Label
This is some text inside of a div block.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

Learn More
Case Study
Filter Label
This is some text inside of a div block.

One Culture of Security: How Sage built their security champions program with agile secure code learning

Discover how Sage enhanced security with a flexible, relationship-focused approach, creating 200+ security champions and achieving measurable risk reduction.

Learn More
Blog
Filter Label
This is some text inside of a div block.

Enabler 7: Developer Recognition

Recognition fuels participation. Enabler 7 celebrates developer achievement loudly, with rewards and exclusive swag that mark real, earned secure coding wins.

Learn More
Blog
Filter Label
This is some text inside of a div block.

Named in the Gartner® Hype Cycle™ for Application Security 2026

Secure Code Warrior is named in the Gartner® Hype Cycle™ for Application Security, 2026 for Agentic Coding Security and Secure Coding Training. Here's why.

Learn More
Blog
Filter Label
This is some text inside of a div block.

Are you a CISO or Engineering Leader worried about the Security and Cost of LLM code generation?

Review the SCW AI Trust Index, our proprietary LLM benchmarking data, before going all-in on an AI model.

Learn More

Secure AI-driven development before it ships

See developer risk, enforce policy, and prevent vulnerabilities across your software development lifecycle.

Demo buchen
No items found.