Le pwn, c'est quoi
exactement ?
PWN, ou Perfectly Owned : l'art de prendre le contrôle d'un programme exécutable. On pose la définition à notre sauce et on présente les deux grandes familles d'attaques que la série va décortiquer : Control Flow Attacks et Code Reuse Attacks.
own2pwn··4 min de lecture
Prérequis
- Comprendre les fichiers ELF (voir Segmentation Mémoire)
- Maniement de GDB
Hello ! o/
Pour ouvrir cette série, on va devoir poser une définition de ce qu'est le pwn... à notre sauce ! Parce qu'on utilise ce mot un peu partout et n'importe comment, et nous on l'a appris sous deux angles complémentaires.
D'abord l'origine. PWN vient de Perfectly Owned : quand un attaquant a pris le contrôle complet d'une machine, on dit qu'elle est pwned. À partir de là, dans le contexte de l'exploitation binaire, on s'est mis à utiliser une définition plus opérationnelle :
PWN = contrôler le flow d'un programme exécutable.
Du coup on va s'amuser à comprendre les 2 manières de péter du binaire :
| Famille | Idée | Exemple typique |
|---|---|---|
| Control Flow Attack | Détourner le flow vers une zone non prévue par l'exécution normale. Autrement dit : prendre le contrôle de EIP/RIP. | Stack overflow → on écrase l'adresse de retour |
| Code Reuse Attack | Réutiliser des morceaux de code déjà chargés en mémoire pour faire ce qu'on veut, en s'appuyant sur un Control Flow Attack pour amorcer. | ROP, ret2libc |
Le PWN en une image
Voilà ce que ça donne, schématiquement, quand on détourne le flow d'un binaire ELF en mémoire :
Programme ELF chargé en mémoire
┌────────────────────────────────────────┐
│ .text │ .data │ [heap] [stack]│
│ │ │
│ │ flow d'exécution normal │
│ ▼ │
│ call printf │
│ call main │
│ ret ────► retourne au caller │
│ │
│ ╳ on dévie le flow ╳ │
│ ret ──┐ │
│ ▼ │
│ ┌──────────────────────────────┐ │
│ │ gadget ROP / shellcode / │ │
│ │ libc one-gadget / ... │ │
│ └──────────────────────────────┘ │
└────────────────────────────────────────┘
▲
PWN = on contrôle ce cheminCe qu'on va voir dans la série
Articles liés
pwn
Stack overflow : tout ce que la stack peut t'offrir
ret2win, ret2shellcode, ret2libc, frame faking, off-by-one, ret2dl_resolve... Un tour complet des Stack-based Control Flow Attacks avec la logique derrière chaque technique, pas juste les noms.
pwn
Comment on tombe sur un bug exploitable
Panorama des techniques qui déclenchent un bug exploitable en amont d'un détournement de flow : large input, type confusion, integer overflow, format strings, race conditions, logic bugs, exécution symbolique et fuzzing.
os
C'est quoi un OS, vraiment ?
Architecture generale d'un OS : role du kernel, espaces utilisateur et noyau, types de kernels (monolithique, micro, hybride) et notion de modules systemes charges a chaud.