Comment analyser une
machine linux compromise
Tarek MOHAMED CHFI, CEH, ESCP
http://www.linkedin.com/in/tarekmed

tarekmed....
Analyse d'un système linux suite
à une intrusion
L’inspection d’une machine Linux, suite à une attaque (directe où indirec...
Pour lister les noms des programmes qui ouvert les ports, nous allons exécuter la
commande « netstat –nap».
Une attaque pe...
 losf –i tcp :22 : Pour afficher seulement les résultats en relation avec les
services internet TCP sur le port 22.
 lso...
 On peut aussi utiliser la commande « last » avec leurs options par exemple
« last -d» pour afficher seulement les connex...
7) Intégrité des fichiers binaires :
Une attaque peut modifier les binaires usuels (netstat, ls, ps, su, telnet, ifconfig,...
Prochain SlideShare
Chargement dans…5
×

Comment analyser une machine linux compromise

1 294 vues

Publié le

investigation sur linux

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 294
Sur SlideShare
0
Issues des intégrations
0
Intégrations
108
Actions
Partages
0
Téléchargements
35
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Comment analyser une machine linux compromise

  1. 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. 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. 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. 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. 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. 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

×