Chapitre 00

Fondations - Architecture,
Modèle de Sécurité & Lab

Comprendre pourquoi Windows fonctionne comme il fonctionne avant de l'attaquer ou le défendre. Protection Rings, Access Token / Security Descriptor / SRM, processus critiques, mise en place d'un environnement complet.

DÉBUTANT DÉFENSIF 2 – 3h
0.1

Présentation du Cours

Ce cours s'adresse aux profils hybrides - ceux qui refusent d'être soit uniquement offensifs, soit uniquement défensifs. Un bon pentester doit comprendre ce qu'un SOC voit. Un bon analyste SOC doit comprendre comment un attaquant pense. Chaque chapitre est traité sous les deux angles simultanément.

Structure pédagogique
Progression du cours - Débutant vers Avancé
Chap 0, 1
Setup & Bases
Chap 2 – 6
Système Windows
Chap 7 – 12
Attaques & AD
Côté Offensif
Attaque

Énumérer, persister, escalader de privilèges, dumper des credentials depuis SAM/LSASS/DPAPI, forger des tickets Kerberos, attaquer un Active Directory.

Côté Défensif
Détection SOC

Détecter ces actions via les Event IDs Windows, Sysmon, les outils Sysinternals, la forensics PowerShell et l'analyse comportementale.

0.2

Architecture Windows - Vue d'ensemble

Les processeurs x86/x64 implémentent un modèle de niveaux de privilège matériels appelés Protection Rings. Windows n'en utilise que deux sur quatre - pour garantir la portabilité entre architectures (ARM, MIPS…).

Protection Rings - Vue mémoire simplifiée
RING −1 (VMX)
Hyperviseur - Hyper-V, VBS, Credential Guard
RING −1
transition hyperviseur
RING 0 - KERNEL MODE
Noyau Windows (ntoskrnl.exe) · Drivers · HAL · Accès total RAM/CPU
BSOD SI CRASH
RING 1 & 2
Non utilisés par Windows (portabilité)
INUTILISÉS
syscall / sysenter
RING 3 - USER MODE
Applications · PowerShell · Services · Malwares · Mémoire VAS privée
CRASH ISOLÉ
Comparatif User Mode / Kernel Mode
CritèreUser Mode (Ring 3)Kernel Mode (Ring 0)
Accès mémoireLimité à l'espace VAS du processusAccès total - RAM physique incluse
Instructions CPURestreintes (pas RDMSR, WRMSR…)Toutes disponibles
CrashLe processus meurt, l'OS survitBSOD - crash total du système
Exemplespowershell.exe, notepad.exe, malwaresntoskrnl.exe, drivers, LSASS
TransitionVia System Call (syscall/sysenter)Direct
Offensif

L'escalade classique (NT AUTHORITY\SYSTEM) reste en Ring 3. Pour aller plus loin - rootkits, bypass PPL, Kernel Patch Guard - il faut passer en Ring 0, ce qui nécessite un driver signé ou une vulnérabilité kernel.

Défensif

Les BSOD soudains et répétés sont un signal d'alerte. Un driver malveillant peut déclencher ce comportement. Le crashdump MEMORY.DMP est analysable avec WinDbg.

Flux d'appel système - de l'application au kernel
Comment un programme "demande" quelque chose au kernel
Application Ring 3 - appelle CreateFile(), ReadProcessMemory()
Win32 API (kernel32.dll, ntdll.dll) - traduit en appel NT natif
System Call (instruction syscall) - transition Ring 3 → Ring 0
NTOSKRNL.EXE (Ring 0) - exécute la demande et retourne le résultat
Important

Mimikatz, ProcDump, et la majorité des outils offensifs passent tous par cette interface. C'est pourquoi les EDR hookent ntdll.dll et surveillent ces appels système.

0.3

Le Modèle de Sécurité Windows

Windows base toute décision d'accès sur trois éléments interagissant à chaque accès à une ressource. Comprendre ce triangle est indispensable pour analyser les misconfigurations ACL, le token impersonation, et les bypasses UAC.

Les trois piliers - Access Token · Security Descriptor · SRM
Interactions lors d'une demande d'accès
Access Token
  • SID utilisateur
  • SID des groupes
  • Privilèges (SeDebug…)
  • Integrity Level
  • Logon SID

"Carte d'identité" du processus

compare
SRM - juge kernel
  • Parcourt la DACL
  • Deny avant Allow
  • Vérifie Integrity Level
  • Génère Event IDs (SACL)

Ring 0 - incontournable

