# [Forensic] Artefacts

## Introduction

De nombreux artefacts sont consultables sur les systèmes Linux pour effectuer une analyse forensique.

[![1_i2QTj1JzxDf0BzgfdPJiVA.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/1-i2qtj1jzxdf0bzgfdpjiva.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/1-i2qtj1jzxdf0bzgfdpjiva.png)

## Artefacts

#### Liste d'artefacts

<table border="1" id="bkmrk-artefacts-descriptio" style="border-collapse: collapse; width: 100%; height: 1224px;"><colgroup><col style="width: 50.0596%;"></col><col style="width: 50.0596%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">**Artefacts**</td><td class="align-center" style="height: 29.8px;">**Descriptions**</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/\*-release</td><td class="align-center" style="height: 29.8px;">Informations sur l'OS et les numéros de version</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/issue</td><td class="align-center" style="height: 29.8px;">Informations sur l'OS et les numéros de version</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/issue.net</td><td class="align-center" style="height: 29.8px;">Informations sur l'OS et les numéros de version</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/timezone</td><td class="align-center" style="height: 29.8px;">Fuseau horaire</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/localtime</td><td class="align-center" style="height: 29.8px;">Fuseau horaire</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/passwd</td><td class="align-center" style="height: 29.8px;">Comptes utilisateurs</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/group</td><td class="align-center" style="height: 29.8px;">Groupes et membres</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/shadow</td><td class="align-center" style="height: 29.8px;">Mots de passe hashés des comptes utilisateurs</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/sudoers | /etc/sudoers.d</td><td class="align-center" style="height: 29.8px;">Politiques sudo</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/fstab</td><td class="align-center" style="height: 29.8px;">Points de montages automatiques</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/hostname</td><td class="align-center" style="height: 29.8px;">Nom d'hôte de la machine</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/hosts</td><td class="align-center" style="height: 29.8px;">Résolution des noms de domaine</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/network/interfaces</td><td class="align-center" style="height: 29.8px;">Configuration réseau</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/etc/resolv.conf</td><td class="align-center" style="height: 29.8px;">Configuration DNS</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/lib/networkmanager/internal</td><td class="align-center" style="height: 29.8px;">Dernière IP attribuée au système</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/lib/networkmanager/NetworkManager.state</td><td class="align-center" style="height: 46.6px;">Etat actuel du réseau, du wifi et de l'accès à internet sur le système</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/lib/networkmanager/seen-bssids</td><td class="align-center" style="height: 46.6px;">Enregistre les BSSID wifi vus, mais pas nécessairement  
connectés</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/lib/networkmanager/timestamps</td><td class="align-center" style="height: 29.8px;">Enregistre les baux DHCP</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/lib/dpkg/status</td><td class="align-center" style="height: 46.6px;">Journaux d'évènements du gestionnaire de paquets DPKG (Debian / Ubuntu)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/lib/dpkg/status</td><td class="align-center" style="height: 46.6px;">Journaux d'évènements du gestionnaire de paquets RPM (Redhat)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/lib/pacman/local</td><td class="align-center" style="height: 46.6px;">Journaux d'évènements du gestionnaire de paquets PACMAN (Arch Linux)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/log/apt/history.log</td><td class="align-center" style="height: 46.6px;">Journaux d'évènements de ce qui a été installé avec le gestionnaire de paquets APT (Debian / Ubuntu)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/log/apt/term.log</td><td class="align-center" style="height: 46.6px;">Enregistre les sorties de terminal des commandes d'installations avec APT (Debian / Ubuntu)  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/yum.log\*</td><td class="align-center" style="height: 29.8px;">Contient les dates d'installation des paquets (Redhat)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/log/dnf.log\*</td><td class="align-center" style="height: 46.6px;">Contient les dates d'installation des paquets dans un format difficile à lire (Redhat)</td></tr><tr style="height: 46.6px;"><td class="align-center" style="height: 46.6px;">/var/log/dpkg.log\*</td><td class="align-center" style="height: 46.6px;">Journaux d'évènements pour les paquets installés manuellement avec le gestionnaire de paquets DPKG (Debian / Ubuntu)</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/auth.log</td><td class="align-center" style="height: 29.8px;">Connexions utilisateurs.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/btmp</td><td class="align-center" style="height: 29.8px;">Connexions échouées des utilisateurs.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/faillog</td><td class="align-center" style="height: 29.8px;">Connexions échouées des utilisateurs.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/dmesg</td><td class="align-center" style="height: 29.8px;">Périphériques matériels détectés par le kernel au démarrage.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/journal/\*</td><td class="align-center" style="height: 29.8px;">Logs systèmes et services (remplaçant de syslog)</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/lastlog</td><td class="align-center" style="height: 29.8px;">Dernières connexions pour chaque utilisateur.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/syslog</td><td class="align-center" style="height: 29.8px;">Logs systèmes et services.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">/var/log/wtmp | /var/log/utmp</td><td class="align-center" style="height: 29.8px;">Connexions réussies des utilisateurs.</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">  
</td><td class="align-center" style="height: 29.8px;">  
</td></tr></tbody></table>

#### Date d'installation du système

La méthode la plus sûre est de chercher la date de création du système de fichiers, en utilisant la commande suivante pour **EXT4** :

```bash
tune2fs –l /dev/sdb2 | grep -i "created"
```

Et la commande suivante pour **BTRFS** :

```bash
btrfs subvol show /mnt/evidence/| grep -i "creation time"
```

#### Dernières extinctions

```bash
last -f /var/log/wtmp | grep shutdown
```

#### $PATH

Le $PATH contient les chemins vers tous les binaires exécutables. Vous pouvez afficher les chemins (*chroot* requis) :

```bash
echo $PATH
```

Vous pouvez aussi récupérer tous les binaires (applications), avec la commande suivante (*chroot* requis) :

```bash
for i in $(echo $PATH | tr -s ":" "\n"); do find $i/ -type f; done > apps.txt
```

#### Démarrages automatiques

##### Systemd

Vous pouvez consulter tous les fichiers **.service** ou **.target** ou **.socket** contenus dans les répertoires suivants :

- **/etc/systemd/system/**
- **/usr/lib/systemd/system**
- **/lib/systemd/system/**

<p class="callout info">Vous pouvez consulter les logs systemd dans le fichier **/var/log/syslog** .</p>

##### Init

Sur les vieux systèmes, init était utilisé et non systemd. Les scripts exécutés au démarrage avec init sont situés dans **/etc/init.d** .

##### Cron

Les tâches crontab peuvent être vérifiées dans les répertoires suivants :

- **/etc/crontab/**
- **/var/spool/cron/crontabs/**

De plus, les tâches propres aux utilisateurs peuvent être consultées avec la commande suivante (*chroot* requis) :

```bash
crontab -l
```

##### Profils shells

Ces fichiers de profil sont en réalité des scripts bash qui s'exécutent au démarrage de la session de l'utilisateur, ils sont exécutés dans l'ordre suivant :

- **/etc/profile**
- **~/.bash\_profile**
- **~/.bash\_login**
- **~/.profile**

##### GUI Startup Manager

Sur les environnements de bureau traditionnels (Gnome, KDE, XFCE), il est possible de configurer des applications de démarrage :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/9XWimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/9XWimage.png)

