[JAVA] Lassen Sie uns die Sicherheitsanfälligkeit (1) OS Command Injection (OGNL Type Injection) angreifen.

Einführung

** Der beste Weg, eine Sicherheitsanfälligkeit zu verstehen, besteht darin, sie tatsächlich anzugreifen. ** ** **

Lassen Sie uns jedoch eine potenziell gefährdete Site finden und angreifen! Das sage ich nicht. Es ist eine gute Idee, eine anfällige Anwendung auf einer virtuellen Maschine auszuführen, die Sie nur verwenden, und zu versuchen, sie anzugreifen.

In der zuvor eingeführten Webanwendung voller Fehler wurden viele Sicherheitslücken implementiert. Laden Sie die Webanwendung von [hier] herunter (https://github.com/k-tamura/easybuggy/releases) und starten Sie sie mit dem folgenden Befehl.

java -jar easybuggy.jar

Diese Webanwendung implementiert derzeit die folgenden Sicherheitsanfälligkeiten:

--XSS (Cross Site Scripting) --SQL-Injektion

Dieses Mal möchte ich ** "OS Command Injection" ** (genauer "OGNL Type Injection") aus diesen heraus angreifen und dem Server fatalen Schaden zufügen: smiley:

Was ist OS-Befehlsinjektion?

OS-Befehlsinjektion bezieht sich auf einen Angriff, der den OS-Befehl eines Servers über eine Webanwendung oder dergleichen ausführt.

oscmdinjct.png

Angenommen, eine Webanwendung übergibt bestimmte nicht überprüfte Anforderungsparameter als Argumente an einen Betriebssystembefehl und führt sie aus. Dies ist möglicherweise kein Problem, da normale Benutzer es nur normal verwenden, böswillige Benutzer jedoch eine Zeichenfolge wie "rm -fr /" mit einem Trennzeichen wie "; " (Semikolon) verwenden. Sie können die hinzugefügten Parameter senden und alle Dateien auf dem Server löschen.

Lass uns angreifen

Lassen Sie uns nun die Sicherheitsanfälligkeit bezüglich der OS-Befehlsinjektion angreifen.

Laden Sie die Webanwendung von hier herunter und starten Sie sie mit java -jar easybuggy.jar. Dieses Mal bin ich bei CentOS 6 angemeldet, wobei SELinux als Root-Benutzer deaktiviert ist, der die Berechtigung zum Ausführen von Befehlen hat.

* Dieser Artikel verwendet Version 1.3.2. Das Verhalten kann sich in zukünftigen Versionen ändern.

Greifen Sie nach dem Start auf [http: // localhost: 8080](http: // localhost: 8080) zu. In der Mitte des Bildschirms befindet sich ein Abschnitt mit der Bezeichnung "Sicherheitsanfälligkeit".

main.png

Der fünfte Link von oben ist "OS Command Injection". Klicken Sie also darauf.

Wenn Sie darauf klicken, wird der folgende Bildschirm angezeigt.

ognl1.png

Es ist eine einfache Funktion, die die Antwort anzeigt, wenn Sie eine Formel eingeben. Sie können java.lang.Math für die Formel verwenden.

Versuchen Sie zunächst, eine einfache Formel wie "1 + 2" oder "Math.sqrt (5)" einzugeben. Sie sollten die richtige Antwort erhalten. Geben Sie dann einen ungültigen Wert als Formel wie "abc" ein. Eine Fehlermeldung wird angezeigt.

err1.png

Auf den ersten Blick scheint diese Funktion gut zu funktionieren.

Wie jedoch inInfo.jpg am unteren Bildschirmrand beschrieben. Geben Sie "@ Runtime @ getRuntime (). Exec (" rm -fr / Ihr-wichtiges-Verzeichnis / ")" ein und klicken Sie auf die Schaltfläche "Berechnen", das Verzeichnis auf dem Server ("/ Ihr-wichtiges-Verzeichnis /"). Wird gelöscht.

* Hinweis: `/ your-important-dir /` sollte ein absoluter Pfad zu einem Verzeichnis auf dem Server sein, das Sie löschen können, oder vor dem Löschen Bitte machen Sie ein Backup. Verwenden Sie unter Windows auch den Befehl `rmdir / s / q` anstelle des Befehls` rm -fr`.

Lass es uns tatsächlich versuchen. Das Zielverzeichnis sollte "/ etc" sein. Wenn Sie die aktuelle Verzeichnisstruktur unter / mit dem Befehl ll ( ls -la) überprüfen, ist dies wie folgt.

$ ll /
Insgesamt 102
dr-xr-xr-x.2 root root 4096 23. April 03:46 2017 bin
dr-xr-xr-x.5 root root 5120 26. April 21:53 2017 boot
drwxr-xr-x.20 Wurzel Wurzel 3820 1. Juni 22:57 2017 dev
drwxr-xr-x.119 root root 12288 1. Juni 22:57 2017 etc
drwxr-xr-x.4 root root 4096 2. April 00:41 2016 home
dr-xr-xr-x.11 root root 4096 19. April 21:20 2017 lib
dr-xr-xr-x.10 root root 12288 23. April 03:46 2017 lib64
drwx------.2 root root 16384 8. August 01:21 2015 lost+found
drwxr-xr-x.2 root root 4096 18. März 20:24 2017 media
drwxr-xr-x.4 root root 4096 15. November 18:00 2015 mnt
drwxr-xr-x.8 root root 4096 1. April 21:49 2017 opt
dr-xr-xr-x.277 root root 0 1. Juni 22:56 2017 proc
dr-xr-x---.78 root root 4096 2. Juni 07:39 2017 root
dr-xr-xr-x.2 root root 12288 20. April 03:27 2017 sbin
drwxr-xr-x.7 root root 0 1. Juni 22:56 2017 selinux
drwxr-xr-x.2 Wurzel Wurzel 4096 23. September 20:50 2011 srv
drwxr-xr-x 13 root root 0 1. Juni 22:56 2017 sys
drwxrwxrwx.3 root root 4096 2. Juni 07:41 2017 tmp
drwxr-xr-x.14 root root 4096 23. September 08:32 2016 usr
drwxr-xr-x.23 root root 4096 5. Oktober 17:12 2016 var

Erstellen Sie vor dem Ausführen ein Backup.

$ cp -pr /etc etc_bk

Geben Sie "@ Runtime @ getRuntime (). Exec ('rm -fr / etc')" ein und klicken Sie auf die Schaltfläche "Berechnen".

rmetc1.png

Führen Sie dann den Befehl ll erneut aus.

$ ll /
Insgesamt 90
dr-xr-xr-x.2 0 0 4096 22. April 18:46 2017 bin
dr-xr-xr-x.5 0 0 5120 26. April 12:53 2017 boot
drwxr-xr-x.20 0 0 3820 1. Juni 13:57 2017 dev
drwxr-xr-x.4 0 0 4096 1. April 15:41 2016 home
dr-xr-xr-x.11 0 0 4096 19. April 12:20 2017 lib
dr-xr-xr-x.10 0 0 12288 22. April 18:46 2017 lib64
drwx------.2 0 0 16384 7. August 16:21 2015 lost+found
drwxr-xr-x.2 0 0 4096 18. März 11:24 2017 media
drwxr-xr-x.4 0 0 4096 15. November 09:00 2015 mnt
drwxr-xr-x.8 0 0 4096 1. April 12:49 2017 opt
dr-xr-xr-x.296 0 0 0 1. Juni 13:56 2017 proc
dr-xr-x---.78 0 0 4096 9. Juni 14:09 2017 root
dr-xr-xr-x.2 0 0 12288 19. April 18:27 2017 sbin
drwxr-xr-x.7 0 0 0 1. Juni 13:56 2017 selinux
drwxr-xr-x.2 0 0 4096 23. September 11:50 2011 srv
drwxr-xr-x 13 0 0 0 1. Juni 13:56 2017 sys
drwxrwxrwx.8 0 0 4096 8. Juni 14:31 2017 tmp
drwxr-xr-x.14 0 0 4096 22. September 23:32 2016 usr
drwxr-xr-x.23 0 0 4096 5. Oktober 08:12 2016 var

Das Verzeichnis / etc ist weg. Dies ist die OS-Befehlsinjektion. Ich habe hier "/ etc" gelöscht, aber ** Natürlich können Sie andere Verzeichnisse löschen und andere Befehle als den Befehl "rm" verwenden. Da Sie Betriebssystembefehle manipulieren können, sind verschiedene Angriffe möglich. ** ** **

Wie Angreifer Schwachstellen finden

Sie könnten denken: "Aber der Angreifer kann die Zeichenfolge, die das Problem verursacht, nicht kennen (@ Runtime @ ...)?" In dieser Anwendung wird die Angriffsmethode der Sicherheitsanfälligkeit absichtlich auf dem Bildschirm beschrieben, aber in einer normalen Anwendung gibt es so etwas natürlich nicht. Wie finden Angreifer Schwachstellen?

** Tipps finden Sie in der Fehlermeldung. ** Fehlermeldungen können auch eine Quelle für Vermutungen bei der Implementierung einer Anwendung durch einen Angreifer sein.

Lassen Sie uns eine Fehlermeldung mit verschiedenen Arten ungültiger Eingabewerte anzeigen. Wenn Sie beispielsweise in diesem Bildschirm "Math.sqrt (5x)" eingeben und auf die Schaltfläche "Berechnen" klicken, wird der folgende Fehler angezeigt:

sqrt5x.png

Eine englische Nachricht folgt "Illegale Formel". Wenn Sie Erfahrung mit der Entwicklung von Anwendungen haben, können Sie davon ausgehen, dass die von einer Bibliothek zurückgegebene Fehlermeldung wie nach "Unzulässige Formel" verkettet ist.

Als nächstes sei "Mat" der vollständig qualifizierte Klassenname, geben Sie "java.lang.Math.sqrt (5)" ein und klicken Sie auf die Schaltfläche "Berechnen".

javalangMathsqrt5.png

Es wurde eine Fehlermeldung ausgegeben, die angibt, dass "@" (an der Markierung) eingegeben wurde, die nicht eingegeben werden sollte. "@" Scheint eine Bedeutung zu haben.

Geben Sie außerdem "sqrt (5)" ohne "Math" ein und klicken Sie auf die Schaltfläche "Berechnen". Sie sehen einen Fehler ähnlich dem folgenden:

sqrt5.png

Dieses Mal erschien das Schlüsselwort " ognl.OgnlContext ", das ich nicht eingegeben habe. Wenn Sie eine sachkundige Person sind, können Sie davon ausgehen, dass es die Technologie namens "** OGNL **" ist, die diese Funktion realisiert. OGNL ist eine Bibliothek von Ausdruckssprachen mit Java-ähnlicher Grammatik.

Unter OGNL-Spezifikationen finden Sie die folgende Beschreibung.

Calling Static Methods You can call a static method using the syntax @class@method(args).

Es scheint, dass statische Methodenaufrufe mit "@ class @ method (args)" erreicht werden können.

"Das heißt ... in der Anwendung können Sie einfach" Math. "im Eingabewert durch" @ Math @ "ersetzen und es als OGNL-Ausdruck ausführen:" Das kannst du dir denken.

Math.sqrt (5) → Ersetzen durch @ Math @ sqrt (5) → Als OGNL-Ausdruck ausführen

Geben Sie "@ System @ currentTimeMillis ()" ein, um festzustellen, ob diese Vermutung korrekt ist.

@ System @ currentTimeMillis ()@ System @ currentTimeMillis () bleibt (nicht ersetzt) → Als OGNL-Ausdruck ausführen

Wenn dies korrekt ist, sollten Sie in der Lage sein, die verstrichene Zeit in Millisekunden seit Mitternacht, dem 1. Januar 1970, abzurufen.

sct.png

Wie die Ergebnisse zeigen, können wir feststellen, dass die Vermutung wahrscheinlich richtig ist.

An dieser Stelle können Sie sich vorstellen, "@ System @ exit (0)" einzugeben, um den Webanwendungsprozess herunterzufahren, oder davor ...: sunglasses :.

Welche Art von Implementierung

Um welche Art von Implementierung handelt es sich eigentlich? Schauen Sie sich den Quellcode an (https://github.com/k-tamura/easybuggy/blob/master/src/main/java/org/t246osslab/easybuggy/vulnerabilities/OGNLExpressionInjectionServlet.java). Die wichtigen Teile sind:

try {
    Object expr = Ognl.parseExpression(expression.replaceAll("Math\\.", "@Math@"));
    value = Ognl.getValue(expr, ctx);
} catch (OgnlException e) {
    isValid = false;
    if (e.getReason() != null) {
        errMessage = e.getReason().getMessage();
    }

Wie Sie sich vorstellen können, ersetzen wir einfach "Math" durch "@ Math @" und führen es als OGNL-Ausdruck aus.

Übrigens habe ich diesmal die OS-Befehlsinjektion ausgeführt, aber da ich auch Java-Code ausführen kann, kann ich auch "** Code-Injection **" sagen. Wenn es genauer klassifiziert wird, kann es außerdem als "Injektion vom Typ OGNL **" bezeichnet werden.

Informationen zur Injektion vom Typ OGNL

Der Name der Injektion im OGNL-Stil wurde von "** Struts 2 **" populär gemacht, einem bekannten Framework für Webanwendungen. Im März dieses Jahres wurde in Struts 2 eine Sicherheitslücke in der OGNL-ähnlichen Injektion gefunden, die Schäden wie Informationslecks auf mehreren Websites verursachte. Es wird gemunkelt, dass eine große Anzahl betrügerischer Anfragen aus Übersee an japanische Server gesendet wurden. Ich habe diese Sicherheitsanfälligkeit tatsächlich ausprobiert (natürlich in der lokalen Struts-App), aber es ist ** ein sehr einfacher und gefährlicher Angriff **.

Diese Sicherheitsanfälligkeit macht einen erheblichen Teil der gemeldeten Sicherheitsanfälligkeiten in Struts 2 aus. OGNL-Ausdrücke werden in verschiedenen Teilen von Struts 2 verwendet, und die Gültigkeit von Ausdrücken wird mithilfe regulärer Ausdrücke überprüft, damit die Injektion von OGNL-Ausdrücken nicht in jedem Teil erfolgt. Selbst wenn ein regulärer Ausdruck veröffentlicht wird, der die Sicherheitsanfälligkeit behebt, wurde eine Angriffsmethode mit einer neuen Zeichenfolge gefunden, die diese umgeht, und die aktuelle Situation besteht darin, dass noch keine grundlegende Lösung gefunden wurde.

Gegenmaßnahmen für die OS-Befehls- / Code-Injection

Welche Maßnahmen sollten also ergriffen werden? Das Folgende kann als Gegenmaßnahme angesehen werden.

  • Erstens werden wir keine Funktion erstellen, die ein solches Risiko beinhaltet (in der Entwurfsphase abgelehnt).
  • Überlegen Sie sich eine andere Implementierungsmethode
  • Geben Sie keine implementierungsspezifische Fehlermeldung an den Benutzer zurück
  • Führen Sie eine Validierungsprüfung des Eingabewerts durch
  • Führen Sie Webanwendungen mit den entsprechenden Benutzerrechten aus (z. B. Tomcat-Benutzerrechte). --Schützen Sie mit Betriebssystemfunktionen (Unix Chroot Jail, AppArmor, SELinux usw.)
  • Sicher mit JVM-Funktionen (Security Manager)

Lassen Sie uns tatsächlich einige davon machen.

Führen Sie mit den entsprechenden Benutzerrechten aus

Was ist, wenn ich eine andere Webanwendung als den Root-Benutzer ausführe? Wechseln wir zum Benutzer "Tomcat" und überprüfen.

$ su tomcat

Geben Sie nach dem Starten der Webanwendung "@ Runtime @ getRuntime (). Exec ('rm -fr / etc')" ein und klicken Sie auf die Schaltfläche "Berechnen". Es wurde kein Fehler angezeigt. Was ist passiert?

$ ll /
Insgesamt 102
dr-xr-xr-x.2 root root 4096 23. April 03:46 2017 bin
dr-xr-xr-x.5 root root 5120 26. April 21:53 2017 boot
drwxr-xr-x.20 Wurzel Wurzel 3820 1. Juni 22:57 2017 dev
drwxr-xr-x.119 root root 12288 1. Juni 22:57 2017 etc
drwxr-xr-x.4 root root 4096 2. April 00:41 2016 home
dr-xr-xr-x.11 root root 4096 19. April 21:20 2017 lib
dr-xr-xr-x.10 root root 12288 23. April 03:46 2017 lib64
drwx------.2 root root 16384 8. August 01:21 2015 lost+found
drwxr-xr-x.2 root root 4096 18. März 20:24 2017 media
drwxr-xr-x.4 root root 4096 15. November 18:00 2015 mnt
drwxr-xr-x.8 root root 4096 1. April 21:49 2017 opt
dr-xr-xr-x.296 root root 0 1. Juni 22:56 2017 proc
dr-xr-x---.78 root root 4096 9. Juni 23:09 2017 root
dr-xr-xr-x.2 root root 12288 20. April 03:27 2017 sbin
drwxr-xr-x.7 root root 0 1. Juni 22:56 2017 selinux
drwxr-xr-x.2 Wurzel Wurzel 4096 23. September 20:50 2011 srv
drwxr-xr-x 13 root root 0 1. Juni 22:56 2017 sys
drwxrwxrwx.8 root root 4096 9. Juni 23:11 2017 tmp
drwxr-xr-x.14 root root 4096 23. September 08:32 2016 usr
drwxr-xr-x.23 root root 4096 5. Oktober 17:12 2016 var

Wie Sie sehen können, wurde / etc nicht gelöscht. Allerdings können durch diesen Angriff auch Befehle ausgeführt werden, die vom Benutzer ausgeführt werden können, der die Webanwendung ausführt (z. B. "rm -fr / home / tomcat / anydir"). Dies allein kann jedoch als ziemlich wirksame Maßnahme bezeichnet werden.

Mit Betriebssystemfunktionen schützen (SELinux)

Wenn SELinux aktiviert ist, wird dann die Injektion von Betriebssystembefehlen unterdrückt? Wechseln Sie erneut zum Root-Benutzer, um SELinux zu aktivieren.

$ vi /etc/selinux/config
# SELINUX=disabled
SELINUX=enforcing

Starten Sie CentOS neu, nachdem Sie Änderungen vorgenommen haben. Geben Sie nach dem Starten der Webanwendung "@ Runtime @ getRuntime (). Exec ('rm -fr / etc')" ein und klicken Sie auf die Schaltfläche "Berechnen".

$ ll /
Insgesamt 90
dr-xr-xr-x.2 0 0 4096 22. April 18:46 2017 bin
dr-xr-xr-x.5 0 0 5120 26. April 12:53 2017 boot
drwxr-xr-x.20 0 0 3820 1. Juni 13:57 2017 dev
drwxr-xr-x.4 0 0 4096 1. April 15:41 2016 home
dr-xr-xr-x.11 0 0 4096 19. April 12:20 2017 lib
dr-xr-xr-x.10 0 0 12288 22. April 18:46 2017 lib64
drwx------.2 0 0 16384 7. August 16:21 2015 lost+found
drwxr-xr-x.2 0 0 4096 18. März 11:24 2017 media
drwxr-xr-x.4 0 0 4096 15. November 09:00 2015 mnt
drwxr-xr-x.8 0 0 4096 1. April 12:49 2017 opt
dr-xr-xr-x.296 0 0 0 1. Juni 13:56 2017 proc
dr-xr-x---.78 0 0 4096 9. Juni 14:09 2017 root
dr-xr-xr-x.2 0 0 12288 19. April 18:27 2017 sbin
drwxr-xr-x.7 0 0 0 1. Juni 13:56 2017 selinux
drwxr-xr-x.2 0 0 4096 23. September 11:50 2011 srv
drwxr-xr-x 13 0 0 0 1. Juni 13:56 2017 sys
drwxrwxrwx.8 0 0 4096 8. Juni 14:31 2017 tmp
drwxr-xr-x.14 0 0 4096 22. September 23:32 2016 usr
drwxr-xr-x.23 0 0 4096 5. Oktober 08:12 2016 var

Es ist weg ... Es scheint nichts anderes als die Verzeichnisse zu schützen, die SELinux standardmäßig schützt (zB / selinux). Zumindest wenn SELinux standardmäßig aktiviert ist, scheint die OS-Befehlsinjektion keine Auswirkung zu haben.

Mit JVM-Funktionen schützen (Security Manager)

Java verfügt über eine Funktion namens "** Security Manager **", die JVM-Vorgänge vor böswilligen Benutzern schützt. Was wäre, wenn ich dies aktiviert hätte?

Um SecurityManager zu aktivieren, fügen Sie den Optionen beim Starten von easybuggy.jar Folgendes hinzu.

-Djava.security.manager -Djava.security.policy=catalina.policy
* Wenn Sie EasyBuggy mit dem Befehl `mvn` starten, kommentieren Sie die folgende Zeile in pom.xml aus.
<!-- <argument>-Djava.security.manager</argument>
<argument>-Djava.security.policy=catalina.policy</argument> -->

Bitte laden Sie catalogina.policy von [hier] herunter (https://raw.githubusercontent.com/k-tamura/easybuggy/master/catalina.policy). Diese Datei verhindert standardmäßig nicht das Einfügen von Betriebssystembefehlen. Sie können dies jedoch verhindern, indem Sie die folgenden Änderungen vornehmen.

** ・ Für Linux (CentOS 6.3) **

grant {
    //Lassen Sie nicht alle Vorgänge für alle Dateien zu, sondern nur das, was Sie benötigen
    // permission java.io.FilePermission "<<ALL FILES>>", "write, read, execute, delete";
    permission java.io.FilePermission "-", "write, read, execute, delete";
    permission java.io.FilePermission "/usr/java/-", "write, read, execute";
    permission java.io.FilePermission "/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/-", "write, read, execute";
・ ・ ・

** Für Windows **

grant {
    //Lassen Sie nicht alle Vorgänge für alle Dateien zu, sondern nur das, was Sie benötigen
    // permission java.io.FilePermission "<<ALL FILES>>", "write, read, execute, delete";
    permission java.io.FilePermission "-", "write, read, execute, delete";
    permission java.io.FilePermission "C:/Program Files/Java/-", "write, read, execute";
    permission java.io.FilePermission "C:/Windows/Sun/Java/-", "write, read, execute";
・ ・ ・

(* Einstellungen variieren je nach Umgebung)

Starten Sie nach Abschluss der Änderungen die Webanwendung mit der Option, Security Manager zu aktivieren. Geben Sie dann "@ Runtime @ getRuntime (). Exec ('rm -fr / etc')" ein und klicken Sie auf die Schaltfläche "Berechnen".

smrmetc.png

Die Injection des Betriebssystembefehls ist aufgrund von SecurityManager fehlgeschlagen.

$ ll /
Insgesamt 102
dr-xr-xr-x.2 root root 4096 23. April 03:46 2017 bin
dr-xr-xr-x.5 root root 5120 26. April 21:53 2017 boot
drwxr-xr-x.20 Wurzel Wurzel 3820 1. Juni 22:57 2017 dev
drwxr-xr-x.119 root root 12288 1. Juni 22:57 2017 etc
drwxr-xr-x.4 root root 4096 2. April 00:41 2016 home
dr-xr-xr-x.11 root root 4096 19. April 21:20 2017 lib
dr-xr-xr-x.10 root root 12288 23. April 03:46 2017 lib64
drwx------.2 root root 16384 8. August 01:21 2015 lost+found
drwxr-xr-x.2 root root 4096 18. März 20:24 2017 media
drwxr-xr-x.4 root root 4096 15. November 18:00 2015 mnt
drwxr-xr-x.8 root root 4096 1. April 21:49 2017 opt
dr-xr-xr-x.296 root root 0 1. Juni 22:56 2017 proc
dr-xr-x---.78 root root 4096 9. Juni 23:09 2017 root
dr-xr-xr-x.2 root root 12288 20. April 03:27 2017 sbin
drwxr-xr-x.7 root root 0 1. Juni 22:56 2017 selinux
drwxr-xr-x.2 Wurzel Wurzel 4096 23. September 20:50 2011 srv
drwxr-xr-x 13 root root 0 1. Juni 22:56 2017 sys
drwxrwxrwx.8 root root 4096 9. Juni 23:11 2017 tmp
drwxr-xr-x.14 root root 4096 23. September 08:32 2016 usr
drwxr-xr-x.23 root root 4096 5. Oktober 17:12 2016 var

Sie können "System.exit (n)" auch ablehnen, indem Sie die Zeile nach "catalogina.policy" auskommentieren.

permission java.lang.RuntimePermission "exitVM";

Geben Sie nach dem Auskommentieren und Neustarten von EasyBuggy "@ System @ exit (0)" ein und klicken Sie auf die Schaltfläche "Berechnen".

exitvm.png

Auf diese Weise können Sie auch verhindern, dass die JVM heruntergefahren wird. SecurityManager ist nicht intuitiv leicht zu verstehen, daher müssen Sie es gut verstehen und verwenden, aber es kann als wirksame Gegenmaßnahme für die OS-Befehlsinjektion und Code-Injection bezeichnet werden.

Referenz