Analyse statique et pratique avec GCC et ses plugins

Magazine
Marque
MISC
Numéro
56
Mois de parution
juillet 2011
Domaines


Résumé

L'audit de programmes en C et C++ s'automatise souvent. Des outils existent, mais ils ont des approches très différentes : de l'utilisation de grep à celle d'outils plus proches du langage analysé, la qualité des analyses (et le prix des outils) varie fortement. La possibilité d'étendre ces outils pose aussi problème. Si l'on veut une base libre, gratuite, proche du langage et extensible, pourquoi ne pas réutiliser directement un compilateur ? Le système de plugins intégré à la suite de compilateurs GCC (disposant de parseurs C, C++, mais aussi Objective C, Java, ... ainsi que de diverses représentations internes) nous permet de concevoir nos propres analyses statiques.Cet article se veut une introduction à l'architecture de GCC et au développement de petits analyseurs facilitant la vie lors d'un audit de code.


1. Introduction

Pour analyser un code source, l'idée la plus simple est de le considérer comme une suite de lignes de texte. La recherche de motifs vulnérables s'effectue par une expression régulière. Une commande comme grep '\bgets *(' *.c souffre néanmoins de nombreux inconvénients : pas de gestion des commentaires (/* pas d'appel à gets() */), ni des chaînes littérales (char tab[] = "gets()";), etc.

Une approche plus fine consiste à faire une analyse lexicale du code source : les espaces et les commentaires sont ignorés, puis le code source devient une suite de tokens groupés en catégories (identifiant de variables, mot-clé, etc.). Des outils comme Flawfinder [FLAWFINDER] ou RATS [RATS] se servent de cette représentation pour leur recherche de motifs. Mais des limites se font aussi sentir : il manque les analyses syntaxique et sémantique du code source, qui peuvent être fournies par un compilateur.

L'utilisation d'un compilateur et notamment de l'AST...

Cet article est réservé aux abonnés. Il vous reste 97% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite


Articles qui pourraient vous intéresser...

Zéro SQLi malgré les développeurs

Magazine
Marque
MISC
Numéro
111
Mois de parution
septembre 2020
Domaines
Résumé

Nous proposons une méthode pour effectuer des requêtes SQL qui garantit l'invulnérabilité aux injections SQL, y compris lorsqu'elle est utilisée par un développeur pressé ou incompétent, contrairement aux requêtes paramétrées. Basée sur l'utilisation d'arbres de syntaxe abstraite, elle permet facilement de construire des requêtes dynamiques et est plus facile à mettre en œuvre qu'un ORM. Nous proposons une bibliothèque Java implémentant nos idées, mais la méthode peut s'appliquer à d'autres langages de programmation et d'autres types de requêtes.

Introduction à QBDI et ses bindings Python

Magazine
Marque
MISC
Numéro
109
Mois de parution
mai 2020
Domaines
Résumé

Le présent article traite de l'outil d'instrumentation dynamique QBDI. C'est un framework de DBI (Dynamic Binary Instrumentation), comparable à d'autres projets publics tels qu’Intel PIN, Valgrind ou encore DynamoRIO. Avant d'entrer dans le vif du sujet, quelques rappels peuvent s'avérer nécessaires…

Introduction au dossier : Python au service de la recherche et l’exploitation de vulnérabilités

Magazine
Marque
MISC
Numéro
109
Mois de parution
mai 2020
Domaines
Résumé

Quand on s’adonne aux plaisirs de la sécurité informatique, il est ce moment où doivent s’aligner les idées et la pratique, c’est-à-dire la production d’une preuve de concept. Et quand il faut écrire du code, le choix du langage s’impose forcément : d’un côté, il y a les contraintes fortes qui nous donnent des possibilités restreintes, et de l’autre il y a nos bas instincts qui prennent la solution qui produira le plus rapidement possible le résultat escompté.