Cookie-gesteuerte PHP-Web-Shells: Unauffällige Taktiken auf Linux-Hosts
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Bedrohungsakteure missbrauchen HTTP-Cookies als verdeckten „Aktivierungsschlüssel“ für PHP-Webshells auf Linux-Hosting-Servern. Die Implantate bleiben inaktiv, bis ein spezifischer Cookie-Wert bereitgestellt wird, dann dekodieren und führen sie von Angreifern bereitgestellte Payloads aus. Dieser Ansatz hilft, offensichtliche Anzeichen in Routinelogs zu reduzieren, während er persistente Remote-Code-Ausführung ermöglicht. Häufig unterstützende Techniken umfassen mehrschichtige Verschleierung, selbstheilende cron-basierte Prozesse und den Einsatz von Standard-Server-Utilities.
Untersuchung
Forscher überprüften mehrere kompromittierte Hosting-Konten und fanden PHP-Loader, die die Funktionalität nur aus Base64-kodierten Blöcken rekonstruieren, wenn der Trigger-Cookie vorhanden ist. Die Persistenz wurde durch cron-Jobs aufrechterhalten, die über Hosting-Kontrollpanels (wie cPanel) erstellt wurden und die Webshell regelmäßig wiederherstellen, wenn sie entfernt wird. Die Ausführung erfolgte häufig über php-fpm und andere Web-Worker, die Shell-Interpreten aufrufen und sekundäre Payloads abrufen, um den Zugang zu erweitern.
Minderung
Erfordern Sie MFA für Hosting-Kontrollpanels und administrative Zugangspfade. Beschränken Sie Webserver-Prozesse, damit sie keine Shells starten oder gängige Staging-Utilities wie base64, curl oder wget aufrufen können. Überwachen Sie die Erzeugung und Modifikationen von cron genau und alarmieren Sie bei unerwarteten Datei-Schreibvorgängen oder Änderungen innerhalb von Webverzeichnissen. Zusätzliche Härtung umfasst die Einschränkung des Zugangs zu Jail-Shells und die Aktivierung von Echtzeit-Endpunktschutz auf Linux-Servern.
Reaktion
Wenn erkannt, isolieren Sie den Host, deaktivieren und entfernen Sie bösartige cron-Einträge, löschen Sie verdächtige PHP-Artefakte und ändern Sie die Zugangsdaten für betroffene Hosting-Konten. Bewahren Sie Beweise wie Trigger-Cookie-Werte und zugehörige Befehlszeilen auf und überprüfen Sie sie, dann wenden Sie Härtungskontrollen an, um eine erneute Bereitstellung und einen wiederholten Kompromiss zu verhindern.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef builtin fill:#cccccc %% Action Nodes step1_initial_access["<b>Technik</b> – T1190 Ausnutzung öffentlicher Anwendungen<br/><b>Beschreibung</b>: Schwachstelle in einer weborientierten Anwendung wird ausgenutzt, um eine bösartige PHP-Datei hochzuladen und ersten Zugriff zu erlangen."] class step1_initial_access action step2_persistence_webshell["<b>Technik</b> – T1505.003 Server-Software-Komponente: Web Shell<br/><b>Beschreibung</b>: Die hochgeladene PHP-Datei fungiert als Webshell, die persistenten Remote-Zugang bietet."] class step2_persistence_webshell action step3_def_evasion_obfuscation["<b>Technik</b> – T1027.008 Verschleierte Dateien oder Informationen: Beschnittene Payloads<br/><b>Beschreibung</b>: Der Loader-Code ist gepackt und beschnitten, um seine wahre Funktion zu verbergen."] class step3_def_evasion_obfuscation action step3b_def_evasion_api["<b>Technik</b> – T1027.007 Dynamische API-Auflösung<br/><b>Beschreibung</b>: Funktionsnamen werden zur Laufzeit rekonstruiert, um statische Erkennung zu vermeiden."] class step3b_def_evasion_api action step4_decode["<b>Technik</b> – T1140 Deobfuscierung/Dekodierung von Dateien oder Informationen<br/><b>Beschreibung</b>: Base64-Blöcke werden auf dem Server dekodiert, um die bösartige Payload wiederherzustellen."] class step4_decode action step5_unix_shell["<b>Technik</b> – T1059.004 Befehlsinterpreter: Unix-Shell<br/><b>Beschreibung</b>: Die Webshell ruft /bin/sh oder bash auf, um vom Angreifer bereitgestellte Befehle auszuführen."] class step5_unix_shell action step6_cookie_cred["<b>Technik</b> – Zugang über Cookie<br/><b>Beschreibung</b>: Die Ausführung ist durch spezifische $_COOKIE-Werte gesteuert, wodurch der Angreifer kontrollieren kann, wann der Code ausgeführt wird."] class step6_cookie_cred action step7_permission_mod["<b>Technik</b> – T1222.002 Linux- und Mac-Datei- und -Verzeichnisberechtigungsmodifikation<br/><b>Beschreibung</b>: Erstellte PHP-Dateien erhalten freizügige Modi, um ausführbar und unantastbar zu bleiben."] class step7_permission_mod action step8_ingress_transfer["<b>Technik</b> – T1105 Übertragung von Tools<br/><b>Beschreibung</b>: curl oder wget laden zusätzliche Tools oder Zweitphasen-Payloads in das Web-Root-Verzeichnis herunter."] class step8_ingress_transfer action step9_persistence_cron["<b>Technik</b> – T1053.003 Geplanter Aufgabe/Job: Cron<br/><b>Beschreibung</b>: Ein Benutzer-Cron-Job erstellt periodisch den verschleierten Loader neu und stellt so einen selbstheilenden Zugriff sicher."] class step9_persistence_cron action step10_def_evasion_cont["<b>Technik</b> – Fortgesetzte Verschleierung und eingeschränkte Sichtbarkeit<br/><b>Beschreibung</b>: Bösartige Aktivitäten werden hinter normalem Webverkehr verborgen und nur durch korrekten Cookie ausgelöst, wodurch Log-Beweise reduziert werden."] class step10_def_evasion_cont action %% Tool / Process Nodes tool_php["<b>Tool</b> – PHP-Interpreter"] class tool_php tool tool_curl_wget["<b>Tool</b> – curl / wget"] class tool_curl_wget tool tool_cron["<b>Tool</b> – Cron-Planer"] class tool_cron tool process_apache["<b>Prozess</b> – apache2 / phpu2011fpm"] class process_apache process %% Connections step1_initial_access –>|führt zu| step2_persistence_webshell step2_persistence_webshell –>|ermöglicht| step3_def_evasion_obfuscation step3_def_evasion_obfuscation –>|verwendet| step3b_def_evasion_api step3b_def_evasion_api –>|bereitet vor| step4_decode step4_decode –>|führt aus| step5_unix_shell step5_unix_shell –>|prüft| step6_cookie_cred step6_cookie_cred –>|setzt| step7_permission_mod step7_permission_mod –>|lädt herunter über| tool_curl_wget tool_curl_wget –>|speichert Payload für| step8_ingress_transfer step8_ingress_transfer –>|löst aus| step9_persistence_cron step9_persistence_cron –>|verstärkt| step10_def_evasion_cont step10_def_evasion_cont –>|agiert innerhalb von| process_apache process_apache –>|führt aus| tool_php "
Angriffsablauf
Erkennungen
Verdächtige Shell über Webserver [Linux] (via Prozess-Erstellung)
Ansehen
Cron-Datei wurde erstellt (via Datei-Ereignis)
Ansehen
Mögliche Manipulation von Base64-kodierten Zeichenfolgen (via Befehlszeile)
Ansehen
Erkennung von Cookie-gesteuerten PHP-Webshell-Aktivitäten [Webserver]
Ansehen
Erkennung von Cookie-gesteuerter PHP-Webshell-Ausführung auf Linux-Servern [Linux-Datei-Ereignis]
Ansehen
Erkennung von Cookie-gesteuerter PHP-Webshell-Ausführung [Linux Prozess-Erstellung]
Ansehen
Simulationsausführung
Voraussetzung: Die Telemetrie & Baseline-Vorab-Prüfung muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und das Narrativ MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, genau die Telemetrie zu erzeugen, die die Erkennungslogik erwartet. Abstrakte oder nicht zusammenhängende Beispiele führen zu Fehldiagnosen.
-
Angriffsgeschichte & Befehle:
Ein Angreifer, der den Webserver bereits kompromittiert hat, erhält eine bösartige PHP-Webshell (schädlich.php). Um sie zu aktivieren, sendet der Angreifer eine HTTP-Anfrage, die einen manipulierten Cookie injiziert. Der PHP-Handler des Webservers interpretiert den Cookie und startet einen Bash-Prozess, der die Webshell-Datei ausführt. Zu Testzwecken simulieren wir denselben Effekt lokal, indem wir Bash manuell mit einer Befehlszeile, die „.php“ enthält, aufrufen. Dies erzeugt die genaue Telemetrie, die die Sigma-Regel überwacht (Shell-Interpreter + „.php“ in der Befehlszeile).- Erstellen Sie eine Dummy-PHP-Webshell (kein schädlicher Code, nur ein harmloses
phpinfo()zur Sichtbarmachung). - Führen Sie die Webshell über Bash aus und betten Sie die
.php-Dateinamen in die Befehlszeile ein. - Überprüfen Sie, ob das Prozess-Erstellungsereignis in den Audit-Logs mit den erwarteten Feldern erscheint.
- Erstellen Sie eine Dummy-PHP-Webshell (kein schädlicher Code, nur ein harmloses
-
Regressionstest-Skript:
#!/usr/bin/env bash set -euo pipefail # 1. Bereitstellung einer harmlosen PHP-Datei (simulierte Webshell) WEBROOT="/tmp/webshell_test" mkdir -p "$WEBROOT" cat > "$WEBROOT/malicious.php" <<'EOF' EOF # 2. Auslösen der Ausführung über einen Bash-Interpreter (Befehlszeile enthält ".php") echo "[*] Webshell über Bash ausführen, um Erkennungstelemetrie zu erzeugen..." /bin/bash -c "php $WEBROOT/malicious.php" # 3. Kurz pausieren, um auditd Zeit zu geben, Logs zu speichern sleep 2 echo "[*] Simulation abgeschlossen. Überprüfen Sie das SIEM für einen Treffer zu:" echo " process.name in (bash, sh, dash, jailshell) UND process.command_line enthält '.php'" -
Bereinigungskommandos:
#!/usr/bin/env bash set -euo pipefail WEBROOT="/tmp/webshell_test" echo "[*] Test-Webshell-Verzeichnis wird entfernt..." rm -rf "$WEBROOT" echo "[*] Bereinigung abgeschlossen."