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.
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
Voici les différents types disponibles.
dmidecode -t --help
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
Un autre exemple sur une vraie machine physique.
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
Hostname
Le nom d’hôte est stocké dans le fichier /etc/hostname
et peut être consulté avec la commande cat
.
cat /etc/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
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 :
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
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
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
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 ca
t.
cat /etc/timezone
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
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
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
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
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
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
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
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 :
- Des services système comme acpid, dbus, udev
- Des services réseau comme networking, ssh, ufw
- Des services d’affichage comme lightdm, gdm3
- Des services de gestion du matériel comme bluetooth, alsa-utils
- Des services d’impression comme cups
- Des services de journalisation comme rsyslog
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
.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
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.
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
etlast
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
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.
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 commandecat ~/.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.
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
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
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épertoiresamba
.
Exemple de journaux Apache :
- Les fichiers de journaux incluent
access.log
,error.log
, etother_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
.
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 !