<p>Bonjour,</p>
<p>La découverte de <strong>“cadavres dans le placard”</strong> après un incident de sécurité — expression qui désigne la mise au jour de vulnérabilités, de configurations défaillantes, d’accès orphelins ou de compromissions passées non détectées — est malheureusement une réalité très courante lors des investigations post-incident. Cette situation révèle souvent que l’incident visible n’était que la partie émergée de l’iceberg. Voici une méthodologie complète pour traiter ces découvertes et renforcer durablement votre posture de sécurité.</p>
<hr>
<h2><a name="p-34571-comprendre-ce-que-cachent-les-cadavres-dans-le-placard-1" class="anchor" href="#p-34571-comprendre-ce-que-cachent-les-cadavres-dans-le-placard-1" aria-label="Heading link"></a>Comprendre ce que cachent les “cadavres dans le placard”</h2>
<h3><a name="p-34571-les-dcouvertes-les-plus-frquentes-lors-des-investigations-post-incident-2" class="anchor" href="#p-34571-les-dcouvertes-les-plus-frquentes-lors-des-investigations-post-incident-2" aria-label="Heading link"></a>Les découvertes les plus fréquentes lors des investigations post-incident</h3>
<div class="md-table">
<table>
<thead>
<tr>
<th>Type de découverte</th>
<th>Fréquence</th>
<th>Risque résiduel</th>
</tr>
</thead>
<tbody>
<tr>
<td>Comptes utilisateurs anciens non désactivés</td>
<td>Très fréquent</td>
<td>Élevé — vecteur d’intrusion</td>
</tr>
<tr>
<td>Mots de passe partagés ou identiques entre comptes</td>
<td>Très fréquent</td>
<td>Très élevé</td>
</tr>
<tr>
<td>Accès administrateurs non documentés</td>
<td>Fréquent</td>
<td>Critique</td>
</tr>
<tr>
<td>Applications non patchées depuis des mois/années</td>
<td>Fréquent</td>
<td>Élevé</td>
</tr>
<tr>
<td>Données sensibles non chiffrées sur des partages réseau</td>
<td>Fréquent</td>
<td>Élevé</td>
</tr>
<tr>
<td>Connexions RDP exposées directement sur Internet</td>
<td>Fréquent</td>
<td>Critique</td>
</tr>
<tr>
<td>Règles de pare-feu obsolètes autorisant des flux non nécessaires</td>
<td>Fréquent</td>
<td>Moyen à élevé</td>
</tr>
<tr>
<td>Journaux d’audit désactivés ou insuffisants</td>
<td>Très fréquent</td>
<td>Bloque l’investigation</td>
</tr>
<tr>
<td>Sauvegardes non testées ou non fonctionnelles</td>
<td>Fréquent</td>
<td>Critique en cas de ransomware</td>
</tr>
<tr>
<td>Comptes de service avec des droits administrateur excessifs</td>
<td>Fréquent</td>
<td>Critique</td>
</tr>
</tbody>
</table>
</div><hr>
<h2><a name="p-34571-phase-1-containment-et-investigation-immdiate-3" class="anchor" href="#p-34571-phase-1-containment-et-investigation-immdiate-3" aria-label="Heading link"></a>Phase 1 : Containment et investigation immédiate</h2>
<h3><a name="p-34571-isoler-les-systmes-compromis-sans-dtruire-les-preuves-4" class="anchor" href="#p-34571-isoler-les-systmes-compromis-sans-dtruire-les-preuves-4" aria-label="Heading link"></a>Isoler les systèmes compromis sans détruire les preuves</h3>
<p>La première priorité est de <strong>stopper la propagation</strong> sans effacer les traces qui permettront de comprendre l’étendue de la compromission.</p>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Isoler immédiatement une machine compromise du réseau via PowerShell
(à exécuter sur la machine ou via remote management si encore accessible)
Bloquer toutes les connexions réseau sortantes sauf vers les serveurs de gestion
New-NetFirewallRule -DisplayName "ISOLATION-BLOC-TOUT" -Direction Outbound -Action Block -Enabled True -Profile Any
Lister toutes les connexions réseau actives (à faire AVANT isolation pour documentation)
Get-NetTCPConnection -State Established | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess |
ForEach-Object {
$proc = Get-Process -Id $.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
LocalAddress = $.LocalAddress
LocalPort = $.LocalPort
RemoteAddress = $.RemoteAddress
RemotePort = $.RemotePort
ProcessName = $proc.Name
ProcessPath = $proc.Path
}
} | Format-Table -AutoSize
</code></pre>
<h3><a name="p-34571-prserver-les-preuves-numriques-5" class="anchor" href="#p-34571-prserver-les-preuves-numriques-5" aria-label="Heading link"></a>Préserver les preuves numériques</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Capturer la liste des processus en cours (avant tout redémarrage)
Get-Process | Select-Object Id, Name, CPU, WorkingSet, Path, StartTime |
Export-Csv "C:\investigation\processes$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
Capturer les connexions réseau actives
Get-NetTCPConnection | Export-Csv "C:\investigation\network_connections_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
Capturer les tâches planifiées (souvent utilisées pour la persistance)
Get-ScheduledTask | Where-Object {$.State -eq "Ready"} |
Select-Object TaskName, TaskPath, @{N='Actions';E={$.Actions.Execute}} |
Export-Csv "C:\investigation\scheduled_tasks_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
Capturer les services Windows (vecteur de persistance courant)
Get-Service | Select-Object Name, DisplayName, Status, StartType |
Export-Csv "C:\investigation\services_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
</code></pre>
<hr>
<h2><a name="p-34571-phase-2-audit-des-accs-et-des-comptes-nettoyer-les-cadavres-6" class="anchor" href="#p-34571-phase-2-audit-des-accs-et-des-comptes-nettoyer-les-cadavres-6" aria-label="Heading link"></a>Phase 2 : Audit des accès et des comptes — Nettoyer les cadavres</h2>
<h3><a name="p-34571-identifier-et-dsactiver-les-comptes-orphelins-7" class="anchor" href="#p-34571-identifier-et-dsactiver-les-comptes-orphelins-7" aria-label="Heading link"></a>Identifier et désactiver les comptes orphelins</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Se connecter à Active Directory
Import-Module ActiveDirectory
Trouver les comptes utilisateurs inactifs depuis plus de 90 jours
$date90 = (Get-Date).AddDays(-90)
Search-ADAccount -AccountInactive -DateTime $date90 -UsersOnly |
Select-Object SamAccountName, DisplayName, LastLogonDate, Enabled |
Export-Csv "C:\audit\comptes_inactifs.csv" -NoTypeInformation
Trouver les comptes jamais connectés
Get-ADUser -Filter {LastLogonDate -notlike "*" -and Enabled -eq $true} `
-Properties LastLogonDate, WhenCreated |
Select-Object SamAccountName, DisplayName, WhenCreated |
Export-Csv "C:\audit\comptes_jamais_connectes.csv" -NoTypeInformation
Trouver les membres du groupe Domain Admins (souvent surchargé)
Get-ADGroupMember "Domain Admins" -Recursive |
Select-Object Name, SamAccountName, objectClass |
Export-Csv "C:\audit\admins_domaine.csv" -NoTypeInformation
Désactiver en masse les comptes inactifs (après validation)
Search-ADAccount -AccountInactive -DateTime $date90 -UsersOnly |
Disable-ADAccount -WhatIf # Retirez -WhatIf pour exécuter réellement
</code></pre>
<h3><a name="p-34571-audit-des-comptes-de-service-8" class="anchor" href="#p-34571-audit-des-comptes-de-service-8" aria-label="Heading link"></a>Audit des comptes de service</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Identifier les comptes de service (souvent avec des mots de passe qui n'expirent jamais)
Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpires, LastLogonDate, MemberOf |
Select-Object SamAccountName, PasswordNeverExpires, LastLogonDate |
Export-Csv "C:\audit\comptes_mdp_sans_expiration.csv" -NoTypeInformation
Vérifier les droits excessifs des comptes de service
Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName, MemberOf |
ForEach-Object {
$user = $_
$groups = $user.MemberOf | ForEach-Object { (Get-ADGroup $_).Name }
[PSCustomObject]@{
Account = $user.SamAccountName
SPN = $user.ServicePrincipalName -join "; "
Groups = $groups -join "; "
}
} | Export-Csv "C:\audit\comptes_service_spn.csv" -NoTypeInformation
</code></pre>
<hr>
<h2><a name="p-34571-phase-3-audit-des-vulnrabilits-dcouvertes-9" class="anchor" href="#p-34571-phase-3-audit-des-vulnrabilits-dcouvertes-9" aria-label="Heading link"></a>Phase 3 : Audit des vulnérabilités découvertes</h2>
<h3><a name="p-34571-vrifier-les-mises-jour-manquantes-10" class="anchor" href="#p-34571-vrifier-les-mises-jour-manquantes-10" aria-label="Heading link"></a>Vérifier les mises à jour manquantes</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Lister les mises à jour Windows manquantes (via PSWindowsUpdate)
Install-Module -Name PSWindowsUpdate -Force -SkipPublisherCheck
Import-Module PSWindowsUpdate
Get-WUList | Select-Object KB, Size, Title | Format-Table -AutoSize
Via WSUS ou via l'API Windows Update directement
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updateSearcher = $updateSession.CreateUpdateSearcher()
$searchResult = $updateSearcher.Search("IsInstalled=0 and Type='Software'")
$searchResult.Updates | Select-Object Title, MsrcSeverity | Format-Table -AutoSize
</code></pre>
<h3><a name="p-34571-audit-des-partages-rseau-exposs-11" class="anchor" href="#p-34571-audit-des-partages-rseau-exposs-11" aria-label="Heading link"></a>Audit des partages réseau exposés</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Lister tous les partages réseau du serveur
Get-SmbShare | Select-Object Name, Path, Description | Format-Table -AutoSize
Vérifier les permissions de chaque partage
Get-SmbShareAccess | Select-Object Name, AccountName, AccessControlType, AccessRight | Format-Table -AutoSize
Identifier les partages avec accès "Tout le monde" ou "Everyone"
Get-SmbShareAccess | Where-Object {$.AccountName -like "Everyone" -or $.AccountName -like "Tout le monde"} |
Format-Table -AutoSize
</code></pre>
<hr>
<h2><a name="p-34571-phase-4-renforcement-post-incident-hardening-12" class="anchor" href="#p-34571-phase-4-renforcement-post-incident-hardening-12" aria-label="Heading link"></a>Phase 4 : Renforcement post-incident (Hardening)</h2>
<h3><a name="p-34571-actions-prioritaires-13" class="anchor" href="#p-34571-actions-prioritaires-13" aria-label="Heading link"></a>Actions prioritaires</h3>
<ol>
<li><strong>Réinitialiser le mot de passe du compte KRBTGT</strong> (si compromission d’Active Directory suspectée) — à faire deux fois avec 10 heures d’intervalle</li>
<li><strong>Activer la journalisation avancée</strong> sur tous les systèmes critiques</li>
<li><strong>Déployer Microsoft Defender for Identity</strong> pour détecter les attaques latérales futures</li>
<li><strong>Mettre en place le principe du moindre privilège</strong> — revue de tous les accès administrateurs</li>
</ol>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Activer l'audit avancé des connexions dans la Stratégie de Groupe
(Connexions/déconnexions, accès aux objets, gestion des comptes)
auditpol /set /category:"Account Logon" /success:enable /failure:enable
auditpol /set /category:"Account Management" /success:enable /failure:enable
auditpol /set /category:"Logon/Logoff" /success:enable /failure:enable
auditpol /set /category:"Object Access" /success:enable /failure:enable
auditpol /set /category:"Privilege Use" /success:enable /failure:enable
Vérifier la configuration d'audit actuelle
auditpol /get /category:*
</code></pre>
<hr>
<h2><a name="p-34571-phase-5-signalement-et-conformit-14" class="anchor" href="#p-34571-phase-5-signalement-et-conformit-14" aria-label="Heading link"></a>Phase 5 : Signalement et conformité</h2>
<p>Si des données personnelles ont été compromises, le <strong>RGPD</strong> impose des obligations :</p>
<ul>
<li><strong>Notification à la CNIL</strong> dans les <strong>72 heures</strong> suivant la découverte (article 33 RGPD)</li>
<li><strong>Notification aux personnes concernées</strong> si le risque pour leurs droits est élevé (article 34 RGPD)</li>
<li>Plateforme de signalement : <a href="https://www.cybermalveillance.gouv.fr/">cybermalveillance.gouv.fr</a></li>
<li>Dépôt de plainte : <a href="https://www.thesee.interieur.gouv.fr/">thesee.interieur.gouv.fr</a> (pour les incidents cyber)</li>
</ul>
<p>Un incident de sécurité révèle presque toujours des défaillances accumulées. L’objectif n’est pas de chercher des coupables mais de mettre en place des processus pérennes pour éviter la récurrence.</p>
<hr>
<p><em>Ayi NEDJIMI — Consultant IT & Cybersécurité Microsoft</em><br>
<em>Pour un audit post-incident, un plan de remédiation ou la mise en place d’une supervision de sécurité (SIEM/SOC) : <a href="https://ayinedjimi-consultants.fr">ayinedjimi-consultants.fr</a></em></p>