<p class="callout success">Vous pouvez les retrouver à l'emplacement **~/.config/autostart/** .</p>

#### Logrotate

La configuration de Logrotate est disponible via le fichier **/etc/logrotate.conf** ou dans le dossier  **/etc/logrotate.d/** . Voici la configuration par défaut :

- weekly : rotation hebdomadaire.
- rotate 4 : conserve 4 cycle de rotation.
- create : un nouveau fichier vide après chaque rotation.

Voici un schéma explicatif du fonctionnement de Logrotate :

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/yqZimage.png)

<p class="callout info">Une tâche cron exécute quotidiennement logrotate, celle-ci est disponible à cet emplacement **/etc/cron.daily/logrotate** .</p>

<p class="callout info">Les status et horodatages des rotations sont disponible à cet emplacement **/var/lib/logrotate/status** .</p>

#### Journaux d'évènements

<p class="callout warning">Les logs au format texte sont en train d'être remplacés par des fichiers de base de données sur les systèmes Linux, ce qui les rend plus difficile à consulter.</p>

Vous pouvez afficher les logins réussis avec l'horodatage pour les utilisateurs du système avec la commande suivante :

```bash
lastlog |pr -2 -t -s | column -t
```

Vous pouvez afficher les dernières connexions de l'utilisateur courant avec la commande suivante :

