Linux Forensics
Last updated
Last updated
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :
Tout d'abord, il est recommandé d'avoir une clé USB avec des binaires et des bibliothèques bien connus (vous pouvez simplement prendre Ubuntu et copier les dossiers /bin, /sbin, /lib, et /lib64), puis monter la clé USB et modifier les variables d'environnement pour utiliser ces binaires :
Une fois que vous avez configuré le système pour utiliser des binaires bons et connus, vous pouvez commencer à extraire quelques informations de base :
Lors de l'obtention des informations de base, vous devriez vérifier des choses étranges comme :
Les processus root ont généralement des PIDS bas, donc si vous trouvez un processus root avec un PID élevé, vous pouvez suspecter
Vérifiez les connexions enregistrées des utilisateurs sans shell dans /etc/passwd
Vérifiez les hachages de mots de passe dans /etc/shadow
pour les utilisateurs sans shell
Pour obtenir la mémoire du système en cours d'exécution, il est recommandé d'utiliser LiME. Pour le compiler, vous devez utiliser le même noyau que celui utilisé par la machine victime.
Rappelez-vous que vous ne pouvez pas installer LiME ou quoi que ce soit d'autre sur la machine victime car cela apportera plusieurs modifications à celle-ci
Ainsi, si vous avez une version identique d'Ubuntu, vous pouvez utiliser apt-get install lime-forensics-dkms
Dans d'autres cas, vous devez télécharger LiME depuis github et le compiler avec les en-têtes de noyau corrects. Pour obtenir les en-têtes de noyau exacts de la machine victime, vous pouvez simplement copier le répertoire /lib/modules/<version du noyau>
sur votre machine, puis compiler LiME en les utilisant :
LiME prend en charge 3 formats:
Brut (chaque segment concaténé ensemble)
Rembourré (identique au brut, mais avec des zéros dans les bits de droite)
Lime (format recommandé avec des métadonnées)
LiME peut également être utilisé pour envoyer le vidage via le réseau au lieu de le stocker sur le système en utilisant quelque chose comme : path=tcp:4444
Tout d'abord, vous devrez arrêter le système. Ce n'est pas toujours une option car parfois le système sera un serveur de production que l'entreprise ne peut pas se permettre d'arrêter.
Il existe 2 façons d'arrêter le système, un arrêt normal et un arrêt "débrancher la prise". Le premier permettra aux processus de se terminer comme d'habitude et au système de fichiers d'être synchronisé, mais il permettra également à un éventuel logiciel malveillant de détruire des preuves. L'approche "débrancher la prise" peut entraîner une perte d'informations (pas beaucoup d'informations seront perdues car nous avons déjà pris une image de la mémoire) et le logiciel malveillant n'aura aucune opportunité d'intervenir. Par conséquent, si vous soupçonnez la présence d'un logiciel malveillant, exécutez simplement la commande sync
sur le système et débranchez la prise.
Il est important de noter que avant de connecter votre ordinateur à quoi que ce soit lié à l'affaire, vous devez vous assurer qu'il va être monté en lecture seule pour éviter de modifier des informations.
Imager une image disque sans plus de données.
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :
Linux propose des outils pour garantir l'intégrité des composants système, essentiels pour repérer les fichiers potentiellement problématiques.
Systèmes basés sur RedHat : Utilisez rpm -Va
pour une vérification complète.
Systèmes basés sur Debian : dpkg --verify
pour une vérification initiale, suivi de debsums | grep -v "OK$"
(après avoir installé debsums
avec apt-get install debsums
) pour identifier d'éventuels problèmes.
Consultez la page suivante pour découvrir des outils utiles pour trouver des logiciels malveillants :
Malware AnalysisPour rechercher efficacement des programmes installés sur les systèmes Debian et RedHat, envisagez d'utiliser les journaux système et les bases de données en plus des vérifications manuelles dans les répertoires courants.
Pour Debian, inspectez /var/lib/dpkg/status
et /var/log/dpkg.log
pour obtenir des détails sur les installations de packages, en utilisant grep
pour filtrer des informations spécifiques.
Les utilisateurs de RedHat peuvent interroger la base de données RPM avec rpm -qa --root=/mntpath/var/lib/rpm
pour lister les packages installés.
Pour découvrir les logiciels installés manuellement ou en dehors de ces gestionnaires de packages, explorez des répertoires tels que /usr/local
, /opt
, /usr/sbin
, /usr/bin
, /bin
, et /sbin
. Combiner les listes de répertoires avec des commandes spécifiques au système pour identifier les exécutables non associés à des packages connus, améliorant ainsi votre recherche de tous les programmes installés.
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :
Imaginez un processus qui a été exécuté à partir de /tmp/exec puis supprimé. Il est possible de l'extraire
Chemins où un logiciel malveillant pourrait être installé en tant que service :
/etc/inittab : Appelle des scripts d'initialisation comme rc.sysinit, redirigeant ensuite vers des scripts de démarrage.
/etc/rc.d/ et /etc/rc.boot/ : Contiennent des scripts pour le démarrage des services, ce dernier étant trouvé dans les anciennes versions de Linux.
/etc/init.d/ : Utilisé dans certaines versions de Linux comme Debian pour stocker des scripts de démarrage.
Les services peuvent également être activés via /etc/inetd.conf ou /etc/xinetd/, selon la variante de Linux.
/etc/systemd/system : Un répertoire pour les scripts du système et du gestionnaire de services.
/etc/systemd/system/multi-user.target.wants/ : Contient des liens vers des services qui doivent être démarrés dans un niveau d'exécution multi-utilisateurs.
/usr/local/etc/rc.d/ : Pour les services personnalisés ou tiers.
~/.config/autostart/ : Pour les applications de démarrage automatique spécifiques à l'utilisateur, qui peuvent être un endroit de dissimulation pour les logiciels malveillants ciblant les utilisateurs.
/lib/systemd/system/ : Fichiers d'unités par défaut à l'échelle du système fournis par les packages installés.
Les modules du noyau Linux, souvent utilisés par les logiciels malveillants comme composants de rootkit, sont chargés au démarrage du système. Les répertoires et fichiers critiques pour ces modules incluent :
/lib/modules/$(uname -r) : Contient les modules pour la version du noyau en cours d'exécution.
/etc/modprobe.d : Contient des fichiers de configuration pour contrôler le chargement des modules.
/etc/modprobe et /etc/modprobe.conf : Fichiers pour les paramètres globaux des modules.
Linux utilise divers fichiers pour exécuter automatiquement des programmes lors de la connexion de l'utilisateur, pouvant potentiellement héberger des logiciels malveillants :
/etc/profile.d/*, /etc/profile, et /etc/bash.bashrc : Exécuté pour toute connexion d'utilisateur.
~/.bashrc, ~/.bash_profile, ~/.profile, et ~/.config/autostart : Fichiers spécifiques à l'utilisateur qui s'exécutent lors de leur connexion.
/etc/rc.local : S'exécute après le démarrage de tous les services système, marquant la fin de la transition vers un environnement multi-utilisateurs.
Les systèmes Linux suivent les activités des utilisateurs et les événements système à travers divers fichiers journaux. Ces journaux sont essentiels pour identifier les accès non autorisés, les infections par des logiciels malveillants et d'autres incidents de sécurité. Les principaux fichiers journaux incluent :
/var/log/syslog (Debian) ou /var/log/messages (RedHat) : Capture les messages et activités système à l'échelle du système.
/var/log/auth.log (Debian) ou /var/log/secure (RedHat) : Enregistre les tentatives d'authentification, les connexions réussies et échouées.
Utilisez grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log
pour filtrer les événements d'authentification pertinents.
/var/log/boot.log : Contient les messages de démarrage du système.
/var/log/maillog ou /var/log/mail.log : Enregistre les activités du serveur de messagerie, utile pour suivre les services liés aux e-mails.
/var/log/kern.log : Stocke les messages du noyau, y compris les erreurs et les avertissements.
/var/log/dmesg : Contient les messages des pilotes de périphériques.
/var/log/faillog : Enregistre les tentatives de connexion échouées, aidant dans les enquêtes sur les violations de sécurité.
/var/log/cron : Enregistre les exécutions des tâches cron.
/var/log/daemon.log : Trace les activités des services en arrière-plan.
/var/log/btmp : Documente les tentatives de connexion échouées.
/var/log/httpd/ : Contient les journaux d'erreurs et d'accès d'Apache HTTPD.
/var/log/mysqld.log ou /var/log/mysql.log : Enregistre les activités de la base de données MySQL.
/var/log/xferlog : Enregistre les transferts de fichiers FTP.
/var/log/ : Vérifiez toujours les journaux inattendus ici.
Les journaux système Linux et les sous-systèmes d'audit peuvent être désactivés ou supprimés lors d'une intrusion ou d'un incident de logiciel malveillant. Parce que les journaux sur les systèmes Linux contiennent généralement certaines des informations les plus utiles sur les activités malveillantes, les intrus les suppriment régulièrement. Par conséquent, lors de l'examen des fichiers journaux disponibles, il est important de rechercher des lacunes ou des entrées désordonnées qui pourraient indiquer une suppression ou une altération.
Linux conserve un historique des commandes pour chaque utilisateur, stocké dans :
~/.bash_history
~/.zsh_history
~/.zsh_sessions/*
~/.python_history
~/.*_history
De plus, la commande last -Faiwx
fournit une liste des connexions des utilisateurs. Vérifiez-la pour des connexions inconnues ou inattendues.
Vérifiez les fichiers qui peuvent accorder des privilèges supplémentaires :
Examinez /etc/sudoers
pour des privilèges d'utilisateur inattendus qui ont pu être accordés.
Examinez /etc/sudoers.d/
pour des privilèges d'utilisateur inattendus qui ont pu être accordés.
Examinez /etc/groups
pour identifier des adhésions ou des autorisations de groupe inhabituelles.
Examinez /etc/passwd
pour identifier des adhésions ou des autorisations de groupe inhabituelles.
Certaines applications génèrent également leurs propres journaux :
SSH : Examinez ~/.ssh/authorized_keys et ~/.ssh/known_hosts pour des connexions distantes non autorisées.
Bureau Gnome : Consultez ~/.recently-used.xbel pour les fichiers récemment consultés via les applications Gnome.
Firefox/Chrome : Vérifiez l'historique du navigateur et les téléchargements dans ~/.mozilla/firefox ou ~/.config/google-chrome pour des activités suspectes.
VIM : Consultez ~/.viminfo pour des détails d'utilisation, tels que les chemins d'accès aux fichiers consultés et l'historique des recherches.
Open Office : Vérifiez les accès récents aux documents qui peuvent indiquer des fichiers compromis.
FTP/SFTP : Consultez les journaux dans ~/.ftp_history ou ~/.sftp_history pour les transferts de fichiers qui pourraient être non autorisés.
MySQL : Enquêtez sur ~/.mysql_history pour les requêtes MySQL exécutées, révélant potentiellement des activités de base de données non autorisées.
Less : Analysez ~/.lesshst pour l'historique d'utilisation, y compris les fichiers consultés et les commandes exécutées.
Git : Examinez ~/.gitconfig et le projet .git/logs pour les modifications apportées aux dépôts.
usbrip est un petit logiciel écrit en Python 3 pur qui analyse les fichiers journaux Linux (/var/log/syslog*
ou /var/log/messages*
selon la distribution) pour construire des tables d'historique des événements USB.
Il est intéressant de connaître tous les périphériques USB qui ont été utilisés et cela sera plus utile si vous avez une liste autorisée de périphériques USB pour trouver des "événements de violation" (l'utilisation de périphériques USB qui ne sont pas dans cette liste).
Plus d'exemples et d'informations sur le github: https://github.com/snovvcrash/usbrip
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui:
Examinez les fichiers /etc/passwd, /etc/shadow et les logs de sécurité à la recherche de noms ou de comptes inhabituels créés et/ou utilisés à proximité d'événements non autorisés connus. Vérifiez également les possibles attaques de force brute sudo. De plus, vérifiez des fichiers comme /etc/sudoers et /etc/groups pour des privilèges inattendus accordés aux utilisateurs. Enfin, recherchez des comptes sans mot de passe ou avec des mots de passe facilement devinables.
Lors d'enquêtes sur des incidents de logiciels malveillants, la structure du système de fichiers est une source d'information cruciale, révélant à la fois la séquence des événements et le contenu du logiciel malveillant. Cependant, les auteurs de logiciels malveillants développent des techniques pour entraver cette analyse, telles que la modification des horodatages des fichiers ou l'évitement du système de fichiers pour le stockage des données.
Pour contrer ces méthodes anti-forensiques, il est essentiel de:
Effectuer une analyse minutieuse de la chronologie en utilisant des outils comme Autopsy pour visualiser les chronologies d'événements ou mactime
de Sleuth Kit pour des données chronologiques détaillées.
Enquêter sur des scripts inattendus dans le $PATH du système, qui pourraient inclure des scripts shell ou PHP utilisés par des attaquants.
Examiner /dev
pour des fichiers atypiques, car il contient traditionnellement des fichiers spéciaux, mais peut contenir des fichiers liés aux logiciels malveillants.
Rechercher des fichiers ou répertoires cachés avec des noms comme ".. " (point point espace) ou "..^G" (point point contrôle-G), qui pourraient dissimuler un contenu malveillant.
Identifier les fichiers setuid root en utilisant la commande: find / -user root -perm -04000 -print
Cela permet de trouver des fichiers avec des permissions élevées, qui pourraient être exploités par des attaquants.
Vérifier les horodatages de suppression dans les tables d'inodes pour repérer des suppressions massives de fichiers, indiquant éventuellement la présence de rootkits ou de chevaux de Troie.
Inspecter les inodes consécutifs pour repérer des fichiers malveillants à proximité après en avoir identifié un, car ils peuvent avoir été placés ensemble.
Vérifier les répertoires binaires courants (/bin, /sbin) pour des fichiers récemment modifiés, car ils pourraient avoir été altérés par des logiciels malveillants.
Notez qu'un attaquant peut modifier l'heure pour faire apparaître les fichiers comme légitimes, mais il ne peut pas modifier l'inode. Si vous constatez qu'un fichier indique qu'il a été créé et modifié en même temps que le reste des fichiers du même dossier, mais que l'inode est plus grand que prévu, alors les horodatages de ce fichier ont été modifiés.
Pour comparer les versions du système de fichiers et repérer les changements, nous utilisons des commandes git diff
simplifiées :
Pour trouver de nouveaux fichiers, comparez deux répertoires :
Pour le contenu modifié, répertoriez les modifications en ignorant les lignes spécifiques :
Pour détecter les fichiers supprimés:
Options de filtre (--diff-filter
) aident à restreindre les changements spécifiques tels que les fichiers ajoutés (A
), supprimés (D
), ou modifiés (M
).
A
: Fichiers ajoutés
C
: Fichiers copiés
D
: Fichiers supprimés
M
: Fichiers modifiés
R
: Fichiers renommés
T
: Changements de type (par exemple, fichier vers lien symbolique)
U
: Fichiers non fusionnés
X
: Fichiers inconnus
B
: Fichiers cassés
Livre: Guide de terrain de la cybercriminalité pour les systèmes Linux: Guides de terrain de la cybercriminalité
Utilisez Trickest pour construire et automatiser facilement des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui: