Serveur d'impression

OceanLotus: nouvelle attaque de points d'eau en Asie du Sud-Est – Serveur d’impression

Par Titanfall , le 5 décembre 2019 - 20 minutes de lecture

Les chercheurs d'ESET ont identifié 21 sites Web distincts qui avaient été compromis, notamment des sites gouvernementaux et médiatiques particulièrement remarquables.

Les chercheurs de ESET ont découvert une nouvelle campagne de points d’arrosage ciblant plusieurs sites Web en Asie du Sud-Est et qui aurait été active depuis septembre 2018. Cette campagne se distingue par son ampleur, car nous avons pu identifier 21 sites Web compromis, dont certains qui sont particulièrement remarquables. Parmi les sites Web compromis figuraient le ministère de la Défense du Cambodge, le ministère des Affaires étrangères et de la Coopération internationale du Cambodge et plusieurs sites Web de journaux ou de blogs vietnamiens.

Après une analyse approfondie, nous sommes convaincus que cette campagne est menée par le groupe OceanLotus. [1], également appelé APT32 [2] et APT-C-00. OceanLotus est un groupe d'espionnage actif depuis au moins 2012 [3], principalement intéressé par les gouvernements étrangers et les dissidents.

Cette campagne serait une évolution de ce que les chercheurs de Volexity ont appelé OceanLotus Framework B, un système de points d’eau qu’ils ont documenté en 2017. [4]. Cependant, les attaquants ont intensifié leur jeu pour compliquer et ralentir l'analyse de leur infrastructure malveillante. Parmi les différentes améliorations, ils ont commencé à utiliser la cryptographie à clé publique pour échanger une clé de session AES, utilisée pour chiffrer d'autres communications, empêchant ainsi les produits de sécurité d'intercepter la charge finale. Ils sont également passés de HTTP à WebSocket pour masquer leurs communications malveillantes.

Les chercheurs d'ESET ont identifié 21 sites Web distincts qui avaient été compromis, chacun étant redirigé vers un domaine distinct contrôlé par les attaquants.

La figure 1 montre la région ciblée par cette campagne.

Figure 1 – Emplacement des sites Web compromis

La plupart des domaines compromis sont liés aux médias ou au gouvernement cambodgien. Le tableau suivant détaille les différentes victimes. Nous les avons tous informés en octobre, mais la plupart d'entre eux sont encore en train d'injecter des scripts malveillants au moment de la rédaction, deux mois après le premier compromis. Ainsi, nous vous encourageons ne pas visiter ces sites.

Domaine compromis La description
baotgm[.]net Média en vietnamien (basé à Arlington, Texas)
cnrp7[.]org Cambodge National Rescue Party
conggiaovietnam[.]net En rapport avec la religion – en vietnamien
daichungvienvinhthanh[.]com En rapport avec la religion – en vietnamien
danchimviet[.]Info Médias en vietnamien
danviet[.]vn Médias en vietnamien
Danviethouston[.]com Médias en vietnamien
fvpoc[.]org Anciens prisonniers d'opinion vietnamiens
club de jardinage[.]com Club de golf à Phnom Penh, Royaume du Cambodge
lienketqnhn[.]org Médias en vietnamien
mfaic.gov[.]kh Ministère des affaires étrangères et de la coopération internationale du Cambodge
mod.gov[.]kh Ministère de la Défense du Cambodge
mtgvinh[.]net En rapport avec la religion – en vietnamien
nguoitieudung.com[.]vn Médias en vietnamien
phnompenhpost[.]com Journal cambodgien en anglais
raovatcalitoday[.]com Inconnu – En vietnamien
thongtinchongphandong[.]com Médias de l'opposition en vietnamien
tinkhongle[.]com Médias en vietnamien
toithichdoc.blogspot[.]com Blog en vietnamien
trieudaiviet[.]com Inconnu – En vietnamien
triviet[.]nouvelles Médias en vietnamien

Tableau 1 – Description des sites Web compromis

