Quand il est question d'identifier les différentes techniques qu'un attaquant peut mobiliser pour contrôler un processus ou en extraire des données, il est intéressant de mentionner ptrace(2). Rien de révolutionnaire ici, étant donné que cet appel système est présent depuis UNIX version 6 [1]. Pour ainsi dire : une éternité. Néanmoins, cet appel système fournit tous les outils nécessaires à une attaque s’il est utilisable, il est donc important de le connaître, d’en connaître ses limites et de savoir s’en prémunir au besoin.
Ptrace(2) est l’appel système utilisé pour créer des outils permettant l’analyse dynamique d’un processus, les principaux exemples étant strace(1) ou gdb(1). Cet appel système permet (entre autres choses) de contrôler l'exécution d'un autre processus (suspend, resume, single step), d'accéder à sa mémoire, ou aux valeurs stockées dans les différents registres, d’intercepter les appels système et les différents signaux livrés au processus, et plus encore.
Dans cet article, nous allons présenter brièvement l'usage de ptrace(2), ainsi que quelques méthodes plus ou moins inspirées qu'un auteur de logiciel (bienveillant ou non) peut utiliser pour empêcher son utilisation.
1. Un debugger minimaliste
Avant de nous plonger dans la question de comment empêcher un processus tiers d’accéder à notre état, intéressons-nous un instant à l’utilisation de ptrace(2). Nous ne proposons ici qu’un aperçu succinct de cet outil, et ne nous aventurerons...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première