```bash
last -F
```

Vous pouvez consulter les logs d'un système distant avec **journalctl** :

```bash
journalctl --directory=/mnt/evidence/var/log/journal
```

Voici quelques options pour journalctl :

<table border="1" id="bkmrk-commandes-descriptio" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td class="align-center">**Commandes**</td><td class="align-center">**Descriptions**</td></tr><tr><td class="align-center">journalctl -o short</td><td class="align-center">Affichage de l'horodatage par défaut \[ex: Aug 03 02:43:12\]</td></tr><tr><td class="align-center">journalctl -o short-full</td><td class="align-center">Affichage de l'horodatage au format ANSI

\[ex: Wed 2022-08-03 02:43:12\]

</td></tr><tr><td class="align-center">journalctl -o short-iso</td><td class="align-center">Affichage de l'horodatage au format ISO

\[ex:2022-08-03T02:43:12-0700\]

</td></tr><tr><td class="align-center">journalctl -o short-unix</td><td class="align-center">Affichage de l'horodatage au format Integer

\[ex: 1659519792.935000\]

</td></tr><tr><td class="align-center">journalctl -o verbose</td><td class="align-center">Affiche le détail complets des champs</td></tr><tr><td class="align-center">journalctl --no-hostname</td><td class="align-center">Enlève le champ du nom d'hôte pour améliorer la lisibilité</td></tr><tr><td class="align-center">journalctl -a</td><td class="align-center">Affiche l'ensemble des champs des journaux</td></tr><tr><td class="align-center">journalctl -r</td><td class="align-center">Affiche les logs en sens inverse</td></tr><tr><td class="align-center">journalctl --list-boots</td><td class="align-center">Liste les démarrages</td></tr><tr><td class="align-center">journalctl -u &lt;SERVICE&gt;.service</td><td class="align-center">Information sur un service</td></tr><tr><td class="align-center">journalctl \_UID=&lt;UID&gt;</td><td class="align-center">Informations sur l'utilisateur (avec son id)</td></tr><tr><td class="align-center">journalctl -k | grep -i USB</td><td class="align-center">Informations kernel sur les périphériques USB</td></tr></tbody></table>

#### Home

Les répertoires homes des utilisateurs contiennent généralement les artefacts les plus intéressants. Par défaut ils sont situés dans :

- **/home/&lt;USER&gt;** : Pour les utilisateurs
- **/root** : Pour le compte root

Voici des artefacts contenus dans les répertoires home qui pourraient vous intéresser :

<table border="1" id="bkmrk-artefacts-descriptio-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 49.9112%;"></col><col style="width: 49.9112%;"></col></colgroup><tbody><tr><td class="align-center">**Artefacts**</td><td class="align-center">**Descriptions**</td></tr><tr><td class="align-center">.bashrc</td><td class="align-center">Script exécuté à chaque nouvelle session shell. Il contient généralement les configuration du shell, des fonctions, des variables et les alias.  
</td></tr><tr><td class="align-center">.bash\_logout</td><td class="align-center">Script exécuté à chaque fermeture du shell.</td></tr></tbody></table>

##### Bash\_history

Ce fichier est présent dans le home de l'utilisateur et stocke les commande exécutées par celui-ci.

Voici quelques éléments à prendre en considération:

- Il n’enregistre pas les horodatages par défaut (**$HISTTIMEFORMAT**).
- Il peut être manipulé / modifié / supprimé.
- Il ne contient pas les commandes des shells en cours.
- Il peut être situé n’importe ou sur le système (**$HISTFILE**).
- En ajoutant un espace devant la commande, la commande n'est pas  
    enregistrée (**$HISTCONTROL**).
