
un outil d'analyse statique pour trouver des vulnérabilités dans le code source C/C++
Il s'agit de « flawfinder » par David A. Wheeler.
Flawfinder est un programme simple qui analyse le code source C/C++ et signale les failles de sécurité potentielles. Il peut être un outil utile pour examiner les logiciels à la recherche de vulnérabilités, et il peut également servir d'introduction simple aux outils d'analyse statique de code source en général. Il est conçu pour être facile à installer et à utiliser. Flawfinder prend en charge le Common Weakness Enumeration (CWE) et est officiellement compatible CWE. Il prend en charge divers formats de sortie, notamment SARIF, SonarQube et HTML.
Flawfinder peut être utilisé conjointement avec des outils d'analyse de code basés sur l'IA. La sortie de Flawfinder peut être utilisée pour identifier rapidement les zones de code qui méritent une attention particulière, qu'un système d'IA peut ensuite examiner plus en détail.
Pour plus d'informations, consultez le site Web du projet.
Flawfinder est conçu pour être utilisé sur les systèmes Unix/Linux/POSIX (y compris Cygwin, les systèmes basés sur Linux, macOS et divers BSD) en tant qu'outil en ligne de commande. Il nécessite Python (nous testons avec Python 3 ; Python 2.7 devrait fonctionner mais est de moins en moins testé).
Si vous souhaitez simplement l'utiliser, vous pouvez installer flawfinder avec « pip » de Python ou avec le gestionnaire de paquets de votre système (flawfinder est disponible sous forme de paquets pour de nombreux systèmes). Il prend également en charge une installation facile selon les conventions habituelles d'installation de source make install. Le fichier INSTALL.md contient des instructions d'installation plus détaillées. Vous n'êtes pas OBLIGÉ de l'installer pour l'exécuter, mais c'est le plus simple.
Pour exécuter flawfinder, donnez-lui simplement une liste de fichiers sources ou de répertoires à examiner. Par exemple, pour examiner tous les fichiers dans « src/ » et ses sous-répertoires de manière récursive :
flawfinder src/
Pour examiner tous les fichiers dans le répertoire courant et ses sous-répertoires de manière récursive :
flawfinder ./
Les résultats (constatations) se voient attribuer un niveau de risque de 0 (très faible risque) à 5 (risque élevé). Par défaut, les constatations d'un niveau de risque 1 ou supérieur sont affichées. Vous pouvez afficher uniquement les résultats de niveau de risque 4 ou supérieur dans le répertoire actuel et ses sous-répertoires comme ceci :
flawfinder --minlevel 4 ./
La page de manuel (flawfinder.1 ou flawfinder.pdf) décrit comment utiliser flawfinder (y compris ses différentes options) et les informations connexes (par exemple, comment il prend en charge CWE). Par exemple, l'option --html génère une sortie au format HTML. L'option --help donne une brève liste des options.
Flawfinder doit être capable d'interpréter correctement l'encodage des caractères de votre code source. Dans la grande majorité des cas, cela ne pose pas de problème, surtout si le code source est correctement encodé en UTF-8 et que votre système est configuré pour utiliser UTF-8 (la situation de loin la plus courante).
Cependant, il est possible que flawfinder s'arrête en cas de problème d'encodage des caractères et que vous utilisiez Python3. Le symptôme habituel est des messages d'erreur comme celui-ci :
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
Malheureusement, Python3 ne fournit pas de fonctions intégrées utiles pour gérer cela. Ainsi, il n'est pas trivial de traiter ce problème sans dépendre de bibliothèques externes (ce que nous essayons d'éviter).
Si vous rencontrez ce problème, consultez la page de manuel de flawfinder pour une collection de diverses solutions. L'une des plus simples est de simplement convertir le code source et la configuration système en UTF-8. Vous pouvez convertir le code source en UTF-8 à l'aide d'outils tels que l'outil système iconv ou le programme Python cvt2utf; vous pouvez installer cvt2utf à l'aide de pip install cvt2utf.
Plus techniquement, flawfinder utilise une analyse lexicale pour trouver des jetons (tels que les noms de fonctions) qui suggèrent des vulnérabilités probables, estime leur niveau de risque (par exemple, par le texte des appels de fonction) et rapporte les résultats. Flawfinder n'utilise pas ou n'a pas accès à la plupart des informations sur le flux de contrôle, le flux de données, les types de données, les espaces de noms et les portées. Ainsi, flawfinder produira nécessairement de nombreux faux positifs pour les vulnérabilités et ne signalera pas de nombreuses vulnérabilités. D'un autre côté, flawfinder peut trouver des vulnérabilités dans des programmes qui ne peuvent pas être compilés ou liés. Flawfinder n'est pas non plus aussi dérouté par la plupart des définitions de macros et autres bizarreries avec lesquelles les outils plus sophistiqués ont du mal.
Il existe une action GitHub disponible pour ceux qui utilisent GitHub.
Voir action.yml
Créez un fichier .yml sous .github/workflows avec le contenu suivant :
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
Vous pouvez ajouter de nombreuses autres options aux arguments. Par exemple, --error-level=4 entraînera le renvoi d'une erreur si flawfinder trouve une vulnérabilité de niveau 4 ou supérieur. Remarquez le numéro de version après le symbole @ ; vous pouvez sélectionner une version différente.
Vous pouvez trouver le nom de l'action et la chaîne de version sur le Marketplace en cliquant sur le bouton « Use latest/xxx version ».
Flawfinder s'intègre avec le plugin cxx de SonarQube. Ajoutez les règles Flawfinder dans SonarQube sous « Administration > CXX External Analyers > Other Rule Definitions » en exécutant Flawfinder une fois avec les options suivantes.
flawfinder --listrules --sonar [...]
Ensuite, dans votre CI/CD, exécutez Flawfinder comme ceci pour générer une sortie que SonarQube peut comprendre.
flawfinder -CDQ --sonar [...]
Vous voulez rediriger la sortie vers un fichier que vous pouvez ensuite charger dans SonarQube via l'option sonar.cxx.other.reportPaths.
Nous adorons les contributions ! Pour plus d'informations sur la façon de contribuer, consultez le fichier CONTRIBUTING.md.
Flawfinder est distribué sous la licence GNU GPL version 2 ou ultérieure (GPL-2.0+). Voir le fichier COPYING pour les informations de licence.