Dynamic binary analysis and optimization for cybersecurity
Analyse et optimisation dynamiques de programmes au format binaire pour la cybersécurité
Abstract
Memory corruption attacks have been a major issue in software security for over two decades and are still one of the most dangerous and widespread types of attacks nowadays. Among these attacks, control-flow hijack attacks are the most popular and powerful, enabling the attacker to execute arbitrary code inside the target process. Many approaches have been developed to mitigate such attacks and to prevent them from happening. One of these approaches is the Control-Data Isolation (CDI) that tries to prevent such attacks by removing their trigger from the code, namely indirect branches. This approach has been implemented as a compiler pass that replaces every indirect branches in the program with a table that leads the control-flow to direct hard-written branches. The drawback of this approach is that it needs the recompilation of the program. In this manuscript we present an approach and its implementation, \damas, a framework capable of deploying protections on a running software and use runtime information to optimize them during the execution. We implemented a coarse-grain CDI protection using our framework and evaluated its impact on performance.
Les attaques par corruption de mémoire ont été un problème majeur dans la sécurité des logiciels depuis plus de vingt ans et restent l'un des types d'attaques les plus dangereux et les plus répandus de nos jours. Parmi ces attaques, celles par détournement de flot de contrôle sont les plus populaires et les plus puissantes, permettant à l'attaquant d'exécuter du code arbitraire dans le processus cible. De nombreuses approches ont été développées pour mitiger de telles attaques et pour les empêcher de se produire. L'une de ces approches est l'isolation des données de contrôle (CDI) qui tente de d'empêcher ces attaques en supprimant leur déclencheur dans le code, à savoir les branchements indirects. Cette approche a été mise en œuvre sous la forme d'une passe de compilateur remplaçant tous les branchements indirects dans le programme par une table conduisant le flot de contrôle vers des sauts directs écrits en dur. L'inconvénient de cette approche est qu'elle nécessite la recompilation du programme. Dans ce manuscrit, nous présentons une approche et son implémentation, DAMAS, un framework capable de déployer des protections sur un logiciel en cours d'exécution et d'utiliser les informations disponibles pour les optimiser pendant l'exécution. Nous avons implémenté une protection CDI à gros grain à l'aide de notre framework et évalué son impact sur les performances.
Origin | Version validated by the jury (STAR) |
---|