Comment la pagination renforce la sécurité système : Isolation mémoire, contrôle accès et virtualisation
La pagination — schéma gestion mémoire divisant mémoire virtuelle et physique en pages taille fixe — est un primitif sécurité fondamental dans noyaux OS modernes (Linux, Windows, macOS, *BSD, hyperviseurs). Voici comment elle impose la sécurité.
1. Isolation mémoire (Séparation processus)
- Chaque processus obtient espace d'adressage virtuel privé (ex: 128 To sur x86-64)
- Tables de pages mappent pages virtuelles → cadres physiques uniquement par processus
- Processus A ne peut adresser mémoire Processus B — pas de traduction valide
- Défait : Dépassement tampon → lecture/écriture arbitraire, fuites infos, injection code
2. Permissions niveau page (ACL matérielles)
Chaque Entrée Table Pages (PTE) contient bits :
| Bit | Nom | Fonction sécurité |
|---|---|---|
| P | Présent | Page mappée ? Si 0 → page fault |
| R/W | Lecture/Écriture | Write-protect code, données lecture-seule |
| U/S | Utilisateur/Superviseur | Anneau 3 vs Anneau 0 — mémoire noyau protégée |
| NX/XD | Non-exécutable | DEP : Pile/tas non-exécutable → stoppe injection code |
| Dirty/Accessed | Suivi | Copy-on-write, working set, décisions swap |
3. Séparation noyau/espace utilisateur
- Noyau mappe toute mémoire physique dans moitié haute (ffff8000`00000000+)
- Processus utilisateur mappent seulement leurs pages dans moitié basse
- Bit U/S = 0 pour pages noyau → accès mode utilisateur = page fault (#PF) → SIGSEGV / BSOD
- KPTI (Kernel Page Table Isolation) atténue Meltdown en démappant noyau en mode utilisateur
4. Containment dépassement tampon
- Dépassement pile écrase pages pile adjacentes → tombe sur page garde (P=0) → #PF
- Dépassement tas : Métadonnées allocateur dans pages séparées, peuvent être lecture-seule
- ASLR + Pagination = adresses base randomisées par mapping — exploits nécessitent fuite info d'abord
5. Page faults comme télémétrie sécurité
- #PF sur page NX → tentative exécution code sur données (shellcode, ROP)
- #PF sur page U/S=0 → processus utilisateur touchant mémoire noyau
- #PF sur page P=0 → accès mémoire libérée/non-mappée (use-after-free)
- Hyperviseurs/EPP (Intel PT, AMD IBS) tracent #PF pour détection anomalies
6. Virtualisation sécurisée (Second Level Address Translation — SLAT)
- Intel EPT, AMD RVI, ARM Stage-2 : Physique invité → Physique hôte
- Hyperviseur contrôle les deux niveaux tables pages
- Évasion VM nécessite casser deux couches traduction + validation hyperviseur
- Chiffrement mémoire (SEV-SNP, TDX) ajoute clés chiffrement par VM dans tables pages
7. Fonctionnalités durcissement avancées
- Bit WP (Write Protect) dans CR0 : Noyau force lecture-seule sur ses propres pages
- SMEP/SMAP : CPU bloque exécution/accès noyau pages utilisateur
- PKU (Protection Keys Userspace) : 16 domaines, registre par thread (PKRU)
- MTE (Memory Tagging Extension, ARMv8.5+) : Tags 4 bits dans octet poids fort pointeur + granule
Résumé
La pagination transforme la mémoire physique (partagée, non protégée) en mémoire virtuelle (isolée, permissionnée, auditable). C'est la fondation matérielle pour : isolation processus, moindre privilège, DEP, ASLR, KPTI, virtualisation, et sécurité mémoire. Sans pagination, modèles sécurité modernes s'effondrent.
