Partager via


Utiliser BinSkim pour examiner les fichiers binaires pour identifier les vulnérabilités

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.

  1. Téléchargez et installez le SDK .NET Core multiplateforme .

  2. 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.

  3. 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.

  4. 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
    
  5. Accédez à ce répertoire que vous venez de créer.

    C:\> Cd \binskim-master
    
  6. 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
    
  7. Déplacez-vous dans le nouveau répertoire binskim créé par la commande clone.

    C:\> Cd \binskim-master\binskim
    
  8. 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
    
    ...
    
    
  9. 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>
    
  10. 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.

  1. 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"
    
  2. 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 ».

  3. 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).
    
  4. 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.
    
  5. 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.

Capture d’écran de la boîte de dialogue pour désactiver des avertissements spécifiques dans Visual Studio 2019.

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.

C4603 - 'name' : la macro n’est pas définie ou la définition est différente après l’utilisation de l’en-tête précompilé

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.

Voir aussi

liste de contrôle de sécurité du pilote