Comment investiguer une machine sous Linux

Que ce soit pour comprendre une attaque informatique, pendant qu’on effectue un pentest ou par pure précaution, explorer et investiguer une distrib Linux est toujours quelque chose d’intéressant et utile. Ça permet de comprendre en profondeur le fonctionnement du système, d’optimiser le paramétrage des différents services qu’on utilise, et d’améliorer la sécurité de vos visiteurs dans le cas d’un serveur web.

C’est un sujet très conséquent qui n’a pas vraiment de fin. Tout dépend de ce qu’on cherche, pourquoi on le cherche, que faire avec les résultats trouvés. En général, plus on trouve d’information, plus on a besoin d’en trouver d’autres. Nous allons voir ici comment obtenir des informations intéressantes sur l’état du système et l’activité utilisateurs en allant autant que possible droit au but.

Illustration de SuperInvestigator en plein action

Informations matérielles

dmidecode est un utilitaire gratuit en ligne de commande pour Linux qui récupère et affiche des informations matérielles en analysant les données SMBIOS (System Management BIOS). À l’origine, il interagissait avec l’Interface de Gestion de Bureau (DMI), et dmidecode fournit des informations sur la configuration du système, y compris des détails tels que le fabricant, le modèle, le numéro de série, la version du BIOS et l’étiquette d’actif. L’utilitaire rapporte également l’utilisation des sockets CPU, des emplacements d’extension, des emplacements de modules mémoire et des ports d’E/S comme les connexions USB et série.

Les informations sont structurées en enregistrements classés par types DMI, qui peuvent être interrogés à l’aide d’options spécifiques.

dmidecode --help

Options de la commande dmidecode

Voici les différents types disponibles.

dmidecode -t --help

Options pour le paramètre -t de dmidecoe

Par exemple, exécuter dmidecode -t system récupère des informations sur le fabriquant et les identifiants produits de la machine L’utilitaire accède principalement aux données SMBIOS à partir du répertoire /sys/firmware/dmi/tables et est disponible sur toutes les principales distributions Linux.

sudo dmidecode -t system

Exécution de dmidecode avec le paramètre -t system sur une machine virtuelle installée sur VirtualBox

Un autre exemple sur une vraie machine physique.

Exécution de dmidecode avec le paramètre -t system sur un PC portable Asus ROG Strix

Version du système d’exploitation

Pour obtenir les informations sur la version du système d’exploitation Linux, il existe plusieurs méthodes comme uname -a ou le feu neofetch. Toutefois, la méthode recommandée est d’utiliser la commande cat pour lire le fichier /etc/os-release.

Cette commande permet de visualiser rapidement des détails essentiels sur la distribution Linux, notamment :

  • Le nom de la distribution
  • Le numéro de version
  • Le nom de code (codename)

Pour obtenir plus de détails sur l’utilitaire cat, vous pouvez utiliser la commande man cat qui affichera sa page de manuel complète, expliquant toutes ses options et fonctionnements.

cat /etc/os-release

Cette commande est universelle et fonctionne sur la plupart des distributions Linux modernes, offrant un moyen simple et rapide de connaître la version exacte de votre système d’exploitation.

cat /etc/os-release

Version du system d'exploitation dans le fichier os-release

Hostname

Le nom d’hôte est stocké dans le fichier /etc/hostname et peut être consulté avec la commande cat.

cat /etc/hostname

Nom de la machine dans le fichier hostname

Comptes utilisateurs

Le fichier /etc/passwd contient des informations sur les comptes utilisateurs existant sur un système Linux. On peut utiliser la commande cat pour lire ce fichier. La sortie contient 7 champs séparés par des deux-points, décrivant :

  • Nom d’utilisateur
  • Informations sur le mot de passe
  • Identifiant utilisateur (uid)
  • Identifiant de groupe (gid)
  • Description
  • Répertoire personnel
  • Shell par défaut

sudo cat /etc/passwd

Lecture du célèbre et très utile fichier passwd

Comme sous Windows, les comptes créés par l’utilisateur ont généralement des uid de 1000 ou plus (Dans l’example ci-dessus on peut voir en fin de liste 1000 pour cryptrz, 1001 pour robert, 1002 pour jeanlouis). Pour une meilleure lisibilité, on peut utiliser la commande : cat /etc/passwd | column -t -s : .

