PLAYING WITH PTRACE() FOR FUN AND PROFIT
par Nicolas  BAREIL (EADS DCR/STI/C)
Résumé
Parmi les appels systèmes les moins documentés et les plus obscurs (dixit la page de manuel), ptrace() est en bonne position. On aurait néanmoins tort de l'ignorer car c'est l'une des fonctions les plus intéressantes sur les systèmes UNIX, son utilisation première est le debugging de programme, mais derrière ce mot très vague se cache des fonctionnalités parfaites pour tout bidouilleur : l'accès en lecture et en écriture de toute la mémoire virtuelle d'un processus (ainsi que ses registres). De plus, il n'y a pas besoin d'être un utilisateur privilégié pour l'utiliser, il est seulement requit d'avoir le mêmeUID et ne pas être déjà tracé. Tout au long de cette présentation, nous allons découvrir l'appel système, comment l'utiliser en abordant les problèmes d'implémentation comme le placement des instructions dans l'espace d'adressage du processus, l'interruption des appels systèmes, etc. Enfin, nous dresserons un éventail d'applications de ptrac() afin de voir ce qu'il peut apporter d'un point de vue sécurité (mise en place de protection, analyse de code malicieux, etc.). L'utilisation de ptrace() permettra également de mettre en relief les limites de la sécurité de certains outils comme les firewalls applicatifs ou les processus chrootés (évasion possible).
Biographie
Partagé entre l'ENST Bretagne et le centre de recherche en sécurité des systèmes d'information d'EADS. Je travaille sur quelques sujets de recherche comme la sécurité des réseaux VoIP et tout ce qui touche à la sécurité des systèmes UNIX. Ainsi, je fût également pentesteur à mes heures perdues et auditeur de code source dans une autre vie.

Icon  Name                                           Size  
[PARENTDIR] Parent Directory - [   ] SSTIC06-Bareil-Playing_with_ptrace.pdf 1.0M [   ] SSTIC06-article-Bareil-Playing_with_ptrace.pdf 172K [TXT] liberte.c 5.3K [   ] shellcode-fork-connect.nasm 7.1K