Aller au contenu principal

Communication Inter-Processus (IPC) Windows

Introduction​

La communication inter-processus (IPC) permet a des processus distincts d'echanger des donnees et de se synchroniser. C'est un concept fondamental des systemes d'exploitation modernes, essentiel pour comprendre comment les applications communiquent entre elles.

Pourquoi l'IPC est important​

Dans un systeme d'exploitation moderne:

  • Les applications sont souvent composees de plusieurs processus
  • Les services systeme doivent communiquer entre eux
  • Les clients et serveurs echangent des donnees
  • La securite depend de la bonne isolation des processus

Mecanismes IPC Windows​

Vue d'Ensemble​

MecanismeTypePorteePerformanceCas d'usage
Pipes anonymesStreamLocalHauteParent-enfant
Named PipesStreamReseauHauteServices, RPC
MailslotsDatagramReseauMoyenneBroadcast
Shared MemoryDirectLocalTres hauteHaute performance
SocketsStream/DatagramReseauVariableApplications reseau
COM/DCOMRPCLocal/ReseauMoyenneIntegration Windows
WMIQueryLocal/ReseauBasseAdministration

Pipes Anonymes​

Definition​

Un pipe anonyme est un canal de communication unidirectionnel entre deux processus lies (generalement parent-enfant).

Caracteristiques​

  • Communication unidirectionnelle
  • Pas de nom, donc non accessible par d'autres processus
  • Cree par le processus parent
  • Herite par le processus enfant
  • Pas d'acces reseau

Exemple en ligne de commande​

dir | findstr "txt"

Le caractere | cree un pipe anonyme:

  1. dir ecrit sa sortie dans le pipe
  2. findstr lit depuis le pipe
  3. Les donnees passent de l'un a l'autre

Utilisation en programmation​

// Pseudo-code simplifie
HANDLE hReadPipe, hWritePipe;
CreatePipe(&hReadPipe, &hWritePipe, NULL, 0);

// Le parent ecrit dans hWritePipe
// L'enfant lit depuis hReadPipe

Named Pipes (Pipes Nommes)​

Definition​

Un named pipe est un canal de communication bidirectionnel accessible par son nom, pouvant traverser le reseau.

Caracteristiques​

  • Communication bidirectionnelle
  • Accessible par nom: \\.\pipe\NomDuPipe
  • Peut traverser le reseau: \\serveur\pipe\NomDuPipe
  • Supporte les ACL (Access Control Lists)
  • Mode message ou byte stream

Format du nom​

\\.\pipe\MonPipe           (local)
\\serveur\pipe\MonPipe (distant)
\\127.0.0.1\pipe\MonPipe (localhost)

Enumeration des pipes​

PowerShell:

# Lister tous les pipes actifs
Get-ChildItem \\.\pipe\

# Methode alternative
[System.IO.Directory]::GetFiles("\\.\pipe\")

Avec PipeList (Sysinternals):

pipelist.exe /accepteula

Pipes Windows courants​

PipeService
\pipe\lsarpcLSA (Local Security Authority)
\pipe\samrSAM (Security Account Manager)
\pipe\netlogonNetlogon service
\pipe\srvsvcServer service
\pipe\wkssvcWorkstation service
\pipe\spoolssPrint Spooler

Implications securite​

Les named pipes sont utilises pour:

  • Communication avec services Windows
  • Remote Procedure Calls (RPC)
  • Impersonation de tokens (risque de securite)
  • Techniques d'escalade de privileges (Potato attacks)

Shared Memory (Memoire Partagee)​

Definition​

La memoire partagee permet a plusieurs processus d'acceder a la meme region de memoire physique.

Caracteristiques​

  • Acces direct a la memoire (tres rapide)
  • Necessite synchronisation manuelle
  • Local uniquement
  • Implemente via File Mapping sous Windows

Creation en PowerShell​

# Creer une zone de memoire partagee
Add-Type -TypeDefinition @"
using System;
using System.IO.MemoryMappedFiles;

public class SharedMem {
public static MemoryMappedFile Create(string name, long size) {
return MemoryMappedFile.CreateNew(name, size);
}
}
"@

$mmf = [SharedMem]::Create("MonPartage", 1024)

Cas d'usage​

  • Applications haute performance
  • Partage de donnees volumineuses
  • Communication entre processus locaux rapide

Sockets​

Definition​

Les sockets permettent la communication reseau entre processus, localement ou sur des machines distantes.

Types de sockets​

TypeProtocoleCaracteristiques
StreamTCPConnexion fiable, ordonnee
DatagramUDPSans connexion, rapide
RawIPAcces bas niveau

Ports courants Windows​

PortServiceRisque
80HTTPAttaques web
443HTTPSAttaques web
445SMBEternalBlue, lateral movement
3389RDPBrute force, BlueKeep
5985WinRM HTTPRemote execution
5986WinRM HTTPSRemote execution
135RPCDCOM attacks

Exemple serveur TCP simple​

# Serveur TCP basique
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, 8080)
$listener.Start()
Write-Host "Serveur en ecoute sur port 8080..."

