SECURITY

Détecter les exfiltrations de données avec SNICat

J’avais un chat qui adorait la crème glacée. Je crois que j’ai dû lui en donner quand il était encore chaton. Après cela, à chaque fois qu’il voyait quelqu’un manger une glace, il faisait tout son possible pour essayer de lui en voler. Et même si ce n’était pas un parfum qu’il appréciait particulièrement, il ne pouvait pas s’empêcher de tenter de voler la crème glacée.

Tout comme mon chat avec la glace, les malfaiteurs essaient constamment de voler les données des entreprises à des fins malveillantes. Et tout comme mon chat a exfiltré d’innombrables parfums de glace, on trouve toutes sortes de saveurs d’exfiltrations de données.

  • Vanille : exfiltration via Box ou autre stockage cloud
  • Chocolat : exfiltration via FTP/SCP, etc.
  • Cookie : exfiltration sur ICMP
  • Praliné : exfiltration sur DNS

Et depuis peu, un nouveau parfum d’exfiltration de données a fait son apparition au rayon des surgelés.

  • Rhum-raisin : exfiltration via SNI

Mnemonic Labs a récemment publié un article de preuve de concept très intéressant expliquant comment l’extension TLS SNI peut être utilisée pour exfiltrer des données. L’approche est très similaire à d’autres techniques plus sophistiquées d’exfiltration de données. Le travail de Mnemonic révèle que la méthode d’exfiltration par SNI réussit à contourner de nombreux contrôles de sécurité, ce qui m’a conduit à un petit exercice de détection dans Splunk.

Avant de nous y plonger, voici quelques informations sur le code de la preuve de conception de Mnemonic, issu de leur blog :

SNIcat est formé de deux composants distincts mais interdépendants :

  • Un agent passif qui doit être déposé sur l’hôte cible, déjà compromis. Son seul objectif est de se connecter au C2 et d’exécuter les commandes fournies.
  • Un serveur C2, qui contrôle l’agent depuis n’importe quel point d’Internet.

Pour voir les informations SNI, j’utilise Zeek afin de capturer les données de transaction. Ensuite, j’injecte les données Zeek dans Splunk et, à l’aide de l’application Decrypt de Splunk, je parviens à décoder les données SNI encodées en Base32 (SNICat utilise l’encodage Base32 pour réaliser l’exfiltration).

Voici un résumé rapide des étapes que j’ai suivies et des recherches Splunk employées. Pour plus d’informations sur le code de Mnemonic, reportez-vous à l’article de blog ci-dessus.

  • Démarrage du serveur C2 SNICat et connexion du code agent sur les hôtes respectifs :

  • Voici le C2 SNICat en train d’exécuter une commande LS sur l’hôte compromis afin de lister les fichiers du répertoire en cours (vous pouvez effectuer d’autres opérations, comme CD, pour changer de répertoire si vous voulez explorer d’autres parties de l’hôte).

La recherche suivante renvoie les différentes commandes SNICat passées dans le champ SNI et capturées via le décodeur SSL de Zeek, puis injectées dans Splunk. J’ai inclus une image montrant les événements capturés lorsque le serveur C2 SNICat exécute ses différentes fonctions.

index=main sourcetype="bro:ssl:json" | rex field=server_name 
"(?(LIST|LS|SIZE|LD|CB|CD|EX|ALIVE|EXIT|WHERE|finito)-[A-Za-z0-9]{16}\.)" 
| stats count by snicat

  • Enfin, voici le serveur SNICat C2 en train de sélectionner un fichier pour l’exfiltrer via SNI. Je choisis d’exfiltrer le fichier passwd, comme tout bon pirate le ferait.

  • Voici une recherche qui applique une expression rationnelle au champ server_name (nous avons renseigné ce champ avec les informations SNI capturées par Zeek).
index=main sourcetype="bro:ssl:json"  
| search server_name=*  
| rex field=server_name "(?P^[A-Z2-7]+=*)"  
| eval b32len=len(base32_encoded_sni)  
| where b32len>10  
| decrypt field=base32_encoded_sni b32() emit('base32_decoded_command')  
| table base32_decoded_command base32_encoded_sni
  • Et voici les événements qui en découlent, avec les données Base32 décodées montrant les données exfiltrées (l’événement du bas est l’exécution de la commande LS par SNICat pour obtenir la liste des répertoires, l’événement du milieu est l’exécution de la commande Size pour obtenir la taille des fichiers, et l’événement du haut le contenu du fichier passwd en cours d’exfiltration). Naturellement, cette recherche peut également être utilisée pour décoder d’autres données que le comportement de SNICat, ce qui peut vous aider à exposer d’autres méthodes d’exfiltration de données dans votre environnement.

La voici à nouveau, en gros plan pour le plaisir des yeux :

J’ajouterai sous peu la détection de SNICat à la Mise à jour de contenu de sécurité de Splunk Enterprise Security, mais en attendant, n’hésitez pas à utiliser les recherches ci-dessus.

Bon Splunking !

*Cet article est une traduction de celui initialement publié sur le blog Splunk anglais.

Splunk
Posted by

Splunk