Aller au contenu principal

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

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:

TypeDescriptionUtilisation
Primary TokenToken principal du processusIdentite du processus
Impersonation TokenToken temporaireAgir au nom d'un autre utilisateur

Niveaux d'impersonation:

  • SecurityAnonymous: Pas d'information sur le client
  • SecurityIdentification: Peut identifier mais pas agir
  • SecurityImpersonation: Peut agir localement
  • SecurityDelegation: 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:

  1. Quels privileges avez-vous?
  2. Le privilege SeImpersonatePrivilege est-il present?

Etape 1.3: Qui a SeImpersonatePrivilege?​

Par defaut, ce privilege est accorde a:

  • LOCAL SERVICE
  • NETWORK SERVICE
  • Administrators
  • 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 SeImpersonatePrivilege ou SeAssignPrimaryTokenPrivilege
  • Pouvoir creer un named pipe
  • Pouvoir forcer un processus privilegie a s'y connecter

Etape 2.3: Services vulnerables historiques​

ServiceVulnerabiliteCVE
Print SpoolerSpoolFool, PrintNightmareCVE-2021-1675
BITSToken impersonationMultiple
WMIDCOM activationMultiple
MSDTCToken impersonationMultiple

Partie 3: Famille d'Attaques "Potato"​

Etape 3.1: Vue d'ensemble​

Les attaques "Potato" exploitent les IPC pour l'escalade de privileges:

NomAnneeMethode
Hot Potato2016NBNS + WPAD spoofing
Rotten Potato2016DCOM + NTLM relay
Juicy Potato2018DCOM CLSID abuse
Rogue Potato2020Fake OXID resolver
Sweet Potato2020Combinaison techniques
PrintSpoofer2020Print Spooler pipe
GodPotato2022Nouvelle 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:

  1. Le spooler a une fonctionnalite qui se connecte a des pipes
  2. On cree un pipe avec un nom specifique
  3. On declenche la connexion du spooler
  4. 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:

  1. secpol.msc
  2. Local Policies > User Rights Assignment
  3. "Impersonate a client after authentication"
  4. 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:

  1. Listez tous les services avec SeImpersonatePrivilege
  2. Identifiez les pipes actifs et leur proprietaire
  3. Verifiez l'etat des services a risque (Spooler, BITS, etc.)
  4. 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​

  1. Rapport d'audit (2-3 pages):

    • Inventaire des services a risque
    • Analyse des privileges
    • Recommandations
  2. Captures d'ecran:

    • whoami /priv
    • Liste des pipes
    • Script de verification execute
  3. Reponses aux 6 questions


Criteres d'Evaluation​

CriterePoints
Comprehension des tokens20%
Analyse des attaques Potato25%
Detection mise en place25%
Recommandations de securite30%

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