L'audit de code a pour objectif premier de vérifier la sécurité du code d'une application, et ce sur deux aspects :
L'aspect technique : il s'agit de valider le respect des bonnes pratiques de développement associées à la production de code et spécifiques au(x) langage(s) employé(s), avec une attention toute particulière portée aux éléments de sécurité intégrés à l'application
L'aspect fonctionnel : il s'agit de valider la bonne implémentation des fonctionnalités et le respect des bonnes pratiques associées, indépendantes du ou des langages employés.
Cette approche permet de déceler un grand nombre de vulnérabilités à la source, et est plus rapide et complète qu'un test d'intrusion. De plus, nous évaluons dans la mesure du possible le respect des bonnes pratiques liées aux méthodes de développement, car la gestion du code source d'une application et de ses versions, ainsi que la documentation associée peuvent être sources de problèmes : difficulté de traçabilité et perte de code source notamment.
Lors de nos tests, nous suivons deux méthodologies principales :
Nous nous basons sur des outils d'analyse automatisés de code, adaptés aux langages, tels que :
L'analyse du code repose aussi sur une action humaine, intelligente, visant à comprendre ce que fait le code afin de vérifier si les parades contre des attaques de haut niveau (d'ordre fonctionnel) sont mises en places et opérationnelles. L'identification de ce type de vulnérabilité est très difficilement automatisable, car les fonctionnalités sont variables d'une application à l'autre et d'un langage de développement à l'autre.
Le livrable contient la synthèse des vulnérabilités identifiées, du point de vue technique et fonctionnel, ainsi qu'une évaluation des méthodes de développement et de leur conformité aux bonnes pratiques. Pour chaque aspect (technique, fonctionnel, et organisationnel), une note est attribuée et compte dans l'évaluation globale.
Pour chaque vulnérabilité identifiée, un descriptif ainsi qu'un ou plusieurs correctifs sont proposés, afin de pallier de manière efficace aux problèmes observés. Des rappels aux bonnes pratiques de développement sont aussi proposés.
Enfin, la conclusion fait la synthèse des observations, et livre un avis sur la sécurité de l'application telle qu'aperçue via l'analyse de son code et de ses fonctionnalités. Celle-ci ne prend pas forcément en compte les problématiques liées au déploiement en production de l'application, selon les conditions de réalisation de l'audit de code.
Une société propose un site web d'e-commerce, basée sur une solution développée par soin avec le langage PHP et reposant sur une architecture de type LAMP. Ce site d'e-commerce propose ainsi diverses fonctionnalités :
Lors de l'audit de code, nous vérifions le respect des bonnes pratiques de développement associées au langage (dans ce cas, PHP), en nous assurant que :
Nous vérifions aussi le bon respect des bonnes pratiques de développement associées à l'implémentation de fonctionnalités, dans le cas de l'application d'e-commerce nous vérifions notamment que :
Enfin, nous vérifions sur la base de courts entretiens avec l'équipe de développement le respect des bonnes pratiques de gestion de code et de documentation, dont notamment :