Aller au contenu principal

Gestion de la Memoire Windows

Introduction​

La gestion de la memoire est une des fonctions les plus critiques du systeme d'exploitation. Elle permet a chaque processus de croire qu'il dispose de toute la memoire a lui seul, tout en partageant la RAM physique entre tous les processus.

Concepts Fondamentaux​

Memoire Physique vs Virtuelle​

TypeDescriptionCaracteristiques
Memoire Physique (RAM)Memoire materielle installeeLimitee, rapide
Memoire VirtuelleAbstraction fournie par l'OSIllusion de memoire illimitee

Pourquoi la memoire virtuelle?​

  1. Isolation des processus: Chaque processus a son propre espace
  2. Protection: Un processus ne peut pas acceder a la memoire d'un autre
  3. Flexibilite: Plus de memoire disponible que la RAM physique
  4. Simplification: Les programmes n'ont pas a gerer la RAM directement

Espace d'Adressage Virtuel​

Architecture 32 bits vs 64 bits​

ArchitectureEspace TotalUser SpaceKernel Space
32 bits4 Go2 Go (ou 3 Go avec /3GB)2 Go (ou 1 Go)
64 bits256 To theorique128 To128 To

Organisation de la memoire d'un processus​

Adresses hautes
+------------------+
| Kernel Space | <- Inaccessible en mode utilisateur
+------------------+
| Stack | <- Pile (croit vers le bas)
| | |
| v |
| |
| ^ |
| | |
| Heap | <- Tas (croit vers le haut)
+------------------+
| Data (BSS) | <- Variables non initialisees
+------------------+
| Data (Init) | <- Variables initialisees
+------------------+
| Code | <- Instructions executables
+------------------+
| Reserved | <- Zone protegee (NULL pointer)
+------------------+
Adresses basses (0x0)

Pagination​

Concept​

La pagination decoupe la memoire en blocs de taille fixe:

  • Page: Bloc de memoire virtuelle (4 Ko par defaut sur Windows)
  • Frame: Bloc de memoire physique correspondant
  • Page Table: Structure qui mappe pages vers frames

Fonctionnement​

Adresse Virtuelle          Page Table          Adresse Physique
[Page Number|Offset] --> [Frame Number] --> [Frame Number|Offset]

Etats d'une page​

EtatDescription
FreeNon allouee, disponible
ReservedReservee mais pas engagee
CommittedAllouee et utilisable
SharedPartagee entre processus

