Skip to main content

[Forensic] Artefacts

Introduction

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

1_i2QTj1JzxDf0BzgfdPJiVA.png

Artefacts

Liste d'artefacts

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


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 :

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

Et la commande suivante pour BTRFS :

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

Dernières extinctions

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) :

echo $PATH

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

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/

Vous pouvez consulter les logs systemd dans le fichier /var/log/syslog .

Init

Sur les vieux systèmes, init était utilisé à la place de 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) :

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

Vous pouvez les retrouver à l'emplacement ~/.config/autostart/ .

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

Une tâche cron exécute quotidiennement logrotate, celle-ci est disponible à cet emplacement /etc/cron.daily/logrotate .

Les status et horodatages des rotations sont disponible à cet emplacement /var/lib/logrotate/status .

Journaux d'évènements

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.

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

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

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

last -F

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

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

Voici quelques options pour journalctl :

Commandes Descriptions
journalctl -o short Affichage de l'horodatage par défaut [ex: Aug 03 02:43:12]
journalctl -o short-full

Affichage de l'horodatage au format ANSI

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

journalctl -o short-iso

Affichage de l'horodatage au format ISO

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

journalctl -o short-unix

Affichage de l'horodatage au format Integer

[ex: 1659519792.935000]

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

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/<USER> : Pour les utilisateurs
  • /root : Pour le compte root

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

Artefacts Descriptions
.bashrc Script exécuté à chaque nouvelle session shell. Il contient généralement les configuration du shell, des fonctions, des variables et les alias.
.bash_logout Script exécuté à chaque fermeture du shell.
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

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 :

Navigateur Chemin
Firefox ~/.mozilla/Firefox/
Chrome ~/.config/google-chrome/
Opera ~/.config/opera/
Vivaldi ~/.config/vivaldi/

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 :

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

Ensuite, il vous faut convertir votre timeline en CSV :

mactime -b bodyfile > timeline.csv

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

image.png

Plaso

Tout d'abord créez votre bodyfile :

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

Le fichier de sortie est une base de donnée SQLite.

Puis transformez votre bodyfile en timeline :

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 :