En règle générale, lors d’une attaque à l’eau vive, les adversaires compromettent des sites Web régulièrement visités par des cibles potentielles. Cependant, lors de cette attaque, OceanLotus a également été en mesure de compromettre certains sites Web qui attirent un grand nombre de visiteurs en général, et pas seulement leurs cibles présumées. Le tableau ci-dessous présente le rang Alexa au moment de la rédaction (plus le rang est bas, plus il est fréquenté) des sites Web compromis. Par exemple, ils ont compromis le site Web du journal Dan Viet (danviet[.]vn), qui est le 116th site le plus visité au Vietnam.

Domaine Rang Alexa (global) Rang Alexa (dans le pays le plus populaire)
danviet[.]vn 12 887 116
phnompenhpost[.]com 85 910 18 880
nguoitieudung.com[.]vn 261 801 2 397
danchimviet[.]Info 287,852 144 884
baotgm[.]net 675,669 119 737
toithichdoc.blogspot[.]com 700 470 11 532
mfaic.gov[.]kh 978,165 2 149
conggiaovietnam[.]net 1 040 548 15 368
thongtinchongphandong[.]com 1 134 691 21 575
tinkhongle[.]com 1 301 722 15 224
daichungvienvinhthanh[.]com 1 778 418 23 428
triviet[.]nouvelles 2 767 289 Indisponible
mod.gov[.]kh 4 247 649 3 719
raovatcalitoday[.]com 8.180.358 Indisponible
cnrp7[.]org 8 411 693 Indisponible
mtgvinh[.]net 8,415,468 Indisponible
Danviethouston[.]com 8 777 564 Indisponible
lienketqnhn[.]org 16 109 635 Indisponible
club de jardinage[.]com 16 109 635 Indisponible
trieudaiviet[.]com 16 969 048 Indisponible
fvpoc[.]org Indisponible Indisponible

Tableau 2 – Rang Alexa des sites Web compromis

Le mode de fonctionnement est similaire sur tous les sites Web compromis. Les attaquants ajoutent un petit morceau de code JavaScript dans la page d'index ou dans un fichier JavaScript hébergé sur le même serveur. Le morceau de code de la figure 2, légèrement obscurci, charge ensuite un autre script à partir d'un serveur contrôlé par les attaquants. Le code suivant, ajouté dans https://www.mfaic.gov[.]kh / wp-content / themes / ministère des affaires étrangères / slick / slick.min.js, chargera le fichier de https: //weblink.selfip[.]info / images / cdn.js? from = maxcdn.

Figure 2 – Morceau de code JavaScript ajouté à mfaic.gov[.]kh

Pour échapper à la détection, ils prennent les mesures suivantes:

  • Ils masquent les scripts pour empêcher l'extraction statique de l'URL finale.
  • L'URL ressemble à une véritable bibliothèque JavaScript utilisée par le site Web.
  • Ils utilisent un domaine et un URI différents par site Web compromis.
  • Le script est différent pour chaque site Web compromis. Le code suivant est le script inséré dans un autre site Web compromis:

Figure 3 – Un autre morceau de JavaScript inséré dans un site Web ciblé

Première étape

En fonction de l'emplacement de l'adresse IP du visiteur, le serveur de la première étape, par ex. weblink.selfip[.]info pour mfaic.gov[.]kh, fournit un script leurre (une bibliothèque JavaScript légitime et aléatoire) ou le script de première étape (SHA-1: 2194271C7991D60AE82436129D7F25C0A689050A, par exemple). Tous les serveurs ne disposent pas d'un contrôle d'emplacement, mais lorsqu'il est activé, seuls les visiteurs du Vietnam et du Cambodge reçoivent le script malveillant.

Le script de la première étape contient plusieurs contrôles pour échapper à la détection, comme illustré à la figure 4.

Figure 4 – Charge utile JavaScript de la première étape

Le script attendra que la victime défile sur la page. Il vérifie également la résolution de la fenêtre et détermine si Firebug, une extension de navigateur utilisée pour analyser des pages Web, est activé. Si l'une des vérifications échoue, l'exécution est interrompue.

Ensuite, il déchiffre le domaine Command & Control à l'aide d'un algorithme personnalisé. Par exemple, 3B37371M1B1B382R332V1A382W36392W2T362T1A322T38 sera déchiffré à wss: //tcog.thruhere[.]net. Pour chaque domaine de premier étage, les attaquants enregistrent également un domaine de deuxième étage différent, chacun hébergé sur un serveur différent. Le code de la figure 5 est un équivalent, en Python, de la fonction de déchiffrement.

