Pour passer inaperçus plus longtemps dans les environnements cloud, les attaquants ont commencé à abuser de services moins courants qui ne font pas l'objet d'un examen de sécurité approfondi de la part du fournisseur de cloud. C'est le cas de la campagne de cryptojacking Ambersquid découverte récemment, qui déploie des malware de minage de cryptomonnaie sur AWS Amplify, Fargate et SageMaker au lieu du plus évident Elastic Compute Cloud (EC2).

« L'opération Ambersquida pu exploiter des services cloud sans déclencher le processus d'approbation de ressources supplémentaires généralement exigé par AWS, ce qui aurait été le cas s'ils n'avaient spammé que des instances EC2 », ont déclaré les chercheurs de l’entreprise de sécurité Sysdig dans un rapport. « Cibler plusieurs services pose également des défis supplémentaires, notamment en matière de réponse aux incidents, puisqu'il faut trouver et supprimer tous les mineurs dans chaque service exploité », ont-ils ajouté.

Fonctionnement de la campagne

C’est en analysant 1,7 million d'images de conteneurs Linux hébergés sur Docker Hub pour y rechercher des charges utiles malveillantes que les chercheurs de Sysdig ont découvert la campagne de cryptojacking. Suite aux indices de cryptojacking trouvés lors de l’exécution d’un conteneur, une analyse plus poussée réalisée par les chercheurs a mis à jour plusieurs conteneurs similaires téléchargés par différents comptes depuis mai 2022 qui chargent des crypto-mineurs hébergés sur GitHub. À en juger par les commentaires utilisés dans les scripts malveillants à l'intérieur des conteneurs, les chercheurs pensent que les attaquants à l'origine de la campagne sont originaires d'Indonésie. Après leur déploiement sur AWS à l'aide d’identifiants volés, les images Docker malveillantes exécutent une série de scripts, à commencer par celui qui configure divers rôles et autorisations AWS. L'un d’eux appelé AWSCodeCommit-Role donne accès au service Amplify qui permet aux développeurs de créer, de déployer et d'héberger des applications web et mobiles complètes sur AWS. Ce rôle a également accès au service de référentiel de code source managé CodeCommit, et au service de surveillance de l'infrastructure et de visualisation des données CloudWatch.

Un deuxième rôle, appelé sugo-role, créé par les scripts de conteneur, dispose d’un accès complet à SageMaker, un autre service AWS utilisé par datascientist pour construire, entraîner et déployer des modèles d'apprentissage machine. Un troisième rôle appelé ecsTaskExecutionRole donne, quant à lui, accès à Elastic Container Service (ECS), un système de gestion de conteneurs Docker natif d'AWS. Les attaquants exploitent ensuite les rôles nouvellement créés dans divers services, à commencer par CodeCommit où ils créent un dépôt Git privé qui héberge le code dont ils ont besoin pour les prochaines étapes de leur attaque, ce qui leur évite de quitter l'écosystème AWS après la compromission initiale et réduit les risques d'alertes de trafic sortant. Le dépôt Git sert à héberger le code d'une application malveillante conçue pour être construite et déployée avec le service Amplify. Le script génère ensuite cinq applications Amplify à déployer dans différentes régions AWS et, dans le cadre de leurs scripts de construction, une commande télécharge et exécute un cryptomineur.

Fargate et CodeBuild dans le viseur

Étant donné que le cryptomining et le vol de ressources ont lieu pendant la construction de l'application, les attaquants ont ajouté du code pour prolonger ce processus autant que possible. Quand les applications finissent de se construire, un autre script est exécuté pour mettre à jour le code et le processus est redémarré, ce qui relance la phase de construction et, par conséquent, le cryptominage. Un autre script du conteneur met en place un processus similaire, mais sur le service ECS, qui permet de déployer des conteneurs sur des instances EC2, Fargate - le moteur de calcul serverless d'Amazon - ou des machines virtuelles sur site. Le script donne les autorisations nécessaires au compte ecsTaskExecutionRole, utilisé ensuite pour configurer une tâche ECS qui configure un conteneur sur Fargate avec deux CPU virtuels et 4 Go de RAM et déploie une image Linux regroupant un mineur. La tâche est configurée avec un desiredCount de 30, ce qui signifie que 30 instances seront créées.

Le service d'intégration continue CodeBuild, utilisé pour compiler et tester le code source, est une autre cible de cette campagne. Le fichier de spécification autorisant CodeBuild à exécuter des tâches peut inclure des commandes de compilation et les attaquants ont ajouté des commandes pour exécuter leur mineur. Les attaquants ont également fixé la valeur « timeout-in-minutes » pour la tâche de construction à un maximum de huit heures pour s'assurer que leur mineur fonctionnera pendant cette durée avant d'être redémarré. Ensuite, les attaquants ont ciblé le service d'infrastructure as-code, CloudFormation, qui propose aux utilisateurs de provisionner des ressources AWS et tierces via des modèles. Ces ressources peuvent être regroupées en piles et contrôlées comme une seule unité. « Les scripts des attaquants créent plusieurs piles CloudFormation à partir d'un modèle qui définit un composant EC2 Image Builder », ont expliqué les chercheurs. « Dans ce composant, ils mettent des commandes pour exécuter un mineur pendant la phase de construction de l'image. Ces commandes sont similaires à celles qui peuvent être définies dans un fichier Docker ».

Comme pour Amplify et CodeBuild, le processus de minage est lancé pendant une phase de construction. Les attaquants ont essayé de la prolonger autant que possible en ajoutant des commandes cron dans le modèle pour démarrer une nouvelle build toutes les minutes. Les attaquants ont également abusé de la fonction EC2 Auto Scaling, qui offre aux utilisateurs d'ajouter ou de supprimer des instances EC2 à l'aide de politiques de mise à l'échelle, définies dans des modèles. Cette fonction a été utilisée pour créer deux groupes de huit instances On-Demand et Spot, chacune exécutant une image de conteneur Docker avec un mineur. Enfin, les pirates ont aussi abusé des instances de calcul d'apprentissage machine exécutant Jupyter Notebook App dans le cadre du service Amazon SageMaker. Pour chaque instance Jupyter Notebook, les utilisateurs peuvent définir une configuration de cycle de vie qui inclut une série de scripts shell exécutés au moment de la création des instances. Ils ont utilisé cette fonctionnalité pour inclure une commande qui exécute Docker et déploie l'une de leurs images Docker Hub contenant un mineur. « L’abus de tous ces services, avec des instances de conteneurs voyous et des tâches de construction exécutées dans différentes régions, peuvent engendrer des coûts de fonctionnement de 2 244 dollars par jour et plus pour les victimes », ont estimé les chercheurs de Sysdig.

Des services cloud intégrant du calcul ciblés

« Les fournisseurs de services cloud (CSP) comme AWS offrent une gamme très étendue de services à leurs clients », ont déclaré les chercheurs. « Même si la plupart des attaquants motivés financièrement ciblent des services de calcul comme EC2, il est important de se rappeler que de nombreux autres services fournissent également un accès aux ressources de calcul (certes de manière plus indirecte). Or, on peut facilement négliger la sécurité de ces services, car la visibilité est moindre par rapport à celle offerte par la détection des menaces en cours d'exécution ».

Étant donné que bon nombre de ces services ne sont destinés qu'à exécuter du code temporairement, il n'est pas toujours possible d'installer des solutions de détection de l'exécution. Dans ce cas, les entreprises devraient mettre en place un système de journalisation et de surveillance des tendances d'utilisation de ces services sur leurs comptes afin d'identifier les anomalies et les comportements suspects.