Mapping mémoire

TIP

Pivoter au milieu d’un segment RW.

  • vmmap et info proc mappings permettent de repérer la structure des pages mémoires.

Analyse des primitives d’écriture

TIP

Vérifier que le payload est réellement écrit, et dans sa totalité.

Pour chaque vulnérabilité :

  • quelle zone mémoire puis-je écrire ?
  • quels sont les octets interdits ?
  • la primitive est-elle tronquée ? limitée ? consommatrice de lignes ?

Analyse des ABI gadgets

IMPORTANT

Un pivot n’est validé que si rsp, rip, et les valeurs suivantes sont alignées.

Pour chaque gadget utilisé :

  • à combien d’instructions pop donne-t-il lieu ?
  • comment évolue RSP avec son exécution ?
  • où pointe RSP lors du prochain ret ?
  • est-ce que je crée une dépendance mémorielle, systémique ?

Exemple de pop rdimov rdi, rsp qui fait pointer rdi sur une zone mémoire corrompue lors du flot d’exécution suivant.

Simulation du control-flow réel

TIP

Toujours simuler 5 à 10 instructions après rsp, lorsque « tout semble bon ».

On simule :

  1. l’état de la fake stack ;
  2. le pivot ;
  3. la consommation des qwords ;
  4. les appels réels (push, pop) ;
  5. les retours.

Validation des invariants

Tester dans des environnements différents

On teste en produisant des logs détaillés :

  • dans GDB,
  • hors GDB.