Webshells PHP à Contrôle de Cookies : Tactiques Furtives sur Hôtes Linux
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Les acteurs de la menace utilisent les cookies HTTP comme une « clé d’activation » secrète pour les web shells PHP sur les serveurs d’hébergement Linux. Les implants restent inactifs jusqu’à ce qu’une valeur de cookie spécifique soit fournie, puis décodent et exécutent les charges utiles fournies par l’attaquant. Cette approche aide à réduire les indicateurs évidents dans les journaux de routine tout en permettant une exécution persistante de code distant. Les tactiques courantes incluent la superposition d’obfuscation, l’auto-guérison basée sur cron, et l’utilisation de ressources du serveur standards (‘Living off the Land’).
Enquête
Les chercheurs ont examiné plusieurs comptes d’hébergement compromis et ont découvert des chargeurs PHP qui ne reconstruisent leurs capacités à partir de blobs encodés en Base64 que lorsque le cookie déclencheur est présent. La persistance était maintenue par des tâches cron créées via des panneaux de contrôle d’hébergement (comme cPanel) qui restaurent périodiquement le web shell s’il est supprimé. L’exécution se faisait généralement via php-fpm et d’autres travailleurs web, qui généraient des interprètes de commande et récupéraient des charges utiles secondaires pour étendre l’accès.
Atténuation
Exigez une authentification multifactorielle (MFA) pour les panneaux de contrôle d’hébergement et les chemins d’accès administratifs. Restreignez les processus du serveur web pour qu’ils ne puissent pas générer de shells ou invoquer des utilitaires de mise en scène courants comme base64, curl ou wget. Surveillez de près la création et les modifications des tâches cron et émettez des alertes sur les écritures ou modifications de fichiers inattendues dans les répertoires web. Le renforcement supplémentaire inclut la restriction de l’accès aux shells jail et l’activation des protections en temps réel sur les serveurs Linux.
Réponse
Si identifié, isolez l’hôte, désactivez et supprimez les entrées cron malveillantes, supprimez les artefacts PHP suspects, et changez les identifiants pour les comptes d’hébergement affectés. Préservez et examinez les preuves, y compris les valeurs de cookies déclencheurs et les lignes de commande associées, puis appliquez des contrôles de durcissement pour empêcher un redéploiement et une compromission répétée.
"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>Technique</b> – T1190 Exploit Public Facing Application<br/><b>Description</b>: Une vulnérabilité dans une application accessible au public est exploitée pour télécharger un fichier PHP malveillant et obtenir un point d’ancrage initial."] class step1_initial_access action step2_persistence_webshell["<b>Technique</b> – T1505.003 Server Software Component: Web Shell<br/><b>Description</b>: Le fichier PHP téléchargé fonctionne comme un web shell fournissant un accès distant persistant."] class step2_persistence_webshell action step3_def_evasion_obfuscation["<b>Technique</b> – T1027.008 Obfuscated Files or Information: Stripped Payloads<br/><b>Description</b>: Le code du chargeur est empaqueté et dépouillé pour cacher sa véritable fonctionnalité."] class step3_def_evasion_obfuscation action step3b_def_evasion_api["<b>Technique</b> – T1027.007 Dynamic API Resolution<br/><b>Description</b>: Les noms de fonction sont reconstruits au moment de l’exécution pour éviter la détection statique."] class step3b_def_evasion_api action step4_decode["<b>Technique</b> – T1140 Deobfuscate/Decode Files or Information<br/><b>Description</b>: Les blobs Base64 sont décodés sur le serveur pour recréer la charge utile malveillante."] class step4_decode action step5_unix_shell["<b>Technique</b> – T1059.004 Command and Scripting Interpreter: Unix Shell<br/><b>Description</b>: Le web shell génère /bin/sh ou bash pour exécuter des commandes fournies par l’attaquant."] class step5_unix_shell action step6_cookie_cred["<b>Technique</b> – Credential Access via Cookie<br/><b>Description</b>: L’exécution est contrôlée par des valeurs spécifiques de $_COOKIE, permettant à l’attaquant de décider quand le code s’exécute."] class step6_cookie_cred action step7_permission_mod["<b>Technique</b> – T1222.002 Linux and Mac File and Directory Permissions Modification<br/><b>Description</b>: Les fichiers PHP créés reçoivent des modes permissifs pour rester exécutables et résistants à la suppression."] class step7_permission_mod action step8_ingress_transfer["<b>Technique</b> – T1105 Ingress Tool Transfer<br/><b>Description</b>: curl ou wget téléchargent des outils supplémentaires ou des charges utiles de second niveau dans la racine web."] class step8_ingress_transfer action step9_persistence_cron["<b>Technique</b> – T1053.003 Scheduled Task/Job: Cron<br/><b>Description</b>: Un cron de niveau utilisateur recrée périodiquement le chargeur obfusqué, assurant une prise persistante autonome."] class step9_persistence_cron action step10_def_evasion_cont["<b>Technique</b> – Continued Obfuscation and Limited Visibility<br/><b>Description</b>: L’activité malveillante est cachée derrière le trafic web normal et ne se déclenche que sur le bon cookie, réduisant ainsi les preuves dans les journaux."] class step10_def_evasion_cont action %% Tool / Process Nodes tool_php["<b>Tool</b> – Interpréteur PHP"] class tool_php tool tool_curl_wget["<b>Tool</b> – curl / wget"] class tool_curl_wget tool tool_cron["<b>Tool</b> – Cron Scheduler"] class tool_cron tool process_apache["<b>Process</b> – apache2 / phpu2011fpm"] class process_apache process %% Connections step1_initial_access –>|conduit à| step2_persistence_webshell step2_persistence_webshell –>|permet| step3_def_evasion_obfuscation step3_def_evasion_obfuscation –>|utilise| step3b_def_evasion_api step3b_def_evasion_api –>|prépare| step4_decode step4_decode –>|exécute| step5_unix_shell step5_unix_shell –>|vérifie| step6_cookie_cred step6_cookie_cred –>|définit| step7_permission_mod step7_permission_mod –>|télécharge via| tool_curl_wget tool_curl_wget –>|stocke la charge pour| step8_ingress_transfer step8_ingress_transfer –>|déclenche| step9_persistence_cron step9_persistence_cron –>|renforce| step10_def_evasion_cont step10_def_evasion_cont –>|opère au sein de| process_apache process_apache –>|exécute| tool_php "
Flux d’attaque
Détections
Shell suspect via serveur web [Linux] (via process_creation)
Voir
Fichier Cron a été créé (via file_event)
Voir
Manipulation possible de chaînes encodées en Base64 (via cmdline)
Voir
Détection d’activité de webshell PHP contrôlé par cookies [Serveur web]
Voir
Détection de l’exécution de webshell PHP contrôlé par cookies sur serveurs Linux [Évènement de fichier Linux]
Voir
Détection de l’exécution de webshell PHP contrôlé par cookies [Création de processus Linux]
Voir
Exécution de simulation
Prérequis : La vérification préalable de télémétrie doit avoir été réussie.
Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés entraîneront une mauvaise interprétation.
-
Narrative d’attaque & Commandes :
Un attaquant ayant déjà compromis le serveur web obtient un webshell PHP malveillant (malicious.php). Pour l’activer, l’attaquant envoie une requête HTTP qui injecte un cookie conçu. Le gestionnaire PHP du serveur web interprète le cookie et génère un processus Bash qui exécute le fichier webshell. Pour le test, nous simulons le même effet localement en invoquant manuellement Bash avec une ligne de commande incluant « .php ». Cela produit la télémétrie exacte que la règle Sigma surveille (interpréteur de shell + « .php » dans la ligne de commande).- Créer un webshell PHP fictif (pas de code nuisible, juste un inoffensif
phpinfo()pour la visibilité). - Exécuter le webshell via Bash, en intégrant le
.phpdans la ligne de commande. - Vérifiez que l’évènement de création de processus apparaît dans les journaux d’audit avec les champs attendus.
- Créer un webshell PHP fictif (pas de code nuisible, juste un inoffensif
-
Script de test de régression :
#!/usr/bin/env bash set -euo pipefail # 1. Déployez un fichier PHP inoffensif (webshell simulé) WEBROOT="/tmp/webshell_test" mkdir -p "$WEBROOT" cat > "$WEBROOT/malicious.php" <<'EOF' EOF # 2. Déclenche l'exécution via un interpréteur Bash (la ligne de commande contient ".php") echo "[*] Exécution du webshell via Bash pour générer la télémétrie de détection..." /bin/bash -c "php $WEBROOT/malicious.php" # 3. Pause brièvement pour permettre à auditd de vider les journaux sleep 2 echo "[*] Simulation complète. Veuillez consulter le SIEM pour une correspondance sur :" echo " process.name in (bash, sh, dash, jailshell) AND process.command_line contains '.php'" -
Commandes de nettoyage :
#!/usr/bin/env bash set -euo pipefail WEBROOT="/tmp/webshell_test" echo "[*] Suppression du répertoire de test webshell..." rm -rf "$WEBROOT" echo "[*] Nettoyage complet."