Introduction
Microsoft Azure Attestation est un service unifié de certification pour les clients de Microsoft Azure. Il permet de valider l’état de sécurité d’un appareil ou d’une application, ce qui peut être utilisé pour renforcer la sécurité des charges de travail cl oud – en particulier pour les charges de calcul qui s’appuient sur la technologie Azure Confidential Computing. 🛡️
Comme je vous en ai déjà parlé dans mon précédent article : avec Azure Confidential Computing il est possible de créer des machines virtuelles et des containers dont la confidentialité est garantie par des éléments de sécurité présent sur des puces AMD, Intel ou encore Nvidia sur les serveurs physiques qui hébergent ces ressources.
Evidemment pour que ça fonctionne, il faut que ces éléments de sécurité ne reposent pas (uniquement) sur la confiance envers votre hébergeur cloud (Azure dans le cas présent) mais il faut également que cette sécurité puisse être vérifiée. Et cela, les acteurs du Cloud l’ont bien compris.
Pour ce faire, les constructeurs comme NVidia, Intel ou encore AMD proposent généralement un kit qui permet de récupérer des informations sur les VM sécurisées afin de s’assurer que le contenu de la RAM ou le CPU n’ont pas été altérés et donc que la partie logicielle qui fonctionne sur la VM ou le container s’exécute en parfaite sécurité.
Evidemment, ce contrôle peut être effectué manuellement mais l’objectif est plutôt de le « coder » afin que l’application ou la charge de calcul qui s’exécute puisse vérifier à tout moment qu’elle s’exécute dans une enclave sécurisée (ou TEE – Trusted Execution Environment).
L’objectif est de pouvoir récupérer certaines métadonnées qui vont venir confirmer / attester de l’état de sécurité de notre VM ou container. La méthodologie diffère évidemment selon que votre VM fonctionne utilise un processeur sécurisé Intel, AMD ou autre.
- Pour Intel, la méthode et des exemples de scripts sont détaillés sur la page suivante : https://github.com/intel/confidential-computing-zoo.
- Pour AMD, vous trouverez aussi un kit sur le lien GitHub suivant : https://github.com/AMDESE/sev-guest ou encore VirTEE via ce second repository : https://github.com/virtee/.
Mais Microsoft a également prévu de proposer son propre service qui s’appelle Azure Attestation. Plus d’infos en suivant les 2 liens ci-dessous : Microsoft Azure Attestation (FR) ou https://learn.microsoft.com/en-us/azure/attestation/overview. Pour l’instant, vous ne verrez rien de « graphique » puisque Microsoft semble encore travailler à l’intégration de ce composant au portail Azure (en tout cas au moment où je rédige cet article).
Je vous propose de tester ce service dans les étapes ci-dessous avec une VM Linux. 🛡️
Présentation du service Microsoft Azure Attestation
Le service Azure Attestation fonctionne en utilisant un cadre de confiance (trust framework) qui définit les politiques et les procédures utilisées pour valider l’état de sécurité d’un appareil ou d’une application. Le cadre de confiance peut être défini par l’utilisateur ou utiliser des politiques par défaut prédéfinies par Microsoft.
Pour valider l’état de sécurité d’un appareil ou d’une application, Azure Attestation utilise une combinaison de méthodes, notamment :
- L’authentification du matériel (hardware authentication) : cette méthode utilise des informations spécifiques au matériel, telles que le numéro de série ou la configuration du BIOS, pour identifier un appareil.
- L’authentification du logiciel (software authentication) : cette méthode utilise des informations spécifiques au logiciel, telles que la version du système d’exploitation ou la présence de logiciels malveillants, pour identifier un appareil.
- L’évaluation des politiques : cette méthode utilise les politiques définies dans le cadre de confiance pour évaluer l’état de sécurité d’un appareil ou d’une application.
Ce type de service permet de contrôler la sécurité et la conformité d’une charge de calcul dans Azure (VM, container) dans différents cas d’usage et notamment : protection des charges de travail sensibles (données personnelles, secrets commerciaux / industrieux, – et tous les usages où vous utiliseriez Azure Confidential Computing.
Exemple d’utilisation sur une VM Ubuntu
Je vous propose de tester le service Azure Attestation sur une machine Linux que nous allons déployer avec un gabarit Azure Confidential Computing.
# Resource Group creation
az group create --name "Confidential-VM" --location northeurope
# VM creation Confidential Computing
az vm create --resource-group "Confidential-VM" --name "VM-ACC" `
--generate-ssh-keys --size Standard_DC4as_v5 --admin-username thibault --admin-password "testpassword" `
--enable-vtpm true --image "Canonical:0001-com-ubuntu-confidential-vm-focal:20_04-lts-cvm:latest" `
--public-ip-sku Standard --security-type ConfidentialVM `
--os-disk-security-encryption-type VMGuestStateOnly `
--enable-secure-boot true
Avec ces premières commandes, je créée un nouveau Resource Group et une VM Confidential Computing Ubuntu. N’oubliez pas de modifier le login et le mot de passe que vous souhaitez utiliser. Vous pouvez également adapter la taille – dans mon cas, j’ai choisi une DC4as_v5 (4 vCPU / 16 Go de RAM). Après quelques instants, vous devriez avoir les objets ci-dessous.
Pour pouvoir utiliser Microsoft Azure Attestation, connectez-vous sur la VM en SSH et commencez par installer les prérequis suivants.
sudo apt update && sudo apt-get --assume-yes install build-essential && sudo apt-get --assume-yes install libcurl4-openssl-dev && sudo apt-get --assume-yes install libjsoncpp-dev && sudo apt-get --assume-yes install libboost-all-dev && sudo apt --assume-yes install nlohmann-json3-dev && wget https://packages.microsoft.com/repos/azurecore/pool/main/a/azguestattestation1/azguestattestation1_1.0.2_amd64.deb && sudo dpkg -i azguestattestation1_1.0.2_amd64.deb
Vous devriez obtenir ceci :
Maintenant, nous pouvons récupérer les sources de l’outil Microsoft Azure Attestation sur le repository GitHub officiel. Pour ce faire, utilisez la commande ci-dessous :
git clone https://github.com/Azure/confidential-computing-cvm-guest-attestation.git && cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app && sudo apt --assume-yes install cmake && sudo apt --assume-yes install g++ && sudo cmake . && sudo make
C’est du C++ donc la commande permet de compiler également l’application.
Vous devriez obtenir le retour ci-dessous :
Une fois que c’est bon, utilisez la commande suivante pour récupérer le token :
sudo ./AttestationClient -o token
Vous obtiendrez alors quelque-chose comme ça :
Si vous copiez-collez l’ensemble du token sur le site suivant : https://jwt.io/ vous pourrez alors le décoder pour mieux voir les informations qu’il contient :
On récupère des informations classiques comme la version d’OS (dans mon cas une Ubuntu 20.04 ou encore le fait que le fait que mon attestation est associée à une VM de type SEV-SNP – donc on sait que c’est une VM confidentielle de type AMD.
Si je regarde un peu plus bas, j’ai d’autres éléments comme le fait que la VM dispose bien du Secure Boot activé, vTPM activée… et encore d’autres claims. Si vous souhaitez approfondir sur les éléments intégrés à ce token, je vous invite à consulter le site de Microsoft via ce lien (attention, c’est technique). 😉
Il ne vous reste plus qu’à automatiser ces éléments de contrôles au lancement de votre application.
Cet exemple d’utilisation est inspiré de la procédure que vous retrouvez sur GitHub ici. J’ai simplement ajouté l’option « –assume-yes » pour vous éviter d’avoir à confirmer l’installation des dépendances. Tout va s’installer automatiquement sans vous demander de confirmation. 😉
Exemple d’utilisation sur une VM Windows Server 2022 (Azure Edition)
Afin que cet article soit complet, je vous propose de réaliser le même test mais cette fois-ci sur une VM Windows Server. Perso, j’utilise un Windows Server 2022 – Azure Edition. Histoire de changer un peu, j’ai cette fois-ci créée ma VM via l’interface graphique du portail web d’Azure.
Voici ce que j’ai choisi :
On retrouve bien la dénomination « C » pour Confidential dans le nom de la VM et le « a » signifie que je suis toujours sur une VM confidential de type AMD.
Evidemment, le processus d’installation de Microsoft Azure Attestation va être plus simple sur un Windows Server grâce à l’interface graphique. 😁 – Il vous suffit de vous rendre sur le même repository GitHub mais je vous donne le lien direct pour plus de simplicité : https://github.com/Azure/confidential-computing-cvm-guest-attestation/tree/main/cvm-platform-checker-exe. Dans le dossier Windows, récupérez le fichier ZIP suivant : cvm_windows_attestation_client.zip.
Décompressez le tout et commencez par installer le VC Redist x64.
Une fois que c’est bon, ouvrez un CMD et exécutez la commande ci-dessous pour retrouver le token de notre VM Azure Confidential Computing :
AttestationClientApp.exe -o token
Vous obtenez le même retour que pour notre VM Ubuntu :
Retournez sur le site https://jwt.io/ pour copier-coller votre token et voir ce qu’il contient. On retrouve des informations similaires à notre VM Ubuntu.
Pour Windows Server, vous pouvez retrouver la procédure que j’ai détaillé ci-dessus sur le repository GitHub officiel de Microsoft via ce lien : https://github.com/Azure/confidential-computing-cvm-guest-attestation/tree/main/cvm-platform-checker-exe.
Conclusion
Voilà, vous savez désormais utiliser Microsoft Azure Attestation au sein d’une VM Linux et même Windows Server. C’est un service qui peut être utilisé pour contrôler / attester de la sécurité des charges de travail dans le cloud en vérifiant la confidentialité de sa VM configurée en Azure Confidential Computing sur le cloud de Microsoft. 👍 Evidemment pour l’instant, c’est essentiellement de la CLI mais on imagine assez facilement que Microsoft ajoutera une nouvelle option directement dans le portail Azure à termes.
Plus d’informations sur les liens suivants de Microsoft :