Lab 10.2: Exploitation des Services IPC
Objectifs d'Apprentissage
A la fin de ce laboratoire, vous serez capable de:
- Comprendre les vulnerabilites liees aux IPC Windows
- Identifier les services IPC mal configures
- Comprendre les attaques de type "Potato"
- Analyser les risques d'impersonation de token
- Mettre en place des defenses appropriees
Duree Estimee
50 minutes
Prerequis
- Lab 10.1 complete
- VM Windows 10/11
- Droits administrateur
- Connaissances de base sur les tokens Windows
Contexte Professionnel
Les vulnerabilites IPC sont exploitees dans:
- 70% des escalades de privileges Windows
- Attaques de type Potato (JuicyPotato, PrintSpoofer, etc.)
- Lateral movement en environnement Active Directory
- Malwares avances et APT
AVERTISSEMENT ETHIQUE ET LEGAL
Ce lab est strictement educatif.
Les techniques presentees sont utilisees par:
- Pentesters lors de tests autorises
- Red Teams pour simulations d'attaques
- Equipes de securite pour comprendre les menaces
INTERDIT sans autorisation explicite:
- Sur des systemes de production
- Sur des machines qui ne vous appartiennent pas
- A des fins malveillantes
Partie 1: Comprendre les Tokens Windows
Etape 1.1: Types de tokens
Windows utilise des tokens pour gerer l'identite et les privileges:
| Type | Description | Utilisation |
|---|---|---|
| Primary Token | Token principal du processus | Identite du processus |
| Impersonation Token | Token temporaire | Agir au nom d'un autre utilisateur |
Niveaux d'impersonation:
SecurityAnonymous: Pas d'information sur le clientSecurityIdentification: Peut identifier mais pas agirSecurityImpersonation: Peut agir localementSecurityDelegation: Peut agir sur le reseau
Etape 1.2: Voir votre token actuel
# Informations sur le token actuel
whoami /all
# Privileges du token
whoami /priv
Questions:
- Quels privileges avez-vous?
- Le privilege
SeImpersonatePrivilegeest-il present?
Etape 1.3: Qui a SeImpersonatePrivilege?
Par defaut, ce privilege est accorde a:
LOCAL SERVICENETWORK SERVICEAdministrators- Services Windows
# Verifier si vous avez le privilege
(whoami /priv) | Select-String "SeImpersonate"
Partie 2: Vulnerabilite d'Impersonation via Pipes
Etape 2.1: Le concept de l'attaque
1. Attaquant cree un named pipe avec permissions faibles
2. Un processus privilegie (SYSTEM) se connecte au pipe
3. L'attaquant "impersonne" le token SYSTEM
4. L'attaquant execute du code en tant que SYSTEM
Etape 2.2: Conditions necessaires
Pour exploiter cette vulnerabilite:
- Avoir
SeImpersonatePrivilegeouSeAssignPrimaryTokenPrivilege - Pouvoir creer un named pipe
- Pouvoir forcer un processus privilegie a s'y connecter
Etape 2.3: Services vulnerables historiques
| Service | Vulnerabilite | CVE |
|---|---|---|
| Print Spooler | SpoolFool, PrintNightmare | CVE-2021-1675 |
| BITS | Token impersonation | Multiple |
| WMI | DCOM activation | Multiple |
| MSDTC | Token impersonation | Multiple |
Partie 3: Famille d'Attaques "Potato"
Etape 3.1: Vue d'ensemble
Les attaques "Potato" exploitent les IPC pour l'escalade de privileges:
| Nom | Annee | Methode |
|---|---|---|
| Hot Potato | 2016 | NBNS + WPAD spoofing |
| Rotten Potato | 2016 | DCOM + NTLM relay |
| Juicy Potato | 2018 | DCOM CLSID abuse |
| Rogue Potato | 2020 | Fake OXID resolver |
| Sweet Potato | 2020 | Combinaison techniques |
| PrintSpoofer | 2020 | Print Spooler pipe |
| GodPotato | 2022 | Nouvelle technique DCOM |
Etape 3.2: Fonctionnement general
[Service avec SeImpersonate]
|
v
[Cree un pipe ou listener]
|
v
[Force SYSTEM a se connecter via DCOM/Spooler/etc.]
|
v
[Capture le token SYSTEM]
|
v
[Execute commande en tant que SYSTEM]
Etape 3.3: PrintSpoofer - Exemple conceptuel
PrintSpoofer exploite le service Print Spooler:
- Le spooler a une fonctionnalite qui se connecte a des pipes
- On cree un pipe avec un nom specifique
- On declenche la connexion du spooler
- On impersonne le token SYSTEM du spooler
Note: Nous n'executons pas l'exploit, mais comprenons le mecanisme.
Partie 4: Detection des Attaques IPC
Etape 4.1: Indicateurs de compromission (IOC)
Pipes suspects:
# Rechercher des pipes avec des noms inhabituels
Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -match "(spoof|potato|pipe[0-9]|test)"
}
Processus suspects:
# Processus avec SeImpersonatePrivilege qui ne devraient pas l'avoir
Get-Process | ForEach-Object {
$proc = $_
try {
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()
# Analyse des privileges...
} catch {}
}
Etape 4.2: Events Sysmon
# Event ID 17: Pipe Created
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Sysmon/Operational'
ID = 17
} -MaxEvents 50 | Where-Object {
$_.Message -match "(spoof|potato)"
} | Format-Table TimeCreated, Message -Wrap
# Event ID 18: Pipe Connected
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Sysmon/Operational'
ID = 18
} -MaxEvents 50 | Format-Table TimeCreated, Message -Wrap
Etape 4.3: Events Security Log
# Event ID 4688: Process Creation avec impersonation
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4688
} -MaxEvents 100 | Where-Object {
$_.Message -match "Impersonation"
}
Questions: 3. Quels evenements avez-vous trouve? 4. Comment detecteriez-vous une attaque Potato?
Partie 5: Defenses et Hardening
Etape 5.1: Reduire la surface d'attaque
Desactiver les services non necessaires:
# Verifier l'etat du Print Spooler
Get-Service Spooler
# Desactiver si non necessaire (ATTENTION en production!)
# Stop-Service Spooler
# Set-Service Spooler -StartupType Disabled
Etape 5.2: Restreindre SeImpersonatePrivilege
Via Local Security Policy:
secpol.msc- Local Policies > User Rights Assignment
- "Impersonate a client after authentication"
- Retirer les groupes non necessaires
Etape 5.3: Activer les protections
Windows Defender Credential Guard:
# Verifier si Credential Guard est actif
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard
LSA Protection:
# Verifier LSA Protection
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL"
Etape 5.4: Script de verification securite
# Script de verification de la configuration IPC
Write-Host "=== VERIFICATION SECURITE IPC ===" -ForegroundColor Cyan
# 1. Print Spooler
$spooler = Get-Service Spooler -ErrorAction SilentlyContinue
if ($spooler.Status -eq "Running") {
Write-Host "[!] Print Spooler est actif" -ForegroundColor Yellow
} else {
Write-Host "[OK] Print Spooler est inactif" -ForegroundColor Green
}
# 2. Pipes inhabituels
$suspectPipes = Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -match "(spoof|potato|test[0-9])"
}
if ($suspectPipes) {
Write-Host "[!] Pipes suspects detectes:" -ForegroundColor Red
$suspectPipes | ForEach-Object { Write-Host " $_" }
} else {
Write-Host "[OK] Pas de pipes suspects" -ForegroundColor Green
}
# 3. SeImpersonatePrivilege
if ((whoami /priv) -match "SeImpersonate.*Enabled") {
Write-Host "[INFO] SeImpersonatePrivilege est actif" -ForegroundColor Yellow
}
Write-Host "`n=== FIN DE LA VERIFICATION ===" -ForegroundColor Cyan
Questions: 5. Votre systeme est-il vulnerable aux attaques Potato? 6. Quelles mesures implementeriez-vous?
Partie 6: Exercice Pratique
Etape 6.1: Audit complet
Realisez un audit de votre VM:
- Listez tous les services avec SeImpersonatePrivilege
- Identifiez les pipes actifs et leur proprietaire
- Verifiez l'etat des services a risque (Spooler, BITS, etc.)
- Analysez les logs pour des connexions pipe suspectes
Etape 6.2: Rapport d'audit
Creez un rapport incluant:
- Etat actuel de la securite IPC
- Risques identifies
- Recommandations de remediation
Livrables
-
Rapport d'audit (2-3 pages):
- Inventaire des services a risque
- Analyse des privileges
- Recommandations
-
Captures d'ecran:
- whoami /priv
- Liste des pipes
- Script de verification execute
-
Reponses aux 6 questions
Criteres d'Evaluation
| Critere | Points |
|---|---|
| Comprehension des tokens | 20% |
| Analyse des attaques Potato | 25% |
| Detection mise en place | 25% |
| Recommandations de securite | 30% |
Commandes de Reference
# Privileges
whoami /priv
whoami /all
# Services
Get-Service Spooler, BITS, WMI
# Pipes
Get-ChildItem \\.\pipe\
# Events
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4688}
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational';ID=17,18}
# Configuration
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
Ressources Additionnelles
Lab developpe dans le cadre du cours Systemes d'Exploitation - MODULE 10