Page File (Fichier d'echange)​

Qu'est-ce que le Page File?​

Quand la RAM est insuffisante, Windows deplace des pages peu utilisees vers le disque dans le fichier pagefile.sys.

Configuration​

# Voir la configuration actuelle
Get-WmiObject Win32_PageFileUsage | Select-Object Name, CurrentUsage, PeakUsage

# Voir la taille configuree
Get-WmiObject Win32_PageFileSetting | Select-Object Name, InitialSize, MaximumSize

Impact sur les performances​

SituationPerformance
Page en RAMAcces: ~100 ns
Page sur disque (SSD)Acces: ~100 us (1000x plus lent)
Page sur disque (HDD)Acces: ~10 ms (100000x plus lent)

Types de Memoire Windows​

Working Set​

L'ensemble des pages actuellement en RAM pour un processus.

# Voir le Working Set des processus
Get-Process | Sort-Object WorkingSet64 -Descending |
Select-Object -First 10 Name, @{N='WorkingSet(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}

Private Bytes​

Memoire allouee exclusivement a un processus (non partageable).

# Voir les Private Bytes
Get-Process | Sort-Object PrivateMemorySize64 -Descending |
Select-Object -First 10 Name, @{N='PrivateBytes(MB)';E={[math]::Round($_.PrivateMemorySize64/1MB,2)}}

Virtual Bytes​

Taille totale de l'espace d'adressage virtuel du processus.

Commit Charge​

Total de memoire "promise" a tous les processus (peut depasser RAM physique).

# Voir le Commit Charge global
Get-CimInstance Win32_OperatingSystem |
Select-Object @{N='CommitTotal(GB)';E={[math]::Round($_.TotalVirtualMemorySize/1MB,2)}},
@{N='CommitUsed(GB)';E={[math]::Round(($_.TotalVirtualMemorySize - $_.FreeVirtualMemory)/1MB,2)}}

Memory-Mapped Files​

Concept​

Permet de mapper un fichier directement dans l'espace d'adressage d'un processus.

Avantages​

  • Acces au fichier comme a la memoire
  • Partage efficace entre processus
  • Gestion automatique par l'OS

Utilisation en PowerShell​

# Creer un fichier memory-mapped
Add-Type -AssemblyName System.IO.MemoryMappedFiles

$mmf = [System.IO.MemoryMappedFiles.MemoryMappedFile]::CreateNew(
"MonPartage", # Nom
1024 # Taille en bytes
)

# Ecrire des donnees
$accessor = $mmf.CreateViewAccessor()
$accessor.Write(0, [byte]65) # Ecrire 'A' a la position 0

# Lire des donnees
$value = $accessor.ReadByte(0)
Write-Host "Valeur lue: $([char]$value)"

# Nettoyer
$accessor.Dispose()
$mmf.Dispose()

Heap (Tas)​

Concept​

Zone de memoire pour l'allocation dynamique pendant l'execution.

Heap Manager Windows​

Windows fournit plusieurs types de heap:

  • Process Heap: Heap par defaut du processus
  • Private Heap: Heap cree par l'application
  • Low Fragmentation Heap (LFH): Optimise pour petites allocations

Visualiser les heaps​

# Utiliser VMMap ou Process Explorer pour voir les heaps d'un processus
# Ou via debugger

Stack (Pile)​

Concept​

Zone de memoire pour les variables locales et les appels de fonctions.

Caracteristiques​

  • Taille fixe par thread (1 Mo par defaut sur Windows)
  • Croissance vers les adresses basses
  • Acces tres rapide (LIFO)

Stack Overflow​

Erreur quand la pile depasse sa taille maximale (recursion infinie, etc.).


Outils d'Analyse Memoire​

Task Manager​

  • Onglet Performance > Memoire
  • Onglet Details > Colonnes memoire

Resource Monitor​

resmon.exe

Onglet Memoire pour vue detaillee.

Process Explorer (Sysinternals)​

procexp.exe
  • View > Show Lower Pane
  • View > Lower Pane View > DLLs ou Handles

VMMap (Sysinternals)​

vmmap.exe

Analyse detaillee de l'espace d'adressage d'un processus.

RAMMap (Sysinternals)​

rammap.exe

Vue globale de l'utilisation de la RAM physique.


Protections Memoire Windows​

DEP (Data Execution Prevention)​

Empeche l'execution de code dans les zones de donnees.

# Verifier le statut DEP
Get-CimInstance Win32_OperatingSystem | Select-Object DataExecutionPrevention_*

ASLR (Address Space Layout Randomization)​

Randomise les adresses de chargement pour compliquer les exploits.

CFG (Control Flow Guard)​

Valide les cibles des appels de fonctions indirects.

Credential Guard​

Isole les credentials dans un environnement virtualise.

# Verifier si Credential Guard est actif
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
Select-Object SecurityServicesRunning

Implications Securite​

Attaques liees a la memoire​

AttaqueDescriptionProtection
Buffer OverflowDebordement de tamponDEP, ASLR, canaries
Use-After-FreeUtilisation apres liberationSafe heap
Memory DisclosureFuite de donnees memoireInitialisation
Credential DumpingVol de credentials en memoireCredential Guard

Forensics memoire​

La memoire contient des informations precieuses:

  • Processus en cours
  • Connexions reseau
  • Credentials en clair (si pas protege)
  • Historique des commandes
  • Malwares fileless

Exercices​

  1. Utilisez Get-Process pour lister les 10 processus consommant le plus de memoire
  2. Ouvrez VMMap et analysez un processus de votre choix
  3. Verifiez la configuration de votre page file
  4. Identifiez si DEP et ASLR sont actifs sur votre systeme

References​