
Programmierer erobern Sicherheit: Share & Learn-Serie — OS Command Injection
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.


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.
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior 您的Secure Code Warrior 帮助您在整个软件开发周期中保障代码安全,并建立将网络安全置于首位的企业文化。无论您是应用安全经理、开发人员、首席信息安全官,还是其他从事安全工作的人员,我们都能协助您的企业降低不安全代码带来的风险。
预约演示Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.


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.

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.
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.




%20(1).avif)
.avif)
