Comment atténuer les attaques de la chaîne d’approvisionnement avec le contrôle en amont –
Les risques d’attaques de la chaîne d’approvisionnement ont gagné en visibilité ces derniers temps à la suite des piratages SolarWinds et Codecov. Les attaquants compromettent les fournisseurs de code en amont pour introduire des sources malveillantes dans des produits logiciels.
De nombreuses applications téléchargent des dépendances externes au cours de leurs routines de génération. L’utilisation de ces téléchargements en l’état peut être dangereuse. Comment savez-vous que le fichier sur le serveur n’a pas été remplacé par une version malveillante ?
curl https://example.com/install-script.sh | sh
Cette commande illustre la plus simple des attaques de chaîne d’approvisionnement. Introduire un script d’installation dans votre shell est pratique mais risqué. Si example.com
a été compromis, vous venez de donner à un attaquant un accès illimité à votre système.
Sommaire
Sommes de contrôle des fichiers
Vous pouvez atténuer les dangers de cette approche en vérifiant si le fichier téléchargé correspond à une somme de contrôle connue. De nombreux projets open source réputés publieront une somme de contrôle que vous pourrez comparer. N’exécutez le fichier que si sa somme de contrôle calculée correspond à votre valeur connue.
L’implémentation de cette vérification dans vos scripts de build peut rapidement devenir répétitive. Le contrôle en amont est un outil qui vous aide à effectuer des comparaisons de sommes de contrôle afin d’éviter les attaques courantes de la chaîne d’approvisionnement.
Le contrôle en amont accepte le chemin d’un binaire et une somme de contrôle pour le comparer. Si la somme de contrôle du fichier correspond, il sera exécuté normalement. Sinon, la commande est abandonnée, protégeant votre script de build ou votre pipeline CI contre l’inclusion de code malveillant involontaire.
Utilisation du contrôle en amont
Vous pouvez télécharger Preflight à partir de sa page de versions GitHub. L’outil est également distribué sous forme de preflight
dans le gestionnaire de paquets Homebrew.
Dans sa forme la plus simple, Preflight peut être utilisé partout où vous chercheriez normalement | sh
. Transférez une autre commande dans Preflight, fournissant une somme de contrôle à faire correspondre avant que quoi que ce soit ne soit exécuté.
curl https://example.com/install-script.sh | preflight run sha256=abc...123
Désormais, le script d’installation ne sera exécuté que s’il correspond à la somme de contrôle connue. Cela vous donne l’assurance que le contenu du fichier n’a pas été falsifié. Le contrôle en amont prend en charge le sha256
, sha1
et md5
types de hachage.
Vous devez coder en dur les sommes de contrôle connues dans vos scripts de construction. Ne pas télécharger un fichier de somme de contrôle fourni par le même serveur que le fichier cible. Supposons qu’un attaquant ayant la possibilité de modifier le script ait également téléchargé un faux fichier de somme de contrôle.
Contrôles programmatiques
Parfois, vous souhaiterez peut-être effectuer une action selon qu’un fichier correspond avec succès à sa somme de contrôle. Dans ce cas, vous pouvez utiliser preflight check
pour effectuer la comparaison sans exécuter réellement le fichier.
curl https://example.com/install-script.sh | preflight check sha256=abc...123
La commande se terminera avec le code d’état 0
si la somme de contrôle du fichier correspond. Un code d’état de 1
sera émis en cas de divergence. Le contrôle en amont émet également un message d’erreur dans le flux de sortie standard.
Créer des hachages avec le contrôle en amont
Tous les projets logiciels ne publient pas de hachage pour leurs versions. Preflight a un support intégré pour générer un nouveau hachage si vous en avez besoin pour une dépendance.
Téléchargez le fichier sur le site Web du fournisseur. Puis passez-le dans preflight create
pour obtenir le hachage du contenu du fichier.
wget https://example.com/install-script.sh
preflight create install-script.sh
Un hachage SHA256 est généré par défaut. Vous pouvez passer à SHA1 ou MD5 en ajoutant le --digest
drapeau à la commande.
Ajout d’analyses de logiciels malveillants
Au-delà des comparaisons de somme de contrôle de base, Preflight prend en charge l’analyse facultative des logiciels malveillants. Cette fonctionnalité analyse votre fichier par rapport aux signatures de logiciels malveillants connus.
Les listes de logiciels malveillants sont fournies par des services tiers. Le contrôle en amont fonctionne avec n’importe quel fichier texte contenant une liste de sommes de contrôle de logiciels malveillants connus. Malshare est l’un des fournisseurs de ces listes.
Met le PF_FILE_LOOKUP
variable d’environnement pour pointer vers l’emplacement de votre fichier. Le contrôle en amont détectera cette variable et activera les recherches de logiciels malveillants. Quand tu cours preflight check
ou alors preflight run
, la somme de contrôle du fichier cible sera comparée aux entrées de la liste des logiciels malveillants. La vérification échouera s’il y a une correspondance.
Qu’en est-il des autres types de dépendance ?
Le contrôle en amont se concentre sur les vérifications des fichiers statiques. Il convient mieux aux téléchargements binaires prédéfinis que vous achetez directement auprès du fournisseur.
Il est moins réaliste d’utiliser le contrôle en amont avec des dépendances acquises via les gestionnaires de packages. Les risques liés aux logiciels installés via npm, Composer, NuGet ou Maven devront être traités différemment. Vous pouvez utiliser les fonctionnalités du gestionnaire de packages telles que la portée des fournisseurs pour vous assurer que les dépendances sont installées à partir de référentiels approuvés.
Le contrôle en amont doit être un élément de votre défense contre les injections dans la chaîne d’approvisionnement. Analysez vos scripts de génération pour identifier les vecteurs d’intrusion fournis par d’autres formes de logiciels tiers.
Résumé
Les attaques de la chaîne d’approvisionnement sont un problème croissant qui affecte la sécurité des déploiements de logiciels. De nombreux développeurs intègrent des téléchargements directs de logiciels dans leurs scripts de construction. Cela pourrait donner aux attaquants un moyen d’inclure du code dans un projet cible, en compromettant un fournisseur en amont.
Le contrôle en amont simplifie les contrôles de sécurité des scripts et binaires tiers. Il y a cependant une certaine ironie : en utilisant Preflight, vous devenez dépendant d’un package tiers que vous devrez télécharger. Vous pouvez atténuer cela en créant vous-même un contrôle en amont à partir de la source et en hébergeant le binaire sur un serveur interne de confiance.