


CWE_CHECKER est une suite de vérifications pour détecter les classes de bogues communes telles que les déréférences du pointeur nul et les débordements tampons. Ces classes de bogues sont officiellement connues sous le nom d'énumérations de faiblesse courantes (CWES). Les contrôles sont basés sur une variété de techniques AnaylSis allant de la simple heuristique à une analyse de flux de données basée sur l'interprétation abstraite. Son objectif principal est d'aider les analystes à trouver rapidement des chemins de code potentiellement vulnérables.
Son objectif principal est les binaires elfe qui se trouvent couramment sur les systèmes d'exploitation Linux et UNIX. Le CWE_CHECKER utilise Ghidrera pour démonter des binaires en une représentation intermédiaire commune et implémente ses propres analyses sur ce RI. Par conséquent, les analyses peuvent être exécutées sur la plupart des architectures de CPU que Ghidra peut démonter, ce qui fait du CWE_CHECKER un outil précieux pour l'analyse du micrologiciel.
Les arguments suivants devraient vous convaincre d'essayer CWE_CHECKER :

Le moyen le plus simple consiste à extraire la dernière image Docker du registre des conteneurs GitHub:
docker pull ghcr.io/fkie-cad/cwe_checker:latest donne une image basée sur la branche maître actuelle.docker pull ghcr.io/fkie-cad/cwe_checker:stable donne une image basée sur la dernière version de version stable.docker pull ghcr.io/fkie-cad/cwe_checker:v0.9 donne une image basée sur la version de version stable V0.9. Cependant, il est recommandé de passer à de nouvelles versions stables dès leur publication, car les améliorations entre les versions stables peuvent être assez importantes.Si vous voulez construire vous-même l'image Docker, courez simplement
docker build -t cwe_checker .
De cette façon, vous pouvez également créer des images Docker natives pour les PC basés sur ARM (par exemple, les nouveaux Mac Apple). Les images docker prédéfinies ne sont actuellement que sur x86.
Les dépendances suivantes doivent être installées pour construire et installer le CWE_CHECKER localement:
Exécutez make all GHIDRA_PATH=/path/to/ghidra_folder (avec le chemin correct vers l'installation de Ghidra locale insérée) pour compiler et installer le cwe_checker. Si vous omettez l'argument GHIDRA_PATH , l'installateur recherchera votre système de fichiers pour une installation locale de Ghidra.
Le CWE_CHECKER prend une entrée binaire, exécute plusieurs vérifications basées sur une analyse statique sur le binaire, puis publie une liste des avertissements CWE qui ont été trouvés lors de l'analyse.
Si vous utilisez l'image Docker officielle, exécutez simplement
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputSi vous avez installé le CWE_CHECKER localement, exécutez
cwe_checker BINARYSi vous utilisez Nix Flakes, courez
nix run github:fkie-cad/cwe_checker -- BINARY Vous pouvez ajuster le comportement de la plupart des vérifications via un fichier de configuration situé sur src/config.json . Si vous le modifiez, ajoutez l'indicateur de ligne de commande --config=src/config.json pour dire au cwe_checker d'utiliser le fichier modifié. Pour plus d'informations sur les autres indicateurs de ligne de commande disponibles, vous pouvez passer l'indicateur --help au cwe_checker .
Il existe un support expérimental pour l'analyse des modules de noyau à charge Linux (LKMS). CWE_CHECKER reconnaîtra si vous passez un LKM et exécutera un sous-ensemble des vérifications CWE disponibles pour les programmes d'espace utilisateur. Les analyses sont configurables via un fichier de configuration séparé.
Si vous utilisez la version stable, vous pouvez également consulter la documentation en ligne pour plus d'informations.
Le CWE_CHECKER offre un support expérimental pour l'analyse des binaires à métal nu. Pour cela, il faut fournir un fichier de configuration en métal nu via l'option de la ligne de commande --bare-metal-config . Un exemple pour un tel fichier de configuration peut être trouvé sur bare_metal/stm32f407vg.json (qui a été créé et testé pour un MCU STM32F407VG).
Pour plus d'informations, jetez un œil à la documentation en ligne.
Les binaires de test pour notre suite de tests peuvent être construits avec make compile_test_files (besoin docker à installer!). La suite de tests peut ensuite être exécutée avec make test .
La documentation du code source peut être construite avec make documentation . Pour la version stable, la documentation peut être trouvée ici.
Jusqu'à présent, les analyses suivantes sont mises en œuvre:
Veuillez noter que les faux positifs et les faux négatifs sont à prévoir en raison des raccourcis et de la nature de l'analyse statique ainsi que de la sur-approximation. Vous pouvez trouver des informations sur le fonctionnement interne de chaque chèque ainsi que des raisons connues pour les faux positifs et les faux négatifs sur les pages de documentation spécifiques à la vérification.
CWE_CHECKER est livré avec un script pour Ghidra, qui analyse la sortie du CWE_CHECKER et annote les CWE trouvés dans le désassembleur pour une analyse manuelle plus facile. Le script est situé sur ghidra_plugin/cwe_checker_ghidra_plugin.py , les instructions d'utilisation sont contenues dans le fichier.

Le CWE_CHECKER est également intégré en tant que plugin en fait. Si vous souhaitez intégrer le CWE_CHECKER dans votre propre chaîne d'outils d'analyse, vous pouvez utiliser l'indicateur de ligne de commande --json (en combinaison avec les options --quiet ou --out=... de la ligne de commande) pour générer les avertissements CWE dans un format de sortie JSON facilement pasable.
Construire la documentation à l'aide cargo doc --open --document-private-items --no-deps vous donnera plus d'informations sur la structure interne du CWE_CHECKER. Cependant, la meilleure documentation est toujours le code source lui-même. Si vous avez des questions, assurez-vous de leur poser sur notre page de discussions! Nous nous efforçons constamment d'améliorer l'extensibilité et la documentation et vos questions nous aideront à y parvenir!
Pour obtenir un aperçu rapide / initial de ses internes, vous pouvez également consulter les diapositives des présentations de conférence sur le CWE_CHECKER dans le dossier DOC . Nous avons présenté jusqu'à présent CWE_CHECKER lors des conférences suivantes:
Les contributions sont toujours les bienvenues. Il suffit de le faire et d'ouvrir une demande de traction!
Ce projet est en partie financé par le Bureau fédéral allemand pour la sécurité de l'information (BSI).
Un remerciement spécial va à la communauté BAP (en particulier le Gitter officiel) pour avoir répondu aux questions et discuté des solutions.
Copyright (C) 2018 - 2024 Fraunhofer FKIE ([email protected])
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.