lit
Security Descriptor
  • Owner SID
  • DACL - qui peut quoi
  • SACL - quoi auditer
  • ACEs Allow / Deny

"Règlement" de l'objet

Inspecter son propre tokenPOWERSHELL
# Token complet du processus courant whoami /all # USER INFORMATION → SID utilisateur # GROUP INFORMATION → SIDs groupes (Enabled/Disabled/Mandatory) # PRIVILEGES → SeDebugPrivilege, SeImpersonatePrivilege… # Vérifier l'Integrity Level whoami /groups | findstr "Mandatory" # Lire le Security Descriptor d'un fichier Get-Acl -Path "C:\Windows\System32\lsass.exe" | Format-List # SDDL brut (Get-Acl -Path "C:\Windows\System32").Sddl
Offensif

Le Token Impersonation / Theft (Chapitres 9 & 10) consiste à voler le token d'un processus plus privilégié pour hériter de ses droits - sans son mot de passe. C'est token::elevate dans Mimikatz.

Défensif

La SACL est l'outil d'audit. Sans elle, aucun Event ID d'accès fichier ne sera généré. Configurer une SACL sur SAM, NTDS.dit, lsass.exe est essentiel pour détecter les credential dumps.

Integrity Levels - Mandatory Integrity Control

Un processus ne peut pas écrire vers un objet de niveau supérieur, même si la DACL l'y autorise.

System
0x4000
SYSTEM, kernel - cible finale de l'escalade
High
0x3000
Processus élevés via UAC - administrateurs
Medium
0x2000
Utilisateurs standard - niveau par défaut
Low
0x1000
IE Protected Mode, sandboxes navigateur
Untrusted
0x0000
Processus à très faible confiance
0.4

Composants Windows Clés

Processus système fondamentaux
ProcessusRôleImportance SOC
System (PID 4)Thread kernel de base - Ring 0PPID de la majorité des processus kernel
smss.exeSession Manager - 1er processus User ModeLance winlogon, csrss
csrss.exeClient/Server Runtime - sous-système Win32Une instance par session
winlogon.exeGère la séquence de logon, SASCharge le profil, lance explorer.exe
lsass.exeLocal Security Authority SubsystemStocke hashes & tickets Kerberos - cible de dump
services.exeService Control ManagerLance et gère tous les services Windows
svchost.exeHôte générique de servicesPlusieurs instances - une par groupe
Arbre des processus avec PPIDsPOWERSHELL
# Arbre complet avec chemins et PPIDs Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId, Name, ExecutablePath | Sort-Object ProcessId | Format-Table -AutoSize # Vérifier le PPID de lsass.exe (doit être wininit.exe) Get-CimInstance Win32_Process -Filter "Name='lsass.exe'" | Select-Object ProcessId, ParentProcessId, Name
Offensif

lsass.exe est la cible principale du Chapitre 9. Ses credentials en mémoire (hashes NT, tickets Kerberos, parfois mots de passe en clair via WDigest) sont le trésor ultime du post-exploitation.

Défensif

Un lsass.exe avec PPID différent de wininit.exe est un red flag critique - Process Spoofing. Sysmon Event ID 10 avec TargetImage = lsass.exe est l'indicateur principal de credential dumping.

La triade des credentials - SAM / SYSTEM / SECURITY
FichierContenuRegistre
SAMHashes NT des comptes locaux (chiffrés par SYSKEY)HKLM\SAM
SYSTEMContient le SYSKEY - clé pour déchiffrer SAMHKLM\SYSTEM
SECURITYCache Kerberos, DCC1/DCC2, LSA secretsHKLM\SECURITY
Note

Ces fichiers sont verrouillés par le kernel en temps réel. Les VSS (Volume Shadow Copies) ou reg save permettent de les extraire. C'est l'objet du Chapitre 8.

0.5

Setup du Lab - Environnement de Travail

Isolement réseau obligatoire

Utiliser exclusivement un réseau Host-Only. Ni la VM cible ni Kali n'ont accès à Internet. Ne jamais exécuter ces outils sans autorisation explicite.

VM Cible
Windows 10 / 11
  • 2 cores, 4–6 Go RAM, 60 Go disque
  • Windows 10/11 Pro ou Entreprise
  • Compte administrateur local activé
  • Defender désactivable pour les TPs
VM Attaquant
Kali Linux
  • 2 cores, 4 Go RAM, 40 Go disque
  • Kali Linux (OVA prête à l'emploi)
  • Impacket, NetExec, Responder préinstallés
  • Wireshark pour capture réseau
Configuration initiale - VM Windows
Setup Windows - PowerShell AdminPOWERSHELL
# 1. Désactiver Windows Update Set-Service -Name wuauserv -StartupType Disabled Stop-Service -Name wuauserv # 2. Activer WinRM (chapitres 2, 3, 5) Enable-PSRemoting -Force Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force # 3. Activer l'audit de sécurité complet auditpol /set /category:* /success:enable /failure:enable # 4. Désactiver Defender (lab isolé uniquement) Set-MpPreference -DisableRealtimeMonitoring $true Set-MpPreference -SubmitSamplesConsent 2 Set-MpPreference -MAPSReporting 0 # 5. Désactiver le pare-feu Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False # 6. Créer l'arborescence des outils New-Item -ItemType Directory -Path C:\Tools\{Sysinternals,mimikatz,hashcat}
Configuration initiale - Kali Linux
Setup Kali - BashBASH
sudo apt update && sudo apt full-upgrade -y pip3 install impacket sudo apt install netexec responder hashcat wireshark
Outils Windows - Sysinternals & Mimikatz
Autoruns
Sysinternals · Microsoft
Persistance registre - Chapitre 4.
ProcDump64
Sysinternals · Microsoft
Dump mémoire de processus - Chapitre 9.
PsExec64
Sysinternals · Microsoft
Exécution distante, escalade SYSTEM - Chapitre 10.
AccessChk
Sysinternals · Microsoft
Audit des ACLs de services - Chapitre 11.
Mimikatz
Benjamin Delpy · Open Source
Credential dumping LSASS/SAM/DPAPI - Chapitres 8, 9.
Impacket
Fortra · Python
Protocoles Windows : SMB, Kerberos, MSRPC.
NetExec
Communauté · Python
Énumération réseau à grande échelle.
Responder
lgandx · Python
Hash capture NTLM / LLMNR poisoning - Chapitre 7.
0.6

Sysmon - Déployer la Télémétrie

Sysmon (System Monitor) enrichit les logs Windows avec des Event IDs avancés - accès inter-processus, connexions réseau par processus, hashes des exécutables. L'outil de télémétrie défensive le plus utilisé en entreprise.

Event ID SysmonDescriptionChapitres
1Process Create - hash, PPID, ligne de commande complète3, 9, 10, 11
3Network Connection - processus source et destination6, 7
7Image Loaded - DLL chargée dans un processus9
10Process Access - accès à un autre processus (LSASS dump)9
11File Create - création de fichier5, 8
12/13Registry Create / Value Set4
22DNS Query - par processus7
Installation SysmonPOWERSHELL
# Config SwiftOnSecurity - https://github.com/SwiftOnSecurity/sysmon-config .\Sysmon64.exe -accepteula -i sysmonconfig-export.xml Get-Service Sysmon64 # Status = Running attendu # Requêter les events Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 20 | Select-Object TimeCreated, Id, Message | Format-List
0.7

Event IDs Windows - Référence Globale

Security Log
Event IDCatégorieDescriptionChap.
4624LogonConnexion réussie1
4625LogonÉchec de connexion1
4648LogonConnexion avec credentials explicites8
4656Object AccessDemande d'ouverture d'un handle objet8, 9
4657RegistryModification d'une valeur de registre4
4663Object AccessAccès à un objet fichier ou registre5, 8
4672LogonPrivilèges spéciaux assignés à une session10
4697ServiceService installé11
4720AccountCompte utilisateur créé1
4732GroupMembre ajouté à un groupe local1
4768KerberosTGT demandé (AS_REQ)12
4769KerberosTGS demandé12
4771KerberosPré-authentification Kerberos échouée12
PowerShell / System / Sysmon
Event IDLogDescriptionChap.
4103PS/OperationalModule Logging - cmdlets exécutés2
4104PS/OperationalScript Block Logging - contenu du script2
7045SystemNouveau service installé11
1SysmonProcess Create avec hash et cmdline3, 9, 10
10SysmonProcessAccess - accès à lsass.exe9
13SysmonRegistry Value Set4
Template universel de requête Event IDPOWERSHELL
function Get-SecurityEvent { param([int]$EventId, [int]$Hours = 24) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = $EventId StartTime = (Get-Date).AddHours(-$Hours) } -ErrorAction SilentlyContinue | Select-Object TimeCreated, Id, @{N='Message';E={$_.Message.Substring(0,[Math]::Min(200,$_.Message.Length))}} } Get-SecurityEvent -EventId 4720 -Hours 48 # Comptes créés dans les 48h Get-SecurityEvent -EventId 4732 -Hours 24 # Ajouts à des groupes Get-SecurityEvent -EventId 4104 -Hours 1 # Scripts PowerShell exécutés
0.8