Par exemple, pour l’utilisateur « cryptrz » :

  • Nom d’utilisateur : cryptrz
  • Mot de passe : x (stocké dans /etc/shadow)
  • uid : 1000
  • gid : 1000
  • Description : cryptrz
  • Répertoire personnel : /home/cryptrz
  • Shell par défaut : /bin/bash

cat /etc/passwd| column -t -s :

Lecture du fichier passwd avec quelques options de filtrage
Lecture de la fin du fichier passwd avec quelques options de filtrage

Ce fichier fournit des informations essentielles sur tous les comptes du système, y compris les comptes système et les comptes utilisateurs standard.

Informations sur les groupes

Le fichier /etc/group contient des informations sur les différents groupes d’utilisateurs présents sur l’hôte. Il peut être lu à l’aide de l’utilitaire cat. :

cat /etc/group

Affichage des groupes disponibles sur le système

On peut voir que l’utilisateur cryptrz appartient au groupe adm, qui a un mot de passe stocké dans le fichier /etc/shadow, signalé par le caractère x. Le gid est 4, et le groupe contient 2 utilisateurs, syslog et cryptrz

Lister les sudoers

Un hôte Linux n’autorise que les utilisateurs présents dans la liste Sudoers à élever leurs privilèges avec sudo. Cette liste est stockée dans le fichier /etc/sudoers et peut être lue à l’aide de l’utilitaire cat. Il est nécessaire d’avoir des privilèges élevés pour accéder à ce fichier.

sudo cat /etc/sudoers

Lecture du fichier sudoers qui permet de vérifier les permissions utilisées pour les utilisateurs et groupes
Groupes et utilisateurs autorisés par sudoers

La liste Sudoers définit les politiques appliquées par la commande sudo. Elle spécifie quels utilisateurs ou groupes peuvent exécuter des commandes avec des privilèges élevés. Pour des raisons de sécurité, il est recommandé d’utiliser la commande visudo pour modifier le fichier sudoers, car elle vérifie automatiquement les erreurs de syntaxe avant d’enregistrer les modifications.

Journaux d’authentification

Les journaux d’authentification sur un hôte Linux sont enregistrés dans le fichier de journalisation d’authentification situé à /var/log/auth.log. Ce fichier peut être consulté à l’aide de l’utilitaire cat, mais en raison de sa taille potentielle, il est souvent plus pratique d’utiliser des utilitaires comme tail, head, more ou less pour une lecture plus facile. Les journaux montrent également l’ouverture et la fermeture de la session pour l’utilisateur root à la suite de cette action.

cat /var/log/auth.log |tail

Lecture du fichier auth.log

Fuseau horaire

Le fuseau horaire est une information importante qui indique la localisation générale d’un appareil ou la plage horaire dans laquelle il est susceptible d’être utilisé. Les informations sur le fuseau horaire peuvent être trouvées à l’emplacement /etc/timezone et peuvent être lues à l’aide de l’utilitaire cat.

cat /etc/timezone

Lecture du fuseau horaire utilisé par le système

Cette commande affichera le fuseau horaire configuré sur le système, qui dans cet exemple est UTC (Temps Universel Coordonné)

Configuration réseau

Pour obtenir des informations sur les adresses MAC et IP des différentes interfaces, on peut utiliser l’utilitaire ip. Pour en savoir plus sur cet utilitaire, on peut consulter sa page de manuel avec man ip. Notez que cela ne fonctionnera que sur un système en cours d’exécution.

ip addr show

Utilisation de la commande ip pour voir les détails des interfaces réseaux

Cette sortie affiche les détails des interfaces réseau lo et enp0s3, y compris leurs adresses IP et MAC.

Connexion réseau actives

Sur un système en fonctionnement, connaître les connexions réseau actives fournit un contexte supplémentaire à l’analyse. On peut utiliser l’utilitaire netstat pour trouver les connexions réseau actives sur un hôte Linux. Pour en savoir plus sur netstat, on peut consulter sa page de manuel avec man netstat.

netstat -natp