Figure 5 – Code Python pour décrypter les serveurs C & C

Une fois l'adresse C & C déchiffrée, le script envoie une chaîne unique de 15 chiffres, puis reçoit et exécute un script de deuxième étape. Toutes les communications sont effectuées via WebSocket sur SSL. Ce protocole permet une communication en duplex intégral entre un client et un serveur. Cela signifie que, une fois que le client établit une connexion, un serveur peut envoyer des données au client même si le client n'a pas envoyé de demande. Cependant, dans ce cas particulier, l’utilisation des sockets Web semble avoir pour principal objectif d’éviter la détection.

Deuxième étape

Le script de deuxième étape est en fait un script de reconnaissance. Les développeurs OceanLotus ont réutilisé la bibliothèque fingerprintjs2 de Valve, disponible sur GitHub, en la modifiant légèrement afin d’ajouter une communication réseau et un rapport personnalisé.

La figure 6 décrit les différentes actions exécutées par le script. Toutes les communications passent par la session WebSocket ouverte par la première étape.

Figure 6 – Flux de la charge utile de la deuxième étape

La communication est cryptée à l'aide d'une clé de session AES, générée par le serveur. Il est crypté avec une clé publique RSA 1024 bits et envoyé au client. Ainsi, il n'est pas possible de décrypter les communications entre le client et le serveur.

En comparaison avec les précédentes itérations de leur structure de points d’arrosage, cela rendra les choses beaucoup plus difficiles pour les défenseurs, car les données envoyées sur le réseau ne peuvent pas être détectées puis déchiffrées. Cela empêchera la détection réseau des données. La clé publique envoyée par le serveur est toujours la même et est disponible dans la section IoC.

Ce script de reconnaissance crée un rapport, semblable à celui présenté ci-dessous, et l'envoie au serveur C & C de deuxième étape.

Figure 7 – Rapport d'empreinte digitale

Ce rapport est presque identique au rapport généré par OceanLotus Framework B, documenté par les chercheurs de Volexity en 2017. Les différentes sections sont similaires et incluent des fautes de frappe identiques. Grâce à ces similitudes et à la localisation des cibles, nous sommes confiants que OceanLotus dirigera cette campagne.

Le rapport généré contient des informations détaillées sur le navigateur de la victime et le site Web visité: l’agent utilisateur, le référent HTTP, les adresses IP locale et externe, le navigateur ajoute les préférences de langue configurées du navigateur.

De plus, il y a deux identifiants uniques par machine, appelés client_zuuid et client_uuid. Ils sont probablement utilisés pour identifier les utilisateurs et les suivre d'une visite à l'autre. En réalité, ces identifiants étaient déjà présents dans la version 2017 du framework et client_uuid a été calculé de manière similaire.

le client_zuuid est la concaténation des différentes valeurs deviceId contenues dans navigator.mediaDevices.enumerateDevices. Les périphériques sont les périphériques externes accessibles au navigateur, tels que les caméras ou les microphones. Ainsi, cette valeur doit être la même pour un utilisateur donné lors de ses différentes visites à partir du même ordinateur.

le client_uuid est un hachage MD5 de certaines informations d’empreintes digitales extraites par fingerprintjs2. Parmi les informations collectées figurent l'agent utilisateur du navigateur, la langue, le fuseau horaire, les plug-ins du navigateur et les polices disponibles dans le navigateur. Là encore, cette valeur doit être identique pour toutes les visites, sauf si, par exemple, l'utilisateur met à jour le navigateur ou utilise un périphérique différent.

