Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
Comment analyser une machine linux compromise
1. Comment analyser une
machine linux compromise
Tarek MOHAMED CHFI, CEH, ESCP
http://www.linkedin.com/in/tarekmed
tarekmed.rachdi@gmail.com
[Tapez le résumé du document ici. Il s’agit généralement d’une courte synthèse du document. Tapez
le résumé du document ici. Il s’agit généralement d’une courte synthèse du document.]
2. Analyse d'un système linux suite
à une intrusion
L’inspection d’une machine Linux, suite à une attaque (directe où indirect), suite à la
détection d’un événement de sécurité suspect où suite à la détection d’un comportement
virale, doit suivre une certaine logique fondamentale qui nous permettra de comprendre le
scénario et préciser les vulnérabilités qui affectent notre système.
L’entité chargée de la mission d’investigation doit suivre les étapes suivantes :
1) Date et temps système : L’intervenant doit extraire la date et le temps système et les
synchronisés avec son horloge pour définir les écarts entre toutes les entités en
relation avec la machine en question.
Date et le temps système date de la machine compromise
Horloge de l’analyste
NB : il ya un avance de 59 seconde de la machine compromise par rapport à l’horloge de
l’intervenant.
2) Connexions réseaux:
a) Analyse interne : Il est très important de voir les connexions réseaux courantes (Port
TCP, UDP ouvert), pour détecter les connexions suspectes, pour cela la commande
«netstat» est disponible sur toutes les distributions Linux et qui nous permet
d’afficher les connexions réseau ouvertes, les tables de routage, les statistiques des
interfaces, les connexions masquées, les messages netlink et les membres multicast.
Afin de visualiser plus de détails sur les connexions réseaux courantes vous pouvez
utiliser les options de la commande « netstat» par exemple la commande « netstat –a»
vous permet de visualiser les connexions et des ports en écoute sur la machine.
3. Pour lister les noms des programmes qui ouvert les ports, nous allons exécuter la
commande « netstat –nap».
Une attaque peut modifier la table de routage pour rediriger les flux sortants de la
machine, afin de surpasser à travers les règles du pare-feu. Et pour afficher la table de
routage interne utilisez la commande «netstat –rn» ou à l’aide de la commande
« route –c ».
b) Analyse externe : Dans la plupart des incidents, les programmes malveillants (rootkits
, malwares, virus,..) infectent les machines linux en modifiant leurs binaires, en
particulier le binaire de « netstat » pour cacher les ports ouvertes et les connexions
réseaux camouflés par les programmes malveillants. Pour cela, on va utiliser le
l'analyseur réseau (sniffer) wireshark (www.wireshark.org) et le scanneur des ports
Nmap ( http://nmap.org).
-Wirshark : Connecter la machine de l’investigateur et la machine infectée sur le
même HUB ou SWITCH (brancher la machine d’investigation sur un port mirroring
pour pouvoir écouter et capter tous les trafics réseau). Ensuite, lancer wirshark et faites
un filtre sur l’adresse IP de la machine infectée.
Nmap : Lancer un scan avec l’outil nmap depuis l’extérieur sur la machine victime
infecté pour lister tous les ports ouverts.
3) Les programmes responsables sur l’ouverture des ports (TCP, UDP) et les
fichiers : Après l’identification des ports et les connexions distantes suspectes, il faut
vérifier les exécutables qui ouvet les fichiers et les ports TCP et UDP, pour cela,
utiliser l’outil « lsof » (LiSt Open File) et appliquer les filtres adéquats en utilisant les
options de la commande « losf » suivantes :
lsof -i : afficher seulement les résultats en relation avec les services internet
TCP et UDP.
lsof –i tcp : afficher seulement les résultats en relation avec les services
internet TCP.
lsof –i udp : afficher seulement les résultats en relation avec les services
internet UDP.
4. losf –i tcp :22 : Pour afficher seulement les résultats en relation avec les
services internet TCP sur le port 22.
lsof -i @192.168.1.46 : (Pour afficher seulement les résultats en relation avec
les services internet avec l’adresse IP 192.168.1.46.
4) les processus actifs : Habituellement les programmes malveillants (malwares, virus,
rootkits,…) lancent des processus suspects. Donc il est très important de savoir les
processus en exécutions, et pour cela il suffit d’utiliser la commande « ps -aux ».
Dans l’exemple ci-dessus le processus ayant le PID=1199 est exécuté par le utilisateur
root.
Pour faire un filtre sur un processus vous pouvez utiliser la commande « ps –e | grep
nom_process » par exemple pour vérifier le processus ssh ; « ps –e|grep ssh ».
5) Tâches planifiées et services de démarrage :
D’une part, la plupart des incidents liées aux systèmes linux, l’attaquant infecte le
système en mettant des tâches planifiés ou des services au démarrage qui exécutent
certaines commandes ou lancent quelques processus pour ouvrir une porte dérobée
sur la machine victime.
Vérification des tâches planifiées : il suffit de taper « crontab –l » mais probablement
l’exécutable crontab peut être compromis donc il vaut mieux observer manuellement
le fichier /etc/crontab.
Vérification des services de démarrage : il vaut mieux vérifier sur quel niveau les
services démarrages (/etc/init.d/ et /etc/rc.local et /etc/xinit.d) sont chargés avec la
commande runlevel et selon ce niveau on visualise le contenue du dossier
correspondant (rc0.d/, rc1.d/, rc2.d/,rc3.d/, rc4.d/, rc5.d/, rc6.d/) et n’oubliez pas
d’analyse du fichier rc.sysinit.
D’autre part, l’évolution des attaques sophistiquées en particulier le rootkit kernel qui
s’installe au niveau du noyau, et pour identifier les modules suspectes chargés au
niveau du noyau, il suffit d’utiliser la commande « lsmod » qui affiche le nom du
module, leur taille et utilisateurs.
6) Les utilisateurs et leur historique :
L’identification des utilisateurs connectés sur la machine, les comptes utilisateurs et
l’historique des login pour détecter les utilisateurs suspects et voir les commandes qui
ont été exécuté par chaque utilisateur.
La commande « last » pour lister toutes les connexions et déconnexions des
utilisateurs dans notre système qui ont journalisé dans « /var/log/wtmp »,
La commande « Lastb » se comporte comme last, mais il journalise toutes les
tentatives des connexions infructueuses dans « /var/log/btmp».
5. On peut aussi utiliser la commande « last » avec leurs options par exemple
« last -d» pour afficher seulement les connexions distantes ; le nom d'hôte
ainsi son adresse IP.
La commande « w » pour afficher les utilisateurs qui ont actuellement
connectés sur la machine sont journalisés sous le log «/var/run/utmp»
N’oubliez pas de vérifier la création de nouveaux comptes non autorisés, les
comptes sans mots de passe, les changements d’UID sur les comptes déjà
existant, pour cela afficher la contenu de fichier « /etc/passwd ».
La commande « history » pour voir toutes commandes exécutées par chaque
utilisateur.
6. 7) Intégrité des fichiers binaires :
Une attaque peut modifier les binaires usuels (netstat, ls, ps, su, telnet, ifconfig, find,
...) pour cacher leur identité en cas de l’utilisation des ces binaires au cours de la
mission d’investigation. Donc, il faut vérifier l’intégrité de ces programmes. Et pour la
vérification de l’intégrité des binaires ;
Démarrer sur une distribution linux bootable (par exemple knoppix
http://knoppix.net) .Utiliser l’outil « md5sum » de la distribution bootable pour
calculer les signatures des binaires de la machine victime, les signatures de la
distribution bootable et comparer les deux résultats, si deux signatures d’un
même binaires différents alors la machine est certainement compromise par un
rootkit.
Ttapez les commandes avec des options réellement inexistants tel que « -/ » ('
netstat -/ ', ' ps -/ ', ' ls-/’,..) , ces essais ne devraient retourner que des erreurs ;
dans le cas contraire, la machine est certainement compromise par un rootkit.
8) Recherche des fichiers cachés :
Généralement un intrus ou un malware dépose souvent dans un répertoire utilisateur,
des répertoires cachés avec des noms inhabituels (deux points suivis d’un espace, trois
points, deux points suivis d’un control G) ou bien des fichiers dont le nom paraîtrait
normal à première vue (".XX" ou ".mail").
Pour chercher ces dossiers cachés on va utiliser la commande suivante :
find / -name ".. " -print ou find / -name ".*" -print.
9) Recherche des fichiers setuid et setgid :
Recherchez les fichiers setuid et setgid (en particulier les fichiers setuid) dans toute
l’arborescence. Tout processus exécutant un fichier ayant setuid peut exécuter ces
tâches avec des permissions de super utilisateur root. En effet, la plupart des intrus
laissent des exécutables setuid pour pouvoir l’utiliser ultérieurement.
Vous pouvez utiliser les commandes suivantes afin de rechercher les fichiers setuid et
setgid :
find / -user root -perm -4000 -print
find / -group root -perm -2000 -print