Vérification des connexions active avec la commande netstat

Cette sortie affiche les connexions réseau actives, y compris les adresses locales et étrangères, ainsi que l’état des connexions (par exemple, LISTEN ou ESTABLISHED).

Procecssus actifs

La commande ps affiche des informations sur les processus actifs sur un système. Voici les principaux points à retenir :

  • Sans options, ps affiche les processus de l’utilisateur courant ayant un terminal de contrôle.
  • L’option -e ou -A permet d’afficher tous les processus.
  • L’option -f affiche plus de détails, comme l’UID, le PID, le PPID, etc.
  • L’option -u permet de spécifier un utilisateur particulier.
  • L’option -aux affiche tous les processus de tous les utilisateurs.
  • La sortie peut être personnalisée avec l’option -o pour choisir les colonnes à afficher.
  • L’ordre de tri peut être spécifié avec l’option --sort.
  • L’option --forest affiche l’arborescence des processus.

Pour obtenir de l’aide sur ps, on peut utiliser la commande man ps. L’exemple de sortie montre différents processus en cours d’exécution, avec des informations comme l’utilisateur, le PID, l’utilisation CPU/mémoire, l’heure de démarrage et la commande.

ps aux

Vérification des processus actifs avec la commande ps

Informations DNS

Le fichier /etc/hosts contient la configuration pour l’attribution des noms DNS. On peut utiliser la commande cat pour lire ce fichier. Pour plus d’informations sur le fichier hosts, on peut consulter la page de manuel avec man hosts.

Le fichier hosts contient généralement :

  • L’adresse IP 127.0.0.1 associée à localhost
  • Des configurations pour IPv6
  • Des associations entre adresses IP et noms d’hôtes

cat /etc/hosts

Gestion locale des DNS avec le fichier hosts

Les informations sur les serveurs DNS utilisés par un hôte Linux pour la résolution DNS sont généralement stockées dans le fichier /etc/resolv.conf. On peut lire ce fichier avec la commande cat.

Le contenu typique de resolv.conf inclut :

  • Des lignes commençant par « nameserver » qui indiquent les adresses IP des serveurs DNS
  • Des options de configuration DNS
  • Une ligne « search » qui spécifie le domaine de recherche par défaut

cat /etc/resolv.conf

Résolutions DNS dans resolv.conf

Il est important de noter que sur certains systèmes modernes, le fichier resolv.conf est géré dynamiquement par systemd-resolved et ne doit pas être édité manuellement. Pour voir les serveurs DNS actuellement utilisés, on peut utiliser la commande resolvectl status.

resolvectl status

Exemple d'utilisation de resolvctl

Tâches Cron

Les tâches Cron sont des commandes qui s’exécutent périodiquement après un certain intervalle de temps. Un hôte Linux conserve une liste de tâches Cron dans le fichier situé à /etc/crontab. Ce fichier peut être lu avec la commande cat.

Contenu typique du fichier /etc/crontab :

  • Définition des tâches : Chaque ligne représente une tâche avec un intervalle de temps, un nom d’utilisateur et une commande à exécuter.
  • Syntaxe du calendrier : Les cinq premiers champs définissent la minute, l’heure, le jour du mois, le mois et le jour de la semaine pour l’exécution de la tâche.
  • Exemples de tâches : Des scripts peuvent être programmés pour s’exécuter toutes les heures, tous les jours, toutes les semaines ou tous les mois.

Les tâches Cron sont essentielles pour automatiser des tâches répétitives comme les sauvegardes ou les mises à jour. Elles sont gérées par le démon cron, qui vérifie continuellement l’heure système par rapport aux horaires spécifiés dans les fichiers crontab. Elles peuvent aussi être une porte d’entrée pour un attaquant qui peut potentiellement éditer un des fichiers listés dans crontab, qui a un accès root, pour effectuer une élévation de privilèges et exécuter des actions malicieuses.

cat /etc/crontab

Affichage des tâches récurrentes dans le fichier crontab

Démarrage des services

Comme sous Windows, des services peuvent être configurés sous Linux pour démarrer et s’exécuter en arrière-plan après chaque redémarrage du système. Une liste des services peut être trouvée dans le répertoire /etc/init.d. On peut vérifier le contenu de ce répertoire en utilisant la commande ls. Le résultat de la commande ls /etc/init.d montre une liste de services disponibles, notamment :