- Le fichier a une taille maximum et un nombre de ligne limité. (**$HISTFILESIZE**)  
    et (**$HISTSIZE**).

#### Éléments récents

Sur un système avec un environnement de bureau, vous pouvez retrouver l'équivalent des jumplists pour windows via le fichier **~/.local/share/recently-used.xbel** :

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/DHZimage.png)

Il s'agit d'un fichier “xml” contenant le nom des fichiers accédés avec l'interface graphique. Il inclue d'importantes informations telles que :

- Le nom du programme.
- La date et heure.
- L'emplacement et le nom du fichier.

#### Corbeille

Sur un système avec un environnement de bureau, vous pouvez retrouver la corbeille à l'emplacement **~/.local/share/Trash** . Cependant, seulement les fichiers supprimés avec l'interface graphique seront présents.

Deux sous répertoires sont à étudier :

- **files/** : Contenant le fichier original.
- **info/** : Contenant les informations de suppression (date et chemin).

#### Navigateurs internet

Voici les emplacements des profiles utilisateurs selon les navigateurs :

<table border="1" id="bkmrk-navigateur-chemin-fi" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 49.9112%;"></col><col style="width: 49.9112%;"></col></colgroup><tbody><tr><td class="align-center">**Navigateur**</td><td class="align-center">**Chemin**</td></tr><tr><td class="align-center">Firefox</td><td class="align-center">~/.mozilla/Firefox/</td></tr><tr><td class="align-center">Chrome</td><td class="align-center">~/.config/google-chrome/</td></tr><tr><td class="align-center">Opera</td><td class="align-center">~/.config/opera/</td></tr><tr><td class="align-center">Vivaldi</td><td class="align-center">~/.config/vivaldi/</td></tr></tbody></table>

#### Timeline

Pour générer une timeline sur les évènements passés sur un système de fichiers, plusieurs solutions s'offrent à vous :

- La super timeline plaso avec **log2timeline** (lente à générer mais très performante).
- La timeline de **sleuthkit** (rapide à générer).

##### Sleuthkit

Pour générer une timeline avec sleuthkit, commencez par créer un bodyfile :

```bash
tsk_gettimes -m image.E01 > bodyfile
```

Chaque ligne contient les informations suivantes :  
**MD5|nom|inode|mode\_en\_chaîne|UID|GID|taille|atime|mtime|ctime|crtime .**

Voici le détail des informations :

- **MD5** : MD5 du fichier.
- **nom** : Chemin complet du fichier.
- **inode** : Identifiant unique du fichier dans le système de fichiers.
- **mode** : Permissions UNIX.
- **UID** : Identifiant de l'utilisateur propriétaire du fichier.
- **GID** : Identifiant du groupe propriétaire du fichier.
- **taille** : Taille du fichier.
- **atime** : Heure du dernier accès au fichier.
- **mtime** : Heure de la dernière modification du fichier.
- **ctime** : Heure du dernier changement de métadonnée du fichier.
- **crtime** : Heure de création du fichier.

Voici un exemple de ce à quoi ressemble le bodyfile :

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/fOCimage.png)

Ensuite, il vous faut convertir votre timeline en CSV :

```bash
mactime -b bodyfile > timeline.csv
```

Voici à quoi ressemble le fichier CSV généré :

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-03/scaled-1680-/LMwimage.png)

##### Plaso

Tout d'abord créez votre bodyfile :

```bash
log2timeline.py --storage_file <bodyfile> <image.E01>
```

<p class="callout info">Le fichier de sortie est une base de donnée SQLite.</p>

Puis transformez votre bodyfile en timeline :

```bash
psort -w <timeline> <bodyfile>
```

##### Visualiseurs

Une fois la timeline générée, il faut utiliser des outils de visualisation pour effectuer une analyse. Pour cela, vous pouvez utiliser :

- **Timesketch** ([https://timesketch.org/)](https://timesketch.org/))
- **Timeline Explorer** (Eric Zimmerman)
- **Glogg** ([http://glogg.bonnefon.org/index.html)](http://glogg.bonnefon.org/index.html))