Enfin, le serveur peut envoyer du code JavaScript supplémentaire à l'ordinateur victime, probablement la charge réelle. Malheureusement, en raison de l'utilisation d'une clé de session AES pour chiffrer les communications, nous n'avons pas été en mesure d'identifier des exemples dans la nature de charges utiles envoyées par les attaquants. De plus, les charges utiles ne sont livrées qu'à des cibles spécifiques. Ainsi, il n'était pas possible de les obtenir en utilisant une machine de test. Toutefois, selon des rapports antérieurs, ces campagnes de points d’arrosage d’OceanLotus ont pour objectif de phish ses victimes. Par exemple, Volexity a signalé qu’une fenêtre contextuelle demandant aux utilisateurs d’approuver l’accès OAuth au compte Google de la victime pour une application Google OceanLotus était affichée. En utilisant cette technique, les attaquants peuvent accéder aux contacts et aux courriels de la victime.

Afin d'être le plus furtif possible, les opérateurs OceanLotus ont enregistré un domaine de premier et un deuxième domaines par site Web compromis. Chaque domaine est hébergé sur un serveur distinct avec une adresse IP distincte. Ils ont enregistré au moins 50 domaines et 50 serveurs pour cette campagne.

Bien que la plupart des domaines de la première étape aient été enregistrés sur des services de noms de domaine gratuits, la plupart des domaines de la deuxième étape sont des noms de domaine payants. Ils imitent également les sites Web authentiques afin de paraître légitimes. Le tableau 3 montre certains services imités par les attaquants.

Domaine C & C Domaine légitime
cdn-ampproject[.]com cdn.ampproject.com
bootstraplink [.]com getbootstrap.com
sskimresources[.]com s.skimresources.com
widgets-wp[.]com widgets.wp.com

Tableau 3 – Sites Web légitimes imités par les attaquants

Le nombre de domaines utilisés et leur similarité avec les sites Web légitimes les rendent probablement plus difficiles à détecter par un œil humain regardant le trafic réseau.

Malgré le suivi actif de nombreux chercheurs, le groupe OceanLotus est toujours très occupé à attaquer des cibles en Asie du Sud-Est. Ils améliorent également régulièrement leur ensemble d’outils, y compris leur infrastructure de points d’arrosage et leurs programmes malveillants Windows et MacOS. Les mises à jour récentes apportées à la structure de points d’arrosage, décrites dans ce blog, témoignent d’un niveau de sophistication sans précédent pour OceanLotus. Ceci est un autre rappel que ce groupe APT doit être suivi de près.

Afin de limiter le nombre de victimes, nous avons averti chaque propriétaire de site Web compromis et expliqué comment supprimer le code JavaScript malveillant, bien que certains semblent très réticents à être informés ou aidés.

Les chercheurs de ESET continueront à suivre tout développement de l'ensemble d'outils OceanLotus. Des indicateurs de compromis peuvent également être trouvés sur GitHub. Pour toute demande de renseignements ou pour soumettre des échantillons de sujets liés au sujet, contactez-nous à l'adresse suivante :umpintel@eset.com.

[1] ESET Research, «OceanLotus: techniques anciennes, nouvelle porte dérobée», 03 2018. [Online]. Disponible à l'adresse suivante: https://www.welivesecurity.com/wp-content/uploads/2018/03/ESET_OceanLotus.pdf.

[2] N. Carr, «Le cyberespionnage se porte bien: APT32 et la menace pour les entreprises mondiales», FireEye, 14.05.2017. [Online]. Disponible à l’adresse: https://www.fireeye.com/blog/threat-research/2017/05/cyber-espionage-apt32.html.

[3] Sky Eye Lab, «Résumé du rapport OceanLotus APT», 29 05 2015. [Online]. Disponible à l'adresse suivante: http://blogs.360.cn/post/oceanlotus-apt.html.

[4] S. K. S. Dave Lassalle, «OceanLotus Blossoms: surveillance numérique massive et attaques ciblant l'ANASE, les nations asiatiques, les médias, les groupes de défense des droits humains et la société civile», Volexity, 06-11 2017. [Online]. Disponible: https://www.volexity.com/blog/2017/11/06/oceanlotus-blossoms-mass-digital-surveillance-and-exploitation-of-asean-nations-the-media-human-rights-and- société civile/.

Indicateurs de compromis (IoC)

Des dossiers

La description SHA-1 SHA-256 Nom de la détection
Script de première étape 2194271C7991D60AE82436129D7F25C0A689050A 1EDA0DE280713470878C399D3FB6C331BA0FADD0BD9802ED98AE06218A17F3F7 JS / Agent.NYQ
Scénario de deuxième étape 996D0AC930D2CDB16EF96EDC27D9D1AFC2D89CA8 8B824BE52DE7A8723124BAD5A45664C574D6E905F300C35719F1E6988887BD62 JS / Agent.NYR

