Automatisez la recherche de failles dans Python avec Thoth


  • FrançaisFrançais


  • La plupart des cyberattaques tirent parti des vulnérabilités connues du public. De nombreux programmeurs peuvent automatiser les builds à l’aide des techniques d’intégration continue/déploiement continu (CI/CD) ou DevOps. Mais comment pouvons-nous automatiser les vérifications des failles de sécurité qui apparaissent toutes les heures dans différentes bibliothèques libres et open source ? De nombreuses méthodes existent maintenant pour débusquer les versions boguées des bibliothèques lors de la construction d’une application.

    Cet article se concentrera sur Python car il dispose d’outils sophistiqués pour vérifier la sécurité des dépendances. En particulier, l’article explore Projet Thot car il rassemble bon nombre de ces outils pour automatiser les constructions de programmes Python avec des contrôles de sécurité dans le cadre du processus de résolution. L’un des auteurs, Fridolín, est un contributeur clé de Thoth.

    Contributions aux efforts de sécurité automatisés

    Cette section répertorie les efforts déployés pour fournir au public des informations sur les vulnérabilités. Il se concentre sur les outils liés au sujet de l’article : Rapports de vulnérabilités dans les bibliothèques Python open source.

    Programme Common Vulnerabilities and Exposures (CVE)

    Toute discussion sur la sécurité des logiciels doit commencer par l’ensemble Base de données CVE, qui rassemble des failles découvertes par des milliers de chercheurs dispersés. Les autres projets de cet article dépendent fortement de cette base de données. Il est géré par le National Institute of Standards and Technology (NIST) des États-Unis, et ses ajouts sont organisés par MITRE, une société à but non lucratif spécialisée dans les logiciels open source et soutenue par le gouvernement américain. La base de données CVE alimente de nombreux projets connexes, tels que le Site de statistiques CVE Details.

    Une personne ou un outil automatisé peut trouver des packages et des versions exacts associés à des vulnérabilités de sécurité dans un format structuré, ainsi qu’un texte moins structuré expliquant la vulnérabilité, comme indiqué ci-dessous.

    (Fridolín Pokorný et Andy Oram, CC BY-SA 4.0)

    Efforts de sécurité de la Python Packaging Authority

    Le Autorité d’emballage Python (PyPA) est la principale organisation créant les meilleures pratiques pour les packages open source en langage Python. Des bénévoles de nombreuses entreprises soutiennent PyPA. Les initiatives liées à la sécurité de PyPA sont des avancées significatives pour rendre Python robuste.

    Base de données consultative de PyPA traite les vulnérabilités connues dans les packages Python sous une forme lisible par machine. Encore un autre projet, pip-audit, pris en charge par PyPA, audite les exigences des applications et signale toute vulnérabilité connue dans les packages utilisés. La sortie de pip-audit peut être à la fois dans des formats lisibles par l’homme et structurés tels que JSON. Ainsi, les outils automatisés peuvent consulter la base de données consultative ou pip-audit pour avertir les développeurs des risques dans leurs dépendances.

    UN vidéo de Dustin Ingramresponsable de PyPI, explique le fonctionnement de ces projets.

    Informations sur les sources ouvertes

    Une initiative appelée Informations sur les sources ouvertes essaie d’aider les développeurs open source en fournissant des informations dans des formats structurés sur les dépendances dans les écosystèmes de langage populaires. Ces informations incluent les avis de sécurité, les informations de licence, les dépendances des bibliothèques, etc.

    Pour exercer un peu Open Source Insights, nous avons recherché la célèbre bibliothèque de science des données TensorFlow et découvert que (au moment d’écrire ces lignes) elle a un avis de sécurité sur PyPI (voir ci-dessous). Cliquer sur le bouton PLUS DE DÉTAILS affiche des liens qui peuvent aider à rechercher l’avis (deuxième image).

    (Fridolín Pokorný et Andy Oram, CC BY-SA 4.0)

    (Fridolín Pokorný et Andy Oram, CC BY-SA 4.0)

    Fait intéressant, la version de TensorFlow fournie par le gestionnaire de packages Node.js (npm) n’avait pas d’avis de sécurité à ce moment-là. Les langages de programmation utilisés dans ce cas peuvent être la raison de la différence. Cependant, l’incohérence apparente nous rappelle que la provenance peut faire une grande différence, et nous montrerons comment un processus automatisé de résolution des dépendances peut s’adapter à de tels problèmes.

    Informations sur les sources ouvertes obtient des informations de dépendance sur les packages Python en les installant dans un environnement propre. Les packages Python sont installée par le résolveur pip – l’outil d’installation le plus populaire pour les bibliothèques Python –de PyPI, l’index le plus populaire répertoriant les bibliothèques Python open source. Les informations de vulnérabilité de chaque package sont extraites du Base de données de vulnérabilité Open Source (OSV). OSV agit comme un service de triage, regroupant les vulnérabilités dans plusieurs écosystèmes linguistiques.

    Open Source Insights serait une ressource vraiment précieuse si elle disposait d’une API ; nous nous attendons à ce que les développeurs en ajoutent un à un moment donné. Même si les informations ne sont actuellement disponibles que sous forme de pages Web, le format structuré permet aux outils automatisés de gratter les pages et de rechercher des informations critiques telles que des avis de sécurité.

    Tableaux de bord de sécurité par l’Open Source Security Foundation

    La qualité des logiciels, qui est intimement liée à la sécurité, nécessite des pratiques de base telles que la réalisation de tests de régression avant de vérifier les modifications dans un référentiel, l’association de signatures cryptographiques aux versions et l’exécution d’analyses statiques. Certaines de ces pratiques peuvent être détectées automatiquement, permettant aux experts en sécurité d’évaluer la sécurité des projets à grande échelle.

    Un effort appelé Cartes de pointage de sécuritélancé en 2020 et soutenu par le Fondation de sécurité open source (OpenSSF), répertorie actuellement un quelques douzaines de ces contrôles automatisés. La plupart de ces vérifications dépendent des services GitHub et ne peuvent être exécutées que sur des projets stockés dans GitHub. Le projet est toujours très utile, étant donné la domination de GitHub pour les projets open source, et représente un modèle pour des systèmes de notation plus généraux.

    Projet Thot

    Project Thoth est un outil basé sur le cloud qui aide les programmeurs Python à créer des applications robustes, une tâche qui inclut la vérification de la sécurité ainsi que de nombreuses autres considérations. Red Hat a lancé Thoth, et il fonctionne dans le Red Hat OpenShift service cloud, mais son code est entièrement open source. Le projet a créé une communauté parmi les développeurs Python. Les développeurs peuvent copier les innovations du projet dans d’autres langages de programmation.

    Un outil qui aide les programmeurs à trouver des bibliothèques et à créer des applications s’appelle un résolveur. Le résolveur pip populaire sélectionne généralement la version la plus récente de chaque bibliothèque, mais est suffisamment sophistiqué pour prendre en compte les dépendances des dépendances dans une hiérarchie appelée a graphique de dépendance. pip peut même revenir en arrière et choisir une version différente d’une bibliothèque pour gérer les spécifications de plage de versions trouvées en parcourant le graphe de dépendance.

    Lorsqu’il s’agit de choisir la meilleure version d’une dépendance, Thoth peut faire bien plus que piper. Voici un aperçu de Thoth avec un œil particulier sur la façon dont il contribue à la sécurité.

    Présentation de Thot

    Thoth prend en compte de nombreux éléments de l’environnement d’un programme lors de l’installation des dépendances : le processeur et le système d’exploitation sur lesquels le programme s’exécutera, les métadonnées sur le conteneur de l’application telles que celles extraites par Skopéo, et même des informations sur le GPU qu’une application d’apprentissage automatique utilisera. Thoth peut prendre en compte plusieurs autres variables, mais vous pouvez probablement deviner à partir de la liste précédente que Thoth a été développé en premier pour prendre en charge l’apprentissage automatique dans les conteneurs. Le développeur fournit à Thoth des informations sur l’environnement de l’application dans un fichier de configuration.

    Quels sont les avantages des informations sur l’environnement ? Il permet à Thoth d’exclure les versions des bibliothèques présentant des vulnérabilités connues dans l’environnement spécifié. Un développeur qui remarque qu’une construction échoue ou rencontre des problèmes lors d’une exécution peut stocker des informations sur les versions des dépendances à utiliser ou à éviter dans une spécification appelée ordonnanceconsulté par Thot pour les futurs utilisateurs.

    Thoth peut même exécuter des tests sur les programmes et leurs environnements. Actuellement, il utilise Claire pour exécuter des tests statiques sur le contenu des images de conteneurs et stocke des informations sur les vulnérabilités trouvées. À l’avenir, les développeurs de Thoth prévoient d’exécuter des applications réelles avec diverses combinaisons de versions de bibliothèque, en utilisant un projet du Autorité de qualité du code Python (PyCQA) nommé Bandit. Thoth exécutera Bandit sur chaque code source de package séparément et combinera les résultats pendant le processus de résolution.

    Les différentes versions des différentes bibliothèques peuvent provoquer une explosion combinatoire (trop de combinaisons possibles pour toutes les tester). Thoth modélise donc la résolution des dépendances comme un Processus décisionnel de Markov (MDP) pour décider du sous-ensemble le plus productif à exécuter.

    Parfois, la sécurité n’est pas la principale préoccupation. Par exemple, vous envisagez peut-être d’exécuter un programme dans un réseau privé isolé d’Internet. Dans ce cas, vous pouvez dire à Thoth de donner la priorité à d’autres avantages, tels que les performances ou la stabilité, par rapport à la sécurité.

    Thoth stocke ses choix de dépendance dans un fichier de verrouillage. Les fichiers de verrouillage “verrouillent” des versions particulières de dépendances particulières. Sans les fichiers de verrouillage, des vulnérabilités de sécurité subtiles et d’autres bogues peuvent s’infiltrer dans l’application de production. Dans le pire des cas, sans verrouillage, les utilisateurs peuvent être confrontés à ce que l’on appelle “attaques de confusion de dépendance”.

    Par exemple, un résolveur peut choisir d’obtenir une bibliothèque à partir d’un index avec une version boguée car l’index à partir duquel le résolveur obtient généralement la dépendance est temporairement indisponible.

    Un autre risque est qu’un attaquant puisse augmenter le numéro de version d’une bibliothèque dans un index, obligeant un résolveur à choisir cette version car il s’agit de la plus récente. La version souhaitée existe dans un index différent mais est ignorée au profit de celle qui semble plus à jour.

    Conclure

    Thoth est une collection complexe et croissante d’outils open source. Les principes de base derrière ses résolutions de dépendance peuvent être une source d’inspiration pour d’autres projets. Ces principes sont :

    1. Un résolveur doit vérifier régulièrement les vulnérabilités en grattant des sites Web tels que la base de données CVE, en exécutant des vérifications statiques et via toute autre source d’informations. Les résultats doivent être stockés dans une base de données.
    2. Le résolveur doit examiner les dépendances des dépendances et revenir en arrière lorsqu’il découvre qu’un bogue ou une faille de sécurité nécessite de modifier une décision que le résolveur a prise précédemment.
    3. Les résultats du résolveur et les informations renvoyées par les développeurs utilisant le résolveur doivent être stockés et utilisés dans les décisions futures.

    En bref, avec la richesse des informations sur les vulnérabilités de sécurité disponibles de nos jours, nous pouvons automatiser la résolution des dépendances et produire des applications plus sûres.

    Source

    N'oubliez pas de voter pour cet article !
    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading...

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée.