La réponse à incident est une discipline cruciale en cybersécurité, visant à identifier, contenir, éradiquer et récupérer des systèmes compromis. Cet article explore des méthodes pratiques pour la détection de web shells, l'analyse des journaux d'événements Linux et l'investigation d'intrusions sur des serveurs.
I. Détection et Éradication de Web Shells
Les web shells sont des portes dérobées (backdoors) souvent utilisées par les attaquants pour maintenir l'accès à un serveur web compromis. Leur détection rapide est essentielle.
Recherche de Fonctions Suspectes
Les web shells utilisent fréquemment des fonctions permettant l'exécution de commandes système ou le décodage de code obfusqué. Une approche consiste à rechercher ces fonctions dans les fichiers du répertoire web.
Voici des exemples de commandes pour différents langages de script côté serveur :
# Recherche de fonctions d'exécution dans les fichiers JSP
find /var/www/html -type f -name "*.jsp" | xargs grep "exec("
# Recherche de fonctions d'évaluation dans les fichiers PHP
find /var/www/html -type f -name "*.php" | xargs grep "eval("
# Recherche de fonctions d'exécution dans les fichiers ASP
find /var/www/html -type f -name "*.asp" | xargs grep "execute("
# Recherche de fonctions d'évaluation dans les fichiers ASPX
find /var/www/html -type f -name "*.aspx" | xargs grep "eval("
# Pour les web shells évasifs, recherchez les fonctions d'encodage/décodage
find /var/www/html -type f -name "*.php" | xargs grep "base64_decode"
Après l'exécution de ces commandes, des fichiers suspects peuvent être identifiés. Par exemple, une recherche dans le répertoire /var/www/html pourrait révéler un fichier comme gz.php contenant des codes malveillants.
Identification de Web Shells Spécifiques (Ex: Godzilla)
Certains web shells, comme Godzilla, possèdent des signatures caractéristiques. Godzilla est une porte dérobée Java souvent utilisée pour contrôler des serveurs web. Ses caractéristiques peuvent inclure :
@session_start();- Initialisation d'une session.@set_time_limit(0);- Fixe la limite de temps d'exécution du script à l'infini.@error_reporting(0);- Désactive le rapport d'erreurs.
Ces lignes de code visent à masquer l'activité du shell et à assurer son fonctionnement prolongé. Connaître l'URL de projets comme Godzilla (par exemple, un dépôt GitHub) permet également d'identifier des hachages MD5 associés à ses fichiers, utiles pour la détection.
Localisation de Fichiers Cachés
Les attaquants peuvent cacher leurs web shells en utilisant des noms de fichiers ou de répertoires discrets. La commande ls -la est indispensable pour révéler les fichiers et répertoires cachés (ceux qui commencent par un point).
ls -la /var/www/html/include/Db/
Cette commande pourrait par exemple révéler un fichier comme .Mysqli.php dans un chemin inattendu tel que /var/www/html/include/Db/, indiquant une tentative de dissimulation.
Détection de Web Shells Évasifs via les Journaux d'Accès
Les web shells évasifs (ou "anti-détection") sont conçus pour contourner les outils de sécurité. L'analyse des journaux d'accès du serveur web est une méthode efficace pour les repérer.
Pour un serveur Apache2, les journaux se trouvent généralement dans /var/log/apache2/access.log :
cd /var/log/apache2
cat access.log | grep ".php" | less
En examinant le journal, on peut identifier des requêtes suspectes vers des fichiers inattendus, comme top.php dans le répertoire /var/www/html/wap/, qui pourrait être un web shell.
Outils de Détection de Web Shells
Des outils spécialisés existent pour automatiser la détection de web shells :
- Scanner de Web Shells basé sur des signatures : Ces outils analysent les fichiers du système de fichiers à la recherche de signatures de web shells connues ou de schémas de code suspects.
- Analyse heuristique : Certains outils utilisent l'analyse comportementale ou heuristique pour identifier des codes malveillants même sans signature spécifique.
II. Analyse de Journaux Linux pour l'Investigation
Les journaux système sont une mine d'informations lors d'une investigation. Le répertoire /var/log contient la plupart des fichiers journaux sur un système Linux.
Détection d'Attaques par Force Brute SSH
Le fichier /var/log/auth.log (ou auth.log.1 pour les archives) enregistre les tentatives d'authentification. Il est crucial pour identifier les attaques par force brute contre SSH.
# Recherche des tentatives échouées de connexion SSH pour l'utilisateur 'root'
cat /var/log/auth.log.1 | grep -a "Failed password for root"
Cette commande permet d'identifier les adresses IP à l'origine de ces tentatives, par exemple : 192.168.200.2, 192.168.200.31, 192.168.200.32.
Identification des Connexions SSH Réussies
Pour trouver les adresses IP ayant réussi à se connecter via SSH, on peut filtrer les entrées de succès d'authentification :
# Recherche des connexions SSH réussies
cat /var/log/auth.log.1 | grep -a "Accept"
Une adresse IP comme 192.168.200.2 pourrait ainsi être identifiée comme ayant établi une connexion réussie.
Analyse des Dictionnaires de Noms d'Utilisateur Utilisés
Lors d'une attaque par force brute, les attaquants utilisent souvent des listes de noms d'utilisateur. On peut extraire ces noms depuis le journal d'authentification :
# Extraction des noms d'utilisateur testés lors d'échecs de connexion
cat /var/log/auth.log.1 | grep -a "Failed password for" | awk '{print $11}' | sort | uniq -c | sort -nr
Cette analyse peut révéler les noms d'utilisateur populaires ciblés, tels que user, hello, root, test3, test2, test1.
Détection de la Création de Nouveaux Utilisateurs
Les attaquants créent souvent de nouveaux comptes pour maintenir un accès persistant. Le journal auth.log enregistre également ces événements :
# Recherche des entrées indiquant la création de nouveaux utilisateurs
cat /var/log/auth.log.1 | grep -a "new user"
Cela peut révéler un nom d'utilisateur suspect comme test2.
III. Investigation Approfondie d'Intrusions Linux
Au-delà des journaux, l'investigation d'une intrusion implique l'examen du système de fichiers et des processus en cours.
Localisation de Mots de Passe de Web Shells
Après avoir identifié un web shell, il est souvent nécessaire d'en déterminer le mot de passe pour comprendre son fonctionnement ou pour le désactiver. Les mots de passe sont souvent intégrés directement dans le code du shell.
Par exemple, un fichier nommé 1.php pourrait contenir un mot de passe simple tel que 1.
Identification de Backdoors Persistantes (Undead Shells)
Les "undead shells" ou backdoors persistantes sont des programmes conçus pour se relancer automatiquement s'ils sont tués. Ils sont souvent générés par d'autres scripts. Localiser le script de génération est clé pour comprendre la persistance.
Un fichier comme index.php pourrait être responsable de la création d'une backdoor persistante (par exemple, .shell.php) avec un mot de passe comme hello.
Analyse de Fichiers Binaires Malveillants (ELF)
Les attaquants peuvent déposer des fichiers binaires exécutables (au format ELF sur Linux) pour établir des portes dérobées, des logiciels malveillants ou des outils de commande et contrôle (C2).
# Accorder les permissions d'exécution à un fichier ELF suspect
chmod +x shell.elf
# Exécuter le binaire (dans un environnement sécurisé/bac à sable)
./shell.elf
L'analyse statique et dynamique de ces fichiers est essentielle. Des plateformes d'analyse de malwares en ligne peuvent fournir des rapports détaillés sur le comportement du binaire, y compris les adresses IP des serveurs C2 (par exemple, 10.11.55.21) ou les ports d'écoute (par exemple, 3333).
Détection des Ports d'Écoute Malveillants
Après avoir exécuté un binaire suspect (dans un environnement contrôlé), il est crucial de vérifier les connexions réseau actives et les ports d'écoute. Cela permet d'identifier les canaux de communication établis par le malware.
# Lister toutes les connexions réseau et les ports d'écoute
netstat -alntup
# Ou une commande plus moderne
ss -nt
Ces commandes révèlent les ports ouverts par le processus malveillant, comme le port 3333 dans l'exemple mentionné précédemment.