Plongée au cœur des attaques de bases de données

2
207

Plongée au cœur des attaques de bases de données : Comment une photo de Scarlett Johansson a forcé une base Postgre à « miner » du Monero.

Tribune rédigée par Elad Erez et Luda Lazar de la société Imperva – Récemment nous avons pu observer une technique d’attaque intéressante appliquée à un serveur PostgreSQL. Une fois connecté à la base de données, l’attaquant a créé différentes charges malveillantes, mis en œuvre des techniques d’évasion en intégrant du code binaire dans une image téléchargée, extrait des charges malveillantes sur disque et déclenché l’exécution de code à distance à partir de ces charges. A l’instar de nombreuses attaques dont nous avons été témoins ces derniers temps, celle-ci a fini par exploiter les ressources du serveur pour « miner » de la cryptomonnaie Monero. Comme si cela ne suffisait pas, le vecteur d’attaque était une photo de l’actrice Scarlett Johannsson. Mais plongeons-nous à présent au cœur de cette attaque.

Préparation de l’exécution de code à distance et contournement des solutions DAM

PostgreSQL, comme d’autres bases de données courantes, comporte un module Metasploit pour faciliter l’interaction avec le système d’exploitation. La méthode employée dans cette attaque est très similaire : la création d’une charge malveillante exécutable par l’exportation sur disque du code binaire au moyen de la fonction lo_export. Une légère modification a été apportée à ce module, la fonction lo_export étant insérée sous forme d’entrée dans le catalogue pg_proc, au lieu d’être appelée directement. Le but est d’échapper à certaines solutions DAM (Database Audit Monitoring) qui surveillent étroitement les tentatives d’opérations soumises à des privilèges, telles que lo_export. Par conséquent, l’utilisation de obj6440002537 revient fondamentalement à faire un appel indirect à lo_export (Figure 2).

Détermination du type de processeur graphique (GPU) une fois pris le contrôle de la base de données

Désormais l’attaquant est en mesure d’exécuter des commandes système locales au moyen d’une seule fonction simple, fun6440002537. Cette fonction SQL est un wrapper permettant d’appeler une autre petite fonction en langage C, sys_eval, elle-même exportée dans tmp406001440 (un fichier binaire dérivé de sqlmapproject), qui sert essentiellement de proxy pour appeler des commandes shell à partir d’un client SQL.

Quelles sont alors les phases suivantes de l’attaque ? Quelques opérations de reconnaissance. Il s’agit tout d’abord de déterminer les caractéristiques du processeur graphique (GPU) en exécutant lshw -c video, puis celles du processeur central (CPU) au moyen de cat /proc/cpuinfo (Figures 3-4). Si
cela peut paraître étrange à première vue, tout s’explique lorsque l’objectif final est de miner de la cryptomonnaie.

Jusqu’à présent, l’attaquant a eu accès à la base de données, préparé le terrain pour l’exécution de code à distance et le contournement des solutions DAM, puis déterminé les caractéristiques du système. Tout est alors prêt pour le téléchargement… d’une photo de Scarlett Johansson. (Oui, vous
avez bien lu !)

Un malware dissimulé dans une photo de Scarlett Johansson

Il faut reconnaître que les auteurs d’attaques font de plus en plus preuve de créativité.

En l’occurrence, ceux-ci souhaitaient télécharger leur dernier code malveillant en date, qu’ils ont décidé de placer dans une photo sur imagehousing.com, un site gratuit d’hébergement et de partage d’images. Cependant, la charge malveillante est au format binaire et non graphique. Or il ne suffit pas de renommer un fichier binaire en lui donnant une extension d’image car son transfert vers le site de l’hébergeur échouera très probablement du fait de son format non valide (absence d’aperçu et de photo affichable). Au lieu de modifier l’extension du nom de fichier, l’attaquant a ajouté le code binaire malveillant dans une véritable photo de la séduisante Scarlett Johansson (Figure 5). Ainsi, le transfert aboutit, la photo est affichable et paraît inoffensive, et la charge malveillante est toujours présente.

Le téléchargement de l’image (art-981754.png) renfermant la charge malveillante a été facile au moyen de wget. L’exécutable a été extrait de cette image à l’aide de la commande dd (data duplicator) puis des autorisations d’exécution complètes (chmod 777) ont été octroyées au fichier nouvellement créé, x4060014400. La dernière étape consiste à exécuter le code malveillant ainsi extrait, tout en SQL, comme le montre la figure suivante.

Le fichier x4060014400 crée un autre exécutable nommé s4060014400. Ce dernier a pour but de miner du Monero (XMR) vers le pool de cryptomonnaie https://monero.crypto-pool.fr/, IP 163.172.226.218 (Figure 7). L’adresse Monero liée à cette attaque a engrangé plus de 312,5 XMR à
ce jour, soit plus de 90 000 dollars au cours actuel. Cette adresse est la suivante :

4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9MZ2iqWHWs8WEFvwUVi6KEpLWdfNx6Guiq5451Fv2SoxoD7rHzQhQTVbDtfL8xS

Du point de vue de l’attaquant, mission accomplie !

Les antivirus identifient-ils ce type d’images malveillantes ?

A l’aide du service VirusTotal de Google, nous avons testé le taux de détection de près de 60 antivirus sur trois formes différentes du cryptomineur utilisé dans cette attaque, à savoir l’URL hébergeant l’image malveillante, l’image proprement dite et le cryptomineur lui-même. Les résultats sont les
suivants :

  • URL qui hébergeait l’image malveillante : un antivirus a signalé l’existence d’un malware (Figure 9).
  • Image malveillante : trois antivirus ont alerté sur la présence d’un mineur de cryptomonnaie (Figure 10)
  • Cryptomineur extrait de l’image malveillante : 18 détections par des antivirus (Figure 11)

 

La méthode consistant à infecter avec du code binaire des fichiers légitimes (images, documents) n’est vraiment pas nouvelle, pourtant elle continue d’échapper à la plupart des antivirus, ce qui est extrêmement inquiétant. Or la création d’un fichier infecté de cette façon ne demande qu’une ligne :

Linux : cat fichierExecutable >> image.png

Windows : type fichierExecutable.exe >> image.png

Comment un attaquant peut-il trouver des bases de données PostgreSQL ?

Il est possible de tenter de découvrir des instances PostgreSQL dans un domaine au moyen d’outils tels que Nmap, en supposant que l’attaquant se soit déjà introduit dans le réseau local. Cependant, les auteurs des attaques peuvent-ils trouver des cibles plus faciles ? N’existe-t- il pas des bases de données PostgreSQL exposées au public, bien que cette pratique soit déconseillée ? Eh bien oui, au moins 710 000, principalement hébergées sur AWS (Figure 12). Et il est tout aussi simple de les trouver que sur Google au moyen de services en ligne tels que Shodan. Par conséquent, un pirate peut facilement les découvrir, attaquer en force brute l’utilisateur par défaut postgres afin de pénétrer dans la base, puis appliquer certaines des techniques que nous venons de décrire.

Voici quelques conseils pour se protéger de cette attaque :

  • Prendre garde aux appels directs à lo_export ou aux appels indirects via des entrées dans pg_proc.
  • Faire attention aux fonctions appelant des fichiers binaires en langage C (comme dans l’exemple de la Figure 2).
  • Utiliser un firewall pour bloquer le trafic réseau sortant d’une base de données vers Internet.
  • Ne pas associer sa base de données à une adresse IP publique. Si tel est le cas, restreindre son accès aux seuls hôtes qui doivent interagir avec elle (les serveurs d’applications ou les postes clients appartenant à des administrateurs).

Les commentaires sont fermés.