Swap Detector, tel est le nom choisi par l’éditeur américain de logiciels d’analyse de code GrammaTech pour un outil de vérification, disponible en open source, qui détecte les erreurs d'utilisation des interfaces de programmation d'applications (API).... L'outil a été développé dans le cadre d'une partie du projet de recherche américain Stamp (Static Tool Analysis Modernization Project) soutenu par le Département de la sécurité intérieure américain (DHS, Department of Homeland Security) qui vise à moderniser les techniques d'analyse statique de code, notamment au niveau de la sécurité des applications réalisées avec des méthodes agiles (DevOps).
En utilisant notamment des techniques d’analyse mises en œuvre pour étudier de très gros codes (dans le domaine du Big Data), Swap Detector catalogue les bons modèles d'appel connus et identifie les anomalies associées aux bogues d'utilisation des API mises en œuvre dans un projet.
Pour GrammaTech (dont les solutions sont distribuées en France par ISIT), le développement de logiciels modernes implique l'utilisation d'API, de bibliothèques et/ou de frameworks tiers qui sont complexes, qui évoluent rapidement et qui sont parfois mal documentés. Parallèlement, selon diverses études, les composants open source peuvent représenter jusqu'à 90% du code dans une application de moyenne importance. Et sur ce type de code, les erreurs d'utilisation des API sont une source courante de vulnérabilités avec des failles de sécurité entraînant des problèmes de fiabilité. Dans ce cadre, Swap Detector permet aux développeurs et aux équipes DevOps d'identifier les erreurs dues aux arguments de fonction échangés (Swapped Function Arguments) qui peuvent également être présents dans le code déployé.
Plus précisément, Swap Detector (disponible sur GitHub) utilise des informations d'entrée sur un site d’appel de fonction (call site), et éventuellement, des informations de déclaration de fonction relatives à ce site d'appel. S'il détecte une erreur d'argument, il génère un message d'avertissement approprié ainsi qu’une note (score) associée à cette alerte. Pour augmenter la précision de ses analyses, Swap Detector utilise plusieurs techniques de détection d'erreurs, superposées. Par exemple, il compare les noms d'arguments utilisés au niveau des sites d'appel avec les noms de paramètres utilisés dans les déclarations correspondantes. En outre, il utilise des techniques issue du Big Data en appliquant des informations statistiques sur les usages des modèles d'utilisation d'API “connus”, collectées à partir d'un vaste corpus de code et signalant les utilisations statistiquement anormales.
Afin d'améliorer la précision des avertissements signalés, Swap Detector applique en outre des stratégies de réduction des faux positifs à la sortie des deux techniques.
L'interface de Swap Detector s'intègre à de nombreux outils d'analyse statique tels que Clang Static Analyzer, Clang-Tidy et PyLint. Bien qu'initialement axé sur les programmes écrits en C/C++, Swap Detector est aussi applicable aux programmes écrits dans d'autres langages, notamment certains langages interprétés non compilés.
« Les techniques traditionnelles d'analyse statique ne tirent pas parti de la grande richesse d'informations sur ce que représentent les pratiques de codage sans erreur disponibles dans le domaine open source, précise Alexey Loginov, vice-président de la recherche chez GrammaTech. Avec Swap Detector, nous avons appliqué des techniques d'analyse issues du domaine du Big Data au référentiel open source Fedora RPM pour une utilisation correcte des API. Ce qui nous a permis de développer des capacités de détection d’erreurs qui dépassent la précision des approches conventionnelles d’analyse de programmes. »