Intégrité du code de la plateforme

Un défi majeur dans le fonctionnement d’un système complexe tel que Microsoft Azure consiste à garantir que seuls les logiciels autorisés s’exécuteront dans le système. Les logiciels non autorisés présentent différents risques pour les entreprises :

  • Risques de sécurité, tels que les outils d’attaque dédiés, les programmes malveillants personnalisés et les logiciels tiers présentant des vulnérabilités connues
  • Risques de conformité lorsque le processus de gestion des modifications approuvées n’est pas utilisé pour intégrer un nouveau logiciel
  • Risque de qualité lié à un logiciel développé en externe, qui pourrait ne pas répondre aux exigences opérationnelles de l’entreprise

Azure fait face au même défi avec une complexité significative. Des milliers de serveurs exécutent des logiciels que des milliers d’ingénieurs développent et maintient. Cette échelle présente une grande surface d’attaque que les processus métier seuls ne peuvent gérer.

Ajout d’un contrôle d’autorisation

Azure utilise un processus d’ingénierie riche qui met en place des portes sur la sécurité, la conformité et la qualité des logiciels déployés. Ce processus inclut le contrôle d’accès au code source, la revue de code par des pairs, l’analyse statique des vulnérabilités de sécurité, le Security Development Lifecycle (SDL) de Microsoft, ainsi que les tests fonctionnels et qualité. Microsoft doit s’assurer que les logiciels déployés passent par ce processus. L’intégrité du code aide à obtenir cette garantie.

Intégrité du code comme mécanisme de contrôle des autorisations

L’intégrité du code est un service au niveau du noyau qui est devenu disponible à partir de Windows Server 2016. L’intégrité du code peut appliquer une stratégie stricte de contrôle d’exécution chaque fois qu’un pilote ou une bibliothèque de liens dynamiques (DLL) est chargé, qu’un fichier binaire exécutable est exécuté ou qu’un script est lancé. Des systèmes similaires, tels que DM-Verity, existent pour Linux. Une politique d’intégrité de code consiste en un ensemble d’indicateurs d’autorisation, soit des certificats de signature de code, soit des hachages de fichiers SHA-256 , que le noyau correspond avant de charger ou d’exécuter un binaire ou un script.

L’intégrité du code permet aux administrateurs système de définir une politique qui n’autorise que les binaires et scripts signés par certains certificats ou correspondant à des hachages SHA-256 spécifiés. Le noyau applique cette stratégie en bloquant l’exécution de tout ce qui ne se conforme pas à la stratégie définie.

Une politique d’intégrité du code peut bloquer un logiciel critique en production et provoquer une panne à moins que la politique ne soit parfaitement correcte. Face à cette préoccupation, vous pourriez vous demander pourquoi la surveillance de sécurité n’est pas suffisante pour détecter l’exécution non autorisée de logiciels. L’intégrité du code dispose d’un mode audit qui, au lieu d’empêcher l’exécution, peut alerter lorsque des logiciels non autorisés s’exécutent. L’alerte peut apporter une grande valeur pour faire face aux risques liés à la conformité. Cependant, pour les risques de sécurité tels que les ransomwares ou les malwares personnalisés, retarder la réponse de quelques secondes peut faire la différence entre la protection et un adversaire qui gagne une présence persistante dans votre flotte. Dans Azure, Microsoft investit considérablement pour gérer tout risque d’intégrité du code pouvant entraîner une panne impactant les clients.

Processus de compilation

Comme décrit précédemment, le système de compilation Azure dispose d’un ensemble riche de tests pour garantir que les modifications logicielles sont sécurisées et conformes. Après qu’une compilation ait progressé dans la validation, le système de compilation la signe en utilisant un certificat de compilation Azure. Le certificat indique que la compilation a traversé l’ensemble du processus de gestion des changements. Le dernier test que la compilation effectue est la validation de signature de code (CSV). CSV confirme que les binaires nouvellement créés respectent la politique d’intégrité du code avant que Microsoft ne les déploie en production. Cette validation confère à Microsoft une grande confiance que des binaires mal signés ne provoqueront pas une panne qui impacte le client. Si le CSV détecte un problème, la compilation se casse et les ingénieurs concernés sont appelés pour enquêter et corriger le problème.

Sécurité pendant le déploiement

Même si Azure exécute le CSV pour chaque compilation, un changement ou une incohérence en production peut tout de même provoquer une panne liée à l’intégrité du code. Par exemple, une machine peut exécuter une ancienne version de la politique d’intégrité du code, ou elle peut être dans un état malsain qui produit des faux positifs dans l’intégrité du code. À l’échelle Azure, Microsoft a tout vu. Azure continue de protéger contre le risque de panne lors du déploiement.

Toutes les modifications dans Azure doivent être déployées à travers une série d’étapes. Les premières étapes sont des instances internes de test Azure. L’étape suivante ne sert qu’aux autres équipes produit Microsoft. La dernière étape concerne les clients tiers. Lorsqu’Azure déploie une modification, celle-ci passe d’une étape à l’autre et s’interrompt à chaque étape pour en mesurer l’état. Si le changement n’a pas d’impact négatif, il passe à l’étape suivante. Si Microsoft apporte une modification incorrecte à une stratégie d’intégrité du code, le déploiement progressif détecte cette modification et rétablit la version précédente.

Réponse aux incidents

Même avec cette protection en couches, un serveur de la flotte pourrait bloquer des logiciels dûment autorisés et causer un problème destiné aux clients, l’un des pires scénarios de Microsoft. La dernière couche de défense est l’enquête humaine. Chaque fois que l’intégrité du code bloque un fichier, il déclenche une alerte que les techniciens appelés doivent examiner. L’alerte permet aux ingénieurs de lancer des enquêtes de sécurité et d’intervenir, que le problème soit un indicateur d’une attaque réelle, d’un faux positif ou d’une autre situation impactant le client. Cette alerte minimise le temps nécessaire pour atténuer tout problème lié à l’intégrité du code.

Étapes suivantes

Pour en savoir plus sur la manière dont Microsoft gère l’intégrité et la sécurité des plateformes, voir :