Conventions & Bonnes Pratiques

Conventions de notation - CSS shapes, pas d'emoji
OffensifPerspective attaquant, exploitation
DéfensifPerspective SOC/analyste, détection
AttentionPoint critique, erreur fréquente
AstuceRaccourci ou technique avancée
NoteInformation complémentaire
Structure type d'un exercice
Séquence standard - chaque TP suit ce schéma
1 · Snapshot VM avant l'exercice
2 · Action offensive (ex: dump credentials)
3 · Analyse des logs générés (Event IDs, Sysmon)
4 · Remédiation - correction de la configuration vulnérable
5 · Restauration ou nouveau snapshot propre
Règles fondamentales

À faire : réseau Host-Only isolé · snapshots avant chaque exercice · documenter chaque commande · analyser les Event IDs après chaque action offensive.

À ne jamais faire : exécuter ces outils sans autorisation · connecter la VM à Internet avec Defender désactivé · utiliser des credentials de lab sur des systèmes réels.

TP

Exercice 0 - Vérification du Lab

TP 00 Vérification complète de l'environnement DÉBUTANT
Objectifs
  1. Vérifier la version PowerShell (requis ≥ 5.1)
  2. Confirmer que WinRM est actif et répond
  3. Vérifier l'installation de Sysmon
  4. Confirmer que l'audit de sécurité est activé
  5. Tester la connectivité réseau entre Windows et Kali (port 445)
  6. Valider que C:\Tools\Sysinternals est accessible
  7. Générer un rapport de santé de l'environnement
VM WindowsPOWERSHELL
# CHECK 1 - Version PowerShell $PSVersionTable.PSVersion # Attendu : Major ≥ 5 # CHECK 2 - WinRM actif Test-WSMan -ComputerName localhost # Attendu : réponse XML # Si WinRM n'est pas actif : Enable-PSRemoting -Force
Sysmon + AuditPOWERSHELL
# CHECK 3 - Sysmon actif Get-Service Sysmon64 -ErrorAction SilentlyContinue # CHECK 4 - Audit activé auditpol /get /category:"Account Management" auditpol /set /category:* /success:enable /failure:enable
Rapport completPOWERSHELL
# CHECK 5 - Réseau Kali Test-NetConnection -ComputerName "<IP_KALI>" -Port 445 # RAPPORT DE SANTÉ $checks = @{ "PowerShell >= 5.1" = ($PSVersionTable.PSVersion.Major -ge 5) "WinRM actif" = ((Get-Service WinRM).Status -eq "Running") "Sysmon actif" = ((Get-Service Sysmon64 -EA SilentlyContinue)?.Status -eq "Running") "C:\Tools existe" = (Test-Path "C:\Tools") "Defender désactivé" = ((Get-MpPreference).DisableRealtimeMonitoring) } $checks.GetEnumerator() | ForEach-Object { $ok = if ($_.Value) { "[OK]" } else { "[!!]" } Write-Host "$ok $($_.Key)" }
Depuis Kali - vérifier SMBBASH
nmap -p 445 <IP_WINDOWS> impacket-smbclient "WORKGROUP/Administrator:MotDePasse"@<IP_WINDOWS>
Validation

Le lab est opérationnel si tous les checks retournent [OK], Test-WSMan répond sans erreur, et nmap -p 445 retourne open. Tu es prêt pour le Chapitre 1.

Ce qu'il faut retenir

Pilier 1
Access Token

Carte d'identité d'un processus (SIDs + Privilèges + Integrity Level). Cible du token theft.

Pilier 2
Security Descriptor

DACL/SACL attaché à chaque objet. Cible des attaques d'ACL misconfiguration.

Pilier 3
SRM (Security Reference Monitor)

Le juge kernel Ring 0 qui compare Token et Descriptor. Incontournable sans Ring 0.

  • Expliquer la différence entre User Mode (Ring 3) et Kernel Mode (Ring 0)
  • Comprendre pourquoi NT AUTHORITY\SYSTEM reste en Ring 3
  • Décrire les 3 composants du modèle de sécurité Windows
  • Identifier les Integrity Levels et leur règle d'écriture ascendante
  • Connaître les 7 processus système critiques et leurs PPIDs légitimes
  • Mettre en place un lab isolé (deux VMs en réseau Host-Only)
  • Installer et configurer Sysmon avec la config SwiftOnSecurity
  • Activer l'audit de sécurité complet via auditpol
  • Utiliser le template Get-SecurityEvent pour requêter les Event IDs