Ces services peuvent être démarrés, arrêtés ou redémarrés manuellement, et certains sont configurés pour démarrer automatiquement au démarrage du système. La gestion de ces services permet d’optimiser les performances et la sécurité du système Linux, mais peuvent aussi être détournés par un attaquant..

ls /etc/init.d

Affichage des services démarrés par le fichier init.d

.bashrc

Le fichier .bashrc est un script shell exécuté chaque fois qu’une nouvelle session Bash est lancée. Il permet de personnaliser l’environnement du shell en définissant des alias, des fonctions, des variables d’environnement et en exécutant des commandes spécifiques à l’utilisateur. Ce fichier se trouve dans le répertoire personnel de chaque utilisateur et est caché.

cat ~/.bashrc

Contenu du fichier .bashrc

Utilisations typiques du fichier .bashrc :

  • Définir des alias : Créez des raccourcis pour des commandes longues. (Voir le screenshot ci-dessous)
  • Définir des fonctions : Automatisez les tâches répétitives avec des fonctions personnalisées.
  • Configurer l’invite de commande : Personnalisez le texte affiché dans le terminal.
  • Variables d’environnement : Configurez les chemins ou éditeurs préférés.
Aperçu des alias gérés par le fichier .bashrc

Pour modifier le fichier .bashrc, utilisez un éditeur de texte comme nano ou vim. Après avoir apporté des modifications, exécutez la commande source ~/.bashrc pour appliquer les changements immédiatement. Les personnalisations du fichier .bashrc améliorent l’efficacité et la productivité sur la ligne de commande en adaptant le shell Bash aux préférences de l’utilisateur.

Historique des exécutions sudo

Toutes les commandes exécutées avec sudo sur un système Linux sont enregistrées dans le journal d’authentification vu précédemment (auth log). On peut utiliser la commande grep pour filtrer les informations pertinentes de ce journal. Le résultat affiché plus bas montre les dernières commandes exécutées par l’utilisateur « cryptrz » avec sudo. On y trouve notamment :

  • Des tentatives de lecture de fichiers système comme /etc/sudoers
  • La consultation de journaux comme /var/log/btmp et /var/log/wtmp
  • L’utilisation de commandes comme cat, tail et last pour examiner ces journaux

Ces informations peuvent être utiles pour auditer l’utilisation des privilèges d’administration et détecter d’éventuelles activités suspectes sur le système. La commande utilisée pour obtenir ce résultat est :

cat /var/log/auth.log* | grep -i COMMAND | tail

Elle concatène tous les fichiers de journal d’authentification, filtre les lignes contenant « COMMAND » (sans tenir compte de la casse) et affiche les 10 dernières entrées (Retirez | tail si vous voulez la totalité).

cat /var/log/auth.log* | grep -i COMMAND | tail

Utilisation du fichier auth.log pour repérer les exécutions sudo

Historique bash

L’historique Bash enregistre les commandes exécutées par chaque utilisateur, à l’exception de celles lancées avec sudo qu’on vient de voir. Cet historique est stocké séparément pour chaque utilisateur dans son répertoire personnel.

Points clés :

  • Le fichier .bash_history se trouve dans le répertoire personnel de chaque utilisateur.
  • Il est important d’examiner l’historique Bash du compte root et des autres utilisateurs.
  • L’historique révèle les actions effectuées sur le système, comme la navigation dans les répertoires, la manipulation de fichiers, et l’exécution de programmes.

L’exemple fourni montre diverses activités :

  • Navigation dans les répertoires
  • Décompression de fichiers
  • Création et suppression de dossiers
  • Utilisation de commandes comme strings pour analyser des fichiers

L’analyse de l’historique Bash peut aider à comprendre les activités des utilisateurs et à détecter d’éventuelles actions suspectes ou malveillantes sur le système.

Aperçu des commandes tapées sur ce système dans le fichier .bash_history

Fichiers accédés par vim