Réseau IoC

Site compromis 1ère étape adresse IP 2ème étape adresse IP
baotgm[.]net arabica.podzone[.]net 178.128.103.24 10cm.mypets[.]ws 178.128.100.189
cnrp7[.]org utagscript[.]com 206.189.88.50 optnmstri[.]com 159.65.134.146
conggiaovietnam[.]net lcontacts.servebbs[.]net 178.128.219.207 imgincapsula[.]com 209.97.164.158
daichungvienvinhthanh[.]com sskimresources[.]com 178.128.90.102 secure-imrworldwide[.]com 178.128.90.109
danchimviet[.]Info wfpscripts.homeunix[.]com 178.128.223.102 cdn-ampproject[.]com 178.128.24.201
danviet[.]vn cdnscr.thruhere[.]net 178.128.98.139 io.blogsite[.]org 178.128.98.89
Danviethouston[.]com votre-ip.getmyip[.]com 178.128.103.74 [Unknown] [Unknown]
fvpoc[.]org gui.dnsdojo[.]net 178.128.28.93 cnnazure[.]com 209.97.164.96
club de jardinage[.]com figbc.knowsitall[.]Info 178.128.103.207 ichefbcci.is-a-chef[.]com 206.189.85.162
lienketqnhn[.]org conseils-renouveler.webhop[.]Info 159.65.7.45 cyhire.cechire[.]com 178.128.103.79
mfaic.gov[.]kh weblink.selfip[.]Info 178.128.103.202 tcog.thruhere[.]net 178.128.107.83
mfaic.gov[.]kh s0-2mdn[.]net 104.248.144.178 p-typekit[.]com 104.248.144.136
mod.gov[.]kh static.tagscdn[.]com 206.189.95.214 pagefairjs[.]com 159.65.137.109
mtgvinh[.]net metacachecdn[.]com 178.128.209.153 bootstraplink[.]com 159.65.129.241
nguoitieudung.com[.]vn s-adroll[.]com 128.199.159.127 joueur-cnevids[.]com 128.199.159.60
phnompenhpost[.]com tiwimg[.]com 206.189.89.121 tiqqcdn[.]com 206.189.47.116
raovatcalitoday[.]com widgets-wp[.]com 178.128.90.107 cdn-tynt[.]com 142.93.75.192
thongtinchongphandong[.]com lb-web-stat[.]com 159.65.128.57 benchtag2[.]com 178.128.90.108
tinkhongle[.]com cdn1.shacknet[.]nous 142.93.127.120 scdn-cxense[.]com 142.93.75.161
toithichdoc.blogspot[.]com assets-cdn.blogdns[.]net 178.128.28.89 cart.gotdns[.]com 206.189.145.242
trieudaiviet[.]com html5.endofinternet[.]net 178.128.90.182 effeto-azur[.]net 142.93.71.92
triviet[.]nouvelles ds-aksb-a.likescandy[.]com 159.65.137.144 labs-apnic[.]net 178.128.90.138
[Unknown] pixel1.dnsalias[.]net 142.93.116.157 ad-appier[.]com 178.128.90.66
[Unknown] trc.webhop[.]net 178.128.90.223 statique-addtoany[.]com 142.93.75.172
[Unknown] nav.neat-url[.]com 178.128.103.205 straits-times.is-an-actor[.]com 178.128.107.24

Clé publique RSA envoyée par le serveur

—–BEGIN PUBLIC KEY—–

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI8O2kXpKec4MBVeF2g86GtT2X

/ ABJB2M + urEvxJStRuL / + u / a9oJ6XL4JTFceYqJiSsXvwD / wDfgI00zCdmJ7xgw +

rpGyuSntLH2Ox5oVxTTUQB791WJByDjtKXYBHpIBrmePG1EcnTlfBhgHhpAeZEao

hEXZ94it73j02h + JtQIDAQAB

—–END PUBLIC KEY—–


Matthieu Faou

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.