$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$reader = [System.IO.StreamReader]::new($stream)
$message = $reader.ReadLine()
Write-Host "Recu: $message"

$client.Close()
$listener.Stop()

COM et DCOM​

COM (Component Object Model)​

COM est un framework Microsoft pour creer des composants logiciels reutilisables.

Caracteristiques:

  • Objets accessibles via interfaces
  • Independant du langage de programmation
  • Utilise par Office, Shell, Explorer

Exemple PowerShell:

# Creer un objet COM Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.Quit()

DCOM (Distributed COM)​

DCOM etend COM pour permettre la communication sur le reseau.

Risques de securite:

  • Utilise pour le lateral movement en pentest
  • Techniques: MMC20, ShellBrowserWindow, Excel DDE
  • Port 135 (RPC) + ports dynamiques

WMI (Windows Management Instrumentation)​

Definition​

WMI est l'implementation Microsoft de WBEM (Web-Based Enterprise Management), permettant de gerer et interroger les systemes Windows.

Utilisation basique​

# Information systeme
Get-WmiObject Win32_OperatingSystem

# Processus
Get-WmiObject Win32_Process | Select-Object Name, ProcessId

# Services
Get-WmiObject Win32_Service | Where-Object {$_.State -eq "Running"}

# A distance
Get-WmiObject -ComputerName "ServeurDistant" -Class Win32_OperatingSystem

WMI pour administration a distance​

# Executer une commande a distance via WMI
Invoke-WmiMethod -ComputerName "Cible" -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c whoami > C:\result.txt"

Implications securite​

WMI est utilise pour:

  • Administration legitime a distance
  • Lateral movement (wmic /node:)
  • Persistence via WMI Event Subscriptions
  • Execution de code sans fichier sur disque

Tableau Comparatif​

CriterePipesNamed PipesShared MemorySocketsCOM/DCOMWMI
ReseauNonOuiNonOuiOuiOui
PerformanceHauteHauteTres hauteVariableMoyenneBasse
SecuriteACLACLACLFirewallDCOM configWMI namespace
ComplexiteFaibleMoyenneHauteMoyenneHauteMoyenne
BidirectionnelNonOuiOuiOuiOuiOui

Securite des IPC​

Vecteurs d'attaque courants​

  1. Named Pipes:

    • Token impersonation
    • Potato attacks (PrintSpoofer, JuicyPotato)
    • C2 communication (Cobalt Strike)
  2. DCOM:

    • Lateral movement
    • Remote code execution
  3. WMI:

    • Execution distante
    • Persistence via subscriptions
    • Reconnaissance
  4. Sockets:

    • Reverse shells
    • Backdoors
    • Exfiltration

Detection​

Sysmon Events:

  • Event ID 17: Pipe created
  • Event ID 18: Pipe connected

PowerShell:

# Detecter les pipes suspects
Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -notmatch "^(lsarpc|samr|netlogon|srvsvc|wkssvc)"
}

Exercice Pratique​

  1. Listez tous les named pipes actifs sur votre systeme
  2. Identifiez quel processus utilise chaque pipe
  3. Creez un serveur et client de pipe simple en PowerShell
  4. Testez la communication

References​