Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez BinSkim pour examiner les fichiers binaires pour identifier les pratiques de codage et de création qui peuvent potentiellement rendre le fichier binaire vulnérable. Il peut être utilisé pour vérifier les fichiers binaires qui sont prêts à être expédiés, pour vous aider à valider que rien ne s'est mal passé dans la chaîne de construction.
BinSkim vérifie les points suivants :
- Utilisation des ensembles d’outils de compilateur obsolètes : les fichiers binaires doivent être compilés sur les ensembles d’outils de compilateur les plus récents dans la mesure du possible pour optimiser l’utilisation des atténuations de sécurité actuelles au niveau du compilateur et du système d’exploitation.
- Paramètres de compilation non sécurisés : les fichiers binaires doivent être compilés avec les paramètres les plus sécurisés possibles pour activer les atténuations de sécurité fournies par le système d’exploitation, optimiser les erreurs du compilateur et les rapports d’avertissements actionnables, entre autres.
- Problèmes de signature : les fichiers binaires signés doivent être signés avec des algorithmes forts par chiffrement.
BinSkim est un outil open source et génère des fichiers de sortie qui utilisent le format d’échange des résultats d’analyse statique (SARIF). BinSkim remplace l’ancien outil BinScope.
Pour plus d’informations sur BinSkim, consultez le guide utilisateur BinSkim.
Installer et exécuter BinSkim
Suivez ces étapes pour vérifier que les options de compilation de sécurité sont correctement configurées dans le code que vous expédiez.
Vérifiez que Visual Studio est installé. Pour plus d’informations sur le téléchargement et l’installation de Visual Studio, consultez Installer Visual Studio.
Il existe plusieurs options pour télécharger BinSkim, comme un package NuGet. Dans cet exemple, nous allons utiliser l’option de clonage Git pour télécharger à partir de là : https://github.com/microsoft/binskim et l’installer sur un PC Windows 64 bits.
Ouvrez une fenêtre d’invite de commande développeur Visual Studio et créez un répertoire, par exemple
C:\binskim-master
.C:\> Md \binskim-master
Accédez à ce répertoire que vous venez de créer.
C:\> Cd \binskim-master
Utilisez la commande git clone pour télécharger tous les fichiers nécessaires.
C:\binskim-master> git clone --recurse-submodules https://github.com/microsoft/binskim.git
Déplacez-vous dans le nouveau répertoire
binskim
créé par la commande clone.C:\> Cd \binskim-master\binskim
Exécutez BuildAndTest.cmd pour vous assurer que la build de mise en production réussit et que tous les tests réussissent.
C:\binskim-master\binskim> BuildAndTest.cmd Welcome to .NET Core 3.1! --------------------- SDK Version: 3.1.101 ... C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64\BinSkim.Sdk.dll 1 File(s) copied C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\linux-x64\BinSkim.Sdk.dll 1 File(s) copied ...
Le processus de génération crée un ensemble de répertoires avec les exécutables BinSkim. Accédez au répertoire de sortie de build win-x64.
C:\binskim-master\binskim> Cd \binskim-master\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64>
Affichez l’aide pour l’option d’analyse.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim help analyze
BinSkim PE/MSIL Analysis Driver 1.6.0.0
--sympath Symbols path value, e.g., SRV*http://msdl.microsoft.com/download/symbols or Cache*d:\symbols;Srv*http://symweb. See
https://learn.microsoft.com/windows-hardware/drivers/debugger/advanced-symsrv-use for syntax information. Note that BinSkim will clear the
_NT_SYMBOL_PATH environment variable at runtime. Use this argument for symbol information instead.
--local-symbol-directories A set of semicolon-delimited local directory paths that will be examined when attempting to locate PDBs.
-o, --output File path to which analysis output will be written.
--verbose Emit verbose output. The resulting comprehensive report is designed to provide appropriate evidence for compliance scenarios.
...
Définir le chemin des symboles pour BinSkim
Si vous générez tout le code que vous analysez sur le même ordinateur sur lequel vous exécutez BinSkim, vous n’avez généralement pas besoin de définir le chemin d’accès aux symboles. Cela est dû au fait que vos fichiers de symboles sont disponibles dans la zone locale où vous avez compilé. Si vous utilisez un système de build plus complexe ou redirigez vos symboles vers un autre emplacement (et non à côté du binaire compilé), utilisez --local-symbol-directories
pour ajouter ces emplacements à la recherche de fichiers de symboles.
Si votre code fait référence à un binaire compilé qui ne fait pas partie de votre code, le sympath du débogueur Windows peut être utilisé pour récupérer des symboles afin de vérifier la sécurité de ces dépendances de code. Si vous rencontrez un problème dans ces dépendances, vous ne pourrez peut-être pas les résoudre. Mais il peut être utile de connaître tout risque de sécurité que vous acceptez en prenant ces dépendances.
Conseil
Lors de l’ajout d’un chemin de symbole (qui fait référence à un serveur de symboles réseau), ajoutez un emplacement de cache local pour spécifier un chemin d’accès local pour mettre en cache les symboles. Ne pas faire cela peut compromettre considérablement les performances de BinSkim. L’exemple suivant spécifie un cache local à d :\symbols.
--sympath Cache*d:\symbols;Srv*http://symweb
Pour plus d’informations sur les chemins d’accès aux symboles, consultez Chemin d’accès aux symboles pour les débogueurs Windows.
Exécutez la commande suivante pour analyser un binaire de pilote compilé. Mettez à jour le chemin d’accès cible pour qu'il pointe vers votre fichier de pilote compilé .sys.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\echo.sys"
Pour des informations supplémentaires, ajoutez l’option verbose comme ceci.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys" --verbose
Remarque
L’option --verbose fournira des résultats explicites de réussite/échec pour chaque vérification. Si vous ne fournissez pas de commentaires, vous verrez uniquement les défauts détectés par BinSkim. L’option --verbose n’est généralement pas recommandée pour les systèmes d’automatisation réels en raison de la taille accrue des fichiers journaux et parce qu’elle rend plus difficile de récupérer des défaillances individuelles lorsqu’elles se produisent, car elles seront incorporées au milieu d’un grand nombre de résultats « pass ».
Passez en revue la sortie de commande pour rechercher les problèmes possibles. Cet exemple de sortie montre trois tests qui ont réussi. Des informations supplémentaires sur les règles, telles que BA2002, sont disponibles dans le guide utilisateur BinSkim.
Analyzing... Analyzing 'osrusbfx2.sys'... ... C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys\Debug\osrusbfx2.sys: pass BA2002: 'osrusbfx2.sys' does not incorporate any known vulnerable dependencies, as configured by current policy. C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: pass BA2005: 'osrusbfx2.sys' is not known to be an obsolete binary that is vulnerable to one or more security problems. C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys: pass BA2006: All linked modules of 'osrusbfx2.sys' generated by the Microsoft front-end satisfy configured policy (compiler minimum version 17.0.65501.17013).
Cette sortie montre que le test BA3001 n’est pas exécuté car l’outil indique que le pilote n’est pas un binaire ELF.
... C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: notapplicable BA3001: 'osrusbfx2.sys' was not evaluated for check 'EnablePositionIndependentExecutable' as the analysis is not relevant based on observed metadata: image is not an ELF binary.
Cette sortie affiche une erreur pour le test BA2007.
... C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: error BA2007: 'osrusbfx2.sys' disables compiler warning(s) which are required by policy. A compiler warning is typically required if it has a high likelihood of flagging memory corruption, information disclosure, or double-free vulnerabilities. To resolve this issue, enable the indicated warning(s) by removing /Wxxxx switches (where xxxx is a warning id indicated here) from your command line, and resolve any warnings subsequently raised during compilation.
Pour activer ces avertissements dans Visual Studio, sous C/C++ dans les pages de propriétés du projet, supprimez les valeurs que vous ne souhaitez pas exclure dans Désactiver les avertissements spécifiques.
Les options de compilation par défaut dans Visual Studio pour les projets de pilotes peuvent désactiver des avertissements tels que les suivants. Ces avertissements seront signalés par BinSkim.
C4627 - « description » : ignoré lors de la recherche de l’utilisation de l’en-tête pré-compilé
C4986 - 'déclaration' : la spécification d’exception ne correspond pas à la déclaration précédente
Pour plus d’informations sur les avertissements du compilateur, consultez Avertissements du compilateur par version du compilateur.