L’éditeur de texte Vim enregistre des informations sur les fichiers ouverts dans un fichier nommé .viminfo situé dans le répertoire personnel de l’utilisateur. Ce fichier contient :

  • L’historique des lignes de commande
  • L’historique des recherches
  • D’autres informations sur les fichiers ouverts

Points clés :

  • Le fichier .viminfo peut être lu avec la commande cat ~/.viminfo
  • Il contient des informations sur la version de Vim et l’encodage utilisé
  • On y trouve l’historique des commandes exécutées dans Vim
  • Les marques de fichiers indiquent les derniers fichiers ouverts et les positions du curseur
  • La liste de saut (jumplist) montre les déplacements entre les fichiers

Ces informations peuvent être utiles pour :

  • Retracer l’activité d’édition d’un utilisateur
  • Identifier les fichiers récemment modifiés
  • Comprendre l’utilisation de Vim sur le système

L’analyse du fichier .viminfo peut fournir des indices sur les actions d’un utilisateur, notamment dans le cadre d’une enquête de sécurité ou d’une analyse forensique.

Actions utilisateurs listés dans le fichier .viminfo

Syslog

Le Syslog contient des messages enregistrés par le système concernant l’activité du système. Le niveau de détail de ces messages est configurable via le niveau de journalisation. Pour consulter le Syslog, qui se trouve dans le fichier /var/log/syslog, on peut utiliser la commande cat. Cependant, étant donné que le Syslog est souvent volumineux, il est plus pratique d’utiliser des commandes comme tail, head, more ou less pour le rendre plus lisible.

cat /var/log/syslog* | head

Activité système listée dans le fichier syslog

Points clés :

  • Le Syslog enregistre des informations telles que l’heure du système, le nom du système, le processus ayant envoyé le journal (avec son identifiant), et les détails du journal.
  • L’exemple montre l’exécution de tâches cron et d’autres activités système.
  • Les anciens journaux sont archivés dans des fichiers tels que syslog.1, syslog.2, etc., pour éviter que le fichier syslog principal ne devienne trop volumineux.
  • Pour rechercher dans tous les fichiers de journaux syslog, on utilise le caractère générique *.

L’examen des journaux Syslog peut aider à surveiller l’activité du système, à diagnostiquer des problèmes et à détecter des comportements anormaux ou suspects.

Journaux de tiers

Tout comme les journaux système et d’authentification, le répertoire /var/log/ contient des journaux pour les applications tierces telles que les serveurs web, les bases de données ou les serveurs de partage de fichiers. On peut examiner ces journaux en explorant le répertoire /var/log/.

ls /var/log

Journaux de tiers disponibles dans le dossier /var/log

Points clés :

  • Le répertoire /var/log/ contient divers journaux, y compris ceux des applications tierces.
  • Par exemple, les journaux Apache se trouvent dans le répertoire apache2, et les journaux Samba dans le répertoire samba.

Exemple de journaux Apache :

  • Les fichiers de journaux incluent access.log, error.log, et other_vhosts_access.log.

De même, si un serveur de base de données comme MySQL est installé sur le système, ses journaux seront également présents dans ce répertoire. L’examen des journaux de tiers est crucial pour :

  • Surveiller l’activité des applications.
  • Diagnostiquer et résoudre les problèmes.
  • Assurer la sécurité et la performance des services tiers.

Une autre exemple avec les logs Apache que vous pouvez trouver dans le dossier /var/log/apache2 .

Logs Apache stockés dans le dossier /var/log/apache2

Conclusion

Bien que cette liste semble longue, elle permet seulement d’effleurer ce qu’est une investigation informatique. Un expert y passera beaucoup plus de temps, utilisera beaucoup plus de commandes et d’options, manipulera beaucoup plus de données ou même de matériel comme par exemple des bloqueurs en écriture pour éviter que les informations soient altérées pendat l’analyse. Vous pourrez trouver des tutos sur le sujet ou des formations plus poussées. Il existe aussi des distrib Linux comme Sans Sift, Tsurugi ou REMnux, entre autres, dédiées au digital forensic.

Bonne investigation !

Détective pas content qui se demande comment utiliser un Macbook pour faire son enquête. Il regrette l'époque u calepin et du stylo Bic

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Creative Commons License CC BY-SA 4.0