Que fait Analyse des fichiers LNK et des listes de sauts Windows ?
Présentation
Les fichiers LNK (raccourcis) et les listes de sauts Windows sont des artefacts médico-légaux essentiels qui fournissent des preuves d'accès aux fichiers, d'exécution de programmes et de comportement de l'utilisateur. Les fichiers LNK sont créés automatiquement lorsqu'un utilisateur ouvre un fichier via l'Explorateur Windows ou la boîte de dialogue Ouvrir/Enregistrer, stockant des métadonnées sur le fichier cible, notamment son chemin d'origine, ses horodatages, le numéro de série du volume, le nom NetBIOS et l'adresse MAC du système hôte. Les listes de sauts, introduites dans Windows 7, enrichissent cela en maintenant des listes par application de fichiers récemment et fréquemment consultés. Ces artefacts persistent même après la suppression des fichiers cibles, ce qui les rend inestimables pour démontrer qu'un utilisateur a accédé à des fichiers spécifiques à des moments précis.
Quand utiliser
- Lors d'enquêtes sur des incidents de sécurité nécessitant l'analyse d'artefacts de fichiers LNK et de listes de sauts
- Lors de la création de règles de détection ou de requêtes de chasse aux menaces pour ce domaine
- Lorsque les analystes SOC ont besoin de procédures structurées pour ce type d'analyse
- Lors de la validation de la couverture de surveillance de sécurité pour les techniques d'attaque associées
Prérequis
- LECmd (Eric Zimmerman) pour l'analyse des fichiers LNK
- JLECmd (Eric Zimmerman) pour l'analyse des listes de sauts
- Python 3.8+ avec les bibliothèques pylnk3 ou LnkParse3
- Image médico-légale ou collecte de triage d'un système Windows
- Timeline Explorer pour l'analyse CSV
Emplacements des fichiers LNK
| Emplacement | Description |
|---|---|
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\ | Fichiers récents consultés |
%USERPROFILE%\Desktop\ | Raccourcis créés par l'utilisateur |
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\ | Raccourcis du menu Démarrer |
%USERPROFILE%\AppData\Roaming\Microsoft\Office\Recent\ | Documents Office récents |
Structure du fichier LNK
En-tête Shell Link (76 octets)
| Décalage | Taille | Champ |
|---|---|---|
| 0x00 | 4 | HeaderSize (toujours 0x0000004C) |
| 0x04 | 16 | LinkCLSID (toujours 00021401-0000-0000-C000-000000000046) |
| 0x14 | 4 | LinkFlags |
| 0x18 | 4 | FileAttributes |
| 0x1C | 8 | CreationTime (FILETIME) |
| 0x24 | 8 | AccessTime (FILETIME) |
| 0x2C | 8 | WriteTime (FILETIME) |
| 0x34 | 4 | Taille du fichier cible |
| 0x38 | 4 | IconIndex |
| 0x3C | 4 | ShowCommand |
| 0x40 | 2 | HotKey |
Champs clés pour l'investigation dans les fichiers LNK
- Horodatages du fichier cible : dates de création, d'accès et de modification du fichier référencé
- Informations sur le volume : numéro de série, type de lecteur, nom du volume
- Informations sur le partage réseau : chemin UNC, nom du partage
- Identifiants de la machine : nom NetBIOS, adresse MAC (depuis le TrackerDataBlock)
- Suivi de lien distribué : ID machine et GUID de l'objet
Analyse avec les outils EZ
LECmd - Analyseur de fichiers LNK
# Analyser tous les fichiers LNK du dossier Recent
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_analysis.csv
# Analyser un seul fichier LNK avec tous les détails
LECmd.exe -f "C:\Evidence\Users\suspect\Desktop\Confidential.docx.lnk" --json C:\Output
# Analyser les fichiers LNK avec des niveaux de détail supplémentaires
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_all.csv --all
JLECmd - Analyseur de listes de sauts
# Analyser les listes de sauts automatiques
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv
# Analyser les listes de sauts personnalisées
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations" --csv C:\Output --csvf jumplists_custom.csv
# Analyser toutes les listes de sauts avec sortie détaillée
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv --ld
Structure des listes de sauts
Destinations automatiques (automaticDestinations-ms)
Ce sont des fichiers composés OLE (stockage structuré) identifiés par le hachage AppID dans le nom du fichier :
| Hachage AppID | Application |
|---|---|
| 5f7b5f1e01b83767 | Explorateur Windows Épinglés/Fréquents |
| 1b4dd67f29cb1962 | Explorateur Windows Récents |
| 9b9cdc69c1c24e2b | Bloc-notes |
| a7bd71699cd38d1c | Notepad++ |
| 12dc1ea8e34b5a6 | Microsoft Paint |
| 7e4dca80246863e3 | Panneau de configuration |
| 1cf97c38a5881255 | Microsoft Edge |
| f01b4d95cf55d32a | Explorateur Windows |
| 9d1f905ce5044aee | Microsoft Excel |
| a4a5324453625195 | Microsoft Word |
| d00655d2aa12ff6d | Microsoft PowerPoint |
| bc03160ee1a59fc1 | Outlook |
Destinations personnalisées (customDestinations-ms)
Créées lorsque les utilisateurs épinglent des éléments aux listes de sauts des applications. Ces fichiers contiennent des entrées LNK séquentielles.
Script d'analyse Python
import struct
import os
from datetime import datetime, timedelta
FILETIME_EPOCH = datetime(1601, 1, 1)
def filetime_to_datetime(filetime_bytes: bytes) -> datetime:
"""Convertir un FILETIME Windows (intervalles de 100 ns depuis 1601) en datetime."""
ft = struct.unpack("<Q", filetime_bytes)[0]
if ft == 0:
return None
return FILETIME_EPOCH + timedelta(microseconds=ft // 10)
def parse_lnk_header(lnk_path: str) -> dict:
"""Analyser l'en-tête Shell Link d'un fichier LNK."""
with open(lnk_path, "rb") as f:
header = f.read(76)
header_size = struct.unpack("<I", header[0:4])[0]
if header_size != 0x4C:
return {"error": "En-tête LNK invalide"}
link_flags = struct.unpack("<I", header[0x14:0x18])[0]
file_attrs = struct.unpack("<I", header[0x18:0x1C])[0]
result = {
"header_size": header_size,
"link_flags": hex(link_flags),
"file_attributes": hex(file_attrs),
"creation_time": filetime_to_datetime(header[0x1C:0x24]),
"access_time": filetime_to_datetime(header[0x24:0x2C]),
"write_time": filetime_to_datetime(header[0x2C:0x34]),
"file_size": struct.unpack("<I", header[0x34:0x38])[0],
"has_target_id_list": bool(link_flags & 0x01),
"has_link_info": bool(link_flags & 0x02),
"has_name": bool(link_flags & 0x04),
"has_relative_path": bool(link_flags & 0x08),
"has_working_dir": bool(link_flags & 0x10),
"has_arguments": bool(link_flags & 0x20),
"has_icon_location": bool(link_flags & 0x40),
}
return result
Cas d'utilisation d'investigation
Preuve d'accès aux fichiers
- Analyser les fichiers LNK du dossier Recent pour identifier les documents consultés
- Recouper avec les horodatages MFT et les entrées du journal USN
- Noter que les fichiers LNK persistent même après la suppression des fichiers cibles
Accès aux supports amovibles
- Les fichiers LNK faisant référence aux lettres de lecteur E:, F:, G: indiquent une utilisation de support amovible
- Le numéro de série du volume dans le LNK identifie le périphérique spécifique
- L'adresse MAC dans le TrackerDataBlock identifie la machine source
Activité de partage réseau
- Les fichiers LNK avec des chemins UNC (\serveur\partage) indiquent un accès aux fichiers réseau
- Le nom NetBIOS identifie le serveur distant
- Les horodatages établissent le moment de l'accès
Différences entre Windows 10 et Windows 11
Des recherches récentes (IEEE 2025) montrent que Windows 11 produit des artefacts LNK et de listes de sauts différents :
- Moins de fichiers LNK automatiques générés pour certains types de fichiers
- Comportement modifié des listes de sauts pour les applications modernes
- Les applications UWP/MSIX peuvent ne pas générer de listes de sauts traditionnelles
- L'accès rapide de Windows 11 remplace certaines fonctionnalités du dossier Recent
Références
- Format de fichier binaire Shell Link : https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/
- Analyse LNK par Magnet Forensics : https://www.magnetforensics.com/blog/forensic-analysis-of-lnk-files/
- Liste de sauts pour l'investigation 2025 : https://www.cybertriage.com/blog/jump-list-forensics-2025/
- LECmd/JLECmd d'Eric Zimmerman : https://ericzimmerman.github.io/
Exemple de sortie
$ LECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent" --csv /analysis/lnk_output
LECmd v1.11.0 - Analyseur de fichiers LNK
================================
Traitement de 47 fichiers LNK...
--- Fichier LNK : Q4_Report.xlsx.lnk ---
Source : C:\Evidence\Users\jsmith\Recent\Q4_Report.xlsx.lnk
Chemin cible : C:\Users\jsmith\Downloads\Q4_Report.xlsm
Création cible : 2024-01-15 14:33:45 UTC
Modification cible : 2024-01-15 14:33:45 UTC
Accès cible : 2024-01-15 14:35:12 UTC
Taille du fichier : 251 904 octets
Type de lecteur : Fixe (C:)
Série du volume : A4E7-3F21
ID machine : DESKTOP-J5M1TH
Adresse MAC : 48:2A:E3:5C:9B:01
--- Fichier LNK : update_client.exe.lnk ---
Source : C:\Evidence\Users\jsmith\Recent\update_client.exe.lnk
Chemin cible : C:\ProgramData\Updates\update_client.exe
Création cible : 2024-01-15 14:34:02 UTC
Modification cible : 2024-01-15 14:34:02 UTC
Accès cible : 2024-01-15 14:36:30 UTC
Taille du fichier : 1 258 496 octets
Type de lecteur : Fixe (C:)
Série du volume : A4E7-3F21
ID machine : DESKTOP-J5M1TH
Répertoire de travail : C:\ProgramData\Updates
Arguments : --silent --no-update-check
Fenêtre d'exécution : Masquée
======================================================================
$ JLECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv /analysis/jumplist_output
JLECmd v1.5.0 - Analyseur de listes de sauts
==================================
Traitement de 23 fichiers AutomaticDestinations...
--- Application : Microsoft Excel (AppID : 12dc1ea8e34b5a6) ---
Entrées : 15
Plus récentes :
Entrée 0 : C:\Users\jsmith\Downloads\Q4_Report.xlsm (2024-01-15 14:35:12 UTC)
Entrée 1 : \\FILESERV01\Finance\Budget_2024.xlsx (2024-01-14 09:22:30 UTC)
Entrée 2 : C:\Users\jsmith\Documents\Expenses\Dec2023.xlsx (2024-01-10 16:45:00 UTC)
--- Application : Explorateur Windows (AppID : f01b4d95cf55d32a) ---
Entrées : 28
Plus récentes :
Entrée 0 : C:\ProgramData\Updates\ (2024-01-15 14:36:25 UTC)
Entrée 1 : E:\Backup\ (2024-01-15 15:30:00 UTC)
Entrée 2 : \\FILESERV01\HR\Employees\ (2024-01-15 16:12:45 UTC)
--- Application : cmd.exe (AppID : 9b9cdc69c1c24e2b) ---
Entrées : 5
Plus récentes :
Entrée 0 : C:\Windows\System32\cmd.exe (2024-01-15 14:36:00 UTC)
Résumé :
Nombre total de fichiers LNK traités : 47
Nombre total d'entrées de listes de sauts : 156
Artefacts suspects : 3 (exécution en fenêtre masquée, accès à un lecteur USB, partages réseau)
CSV exporté vers : /analysis/lnk_output/ et /analysis/jumplist_output/