Préambule
Elastic Security a identifié une campagne en cours ciblant une institution financière vietnamienne avec la porte dérobée PHOREAL/RIZZO. Bien que ce logiciel malveillant soit utilisé depuis un certain temps, c'est la première fois que nous observons qu'il se charge dans la mémoire comme technique d'évasion et de protection de campagne. Après analyse de nos propres observations et des informations précédemment rapportées, nous suivons ce groupe d'activité (logiciel malveillant + technique + victimologie) sous le nom de REF4322.
En quoi consiste la menace ?
PHOREAL/RIZZO est une porte dérobée permettant la caractérisation initiale de la victime et les opérations de suivi post-exploitation afin de compromettre la confidentialité des données des organisations. D'autres recherches indiquent qu'il est utilisé exclusivement par APT32 (AKA SeaLotus, OceanLotus, APT-C-00, Group G0050).
Quelles sont les répercussions ?
APT32 cible principalement les victimes ayant des intérêts politiques ou économiques en Asie du Sud-Est, en particulier au Vietnam.
Que fait Elastic à ce sujet ?
Elastic Security a expliqué comment trier l'une de ces alertes de menace, a extrait des observables pour le filtrage des points d'extrémité et du réseau, et a produit une nouvelle signature de logiciel malveillant pour l'identification et l'atténuation de la menace à travers la flotte d'agents Elastic déployés.
Détails de l'enquête
Alors qu'ils menaient des opérations de surveillance sur le site &, les chercheurs d'Elastic Security ont identifié un groupe d'alertes de protection de la mémoire Windows shellcode_thread générées par un capteur de point d'extrémité Elastic Agent. Ces alertes particulières étaient intéressantes parce qu'elles se produisaient toutes au sein du même groupe et qu'elles ciblaient, de manière inhabituelle, le processus control.exe. Le processus Windows control.exe gère l'exécution des éléments du panneau de configuration, qui sont des utilitaires permettant aux utilisateurs d'afficher et d'ajuster les paramètres de l'ordinateur.
En général, lorsque nous observons des faux positifs pour la protection shellcode_thread, ils sont identifiés dans une large base d'utilisateurs et, dans de nombreux cas, ils sont attribués à divers mécanismes anti-triche ou DRM (Digital Rights Management). Dans ce cas, un seul cluster et un processus cible signé Microsoft étaient atypiques et méritaient d'être étudiés plus en détail.
Vous pouvez en savoir plus sur les protections de la mémoire d'Elastic Security ICI et sur les attaques en mémoire ICI.
L'intérêt suscité par les caractéristiques aberrantes des alertes nous a amenés à poursuivre nos investigations afin de valider et de caractériser la menace :
Le processus ciblé est un binaire Windows signé
...
"process": {
"args": [
"control.exe",
"Firewall.cpl",
"{2D48D219-C306-4349-AE1F-09744DFFB5B9}"
],
"Ext": {
"code_signature": [
{
"trusted": true,
"subject_name": "Microsoft Windows",
"exists": true,
"status": "trusted"
}
],
"dll": [
...
Non signé chargé .dll
...
"Ext": {
"mapped_address": 1945501696,
"mapped_size": 21135360
},
"path": "C:\\Windows\\SysWOW64\\tscon32.dll",
"code_signature": [
{
"exists": false
}
],
"name": "tscon32.dll",
"hash": {
"sha1": "007970b7a42852b55379ef4cffa4475865c69d48",
"sha256": "ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33",
"md5": "2b6da20e4fc1af2c5dd5c6f6191936d1"
}
},
...
Module de démarrage à partir du fil d'alerte
...
"pe": {
"original_file_name": "CONTROL.EXE"
},
"name": "control.exe",
"pid": 5284,
"thread": {
"Ext": {
"start_address_module": "C:\\Windows\\SysWOW64\\tscon32.dll",
...
Alerte sur les métadonnées de la région de mémoire
...
"memory_region": {`
"region_size": 73728,
"region_protection": "RWX",
"allocation_base": 81395712,
"bytes_allocation_offset": 0,
"allocation_type": "PRIVATE",
"memory_pe_detected": true,
"region_state": "COMMIT",
"strings": [
"QSSSSSSh ",
...
"bad cast",
"Local\\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}",
"Netapi32.dll",
"NetWkstaGetInfo",
"NetApiBufferFree",
"\\\\.\\pipe\\{A06F176F-79F1-473E-AF44-9763E3CB34E5}",
"list<T> too long",
"{FD5F8447-657A-45C1-894B-D533926C9B66}.dll",
"DllEntry",
...
".?AVbad_alloc@std@@",
"C:\\Windows\\syswow64\\control.exe",
":z:zzzzzz7",
...
"InternalName",
"mobsync.exe",
"LegalCopyright",
...
Données de fil pour le pivotement
...
"thread": {
"Ext": {
"start_address_bytes": "8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300",
...
"start_address_bytes_disasm": "mov edi, edi\npush ebp\nmov ebp, esp\ncall 0x000043f0\ncall 0x000043ea\npush eax\ncall 0x000043d0\ntest eax, eax\njnz 0x00000038\npush dword ptr [ebp+0x08]"
},
...
Dans l'exemple de l'alerte, nous identifions tout d'abord l'adresse de départ du module, c'est-à-dire la dll/module où le thread a commencé. C:\Windows\SysWOW64\tscon32.dll est le module d'adresse de démarrage pour le fil sur lequel nous avons lancé l'alerte. C'est aussi la seule dll non signée qui est chargée, et c'est donc un bon endroit pour concentrer nos efforts. Lorsque nous avons vérifié la valeur de hachage dans VirusTotal, afin d'identifier les informations précédemment divulguées sur l'échantillon, nous n'avons vu aucun résultat.
En creusant davantage, nous avons examiné les octets de l'adresse de départ (start_address_bytes), qui sont les premiers octets ( 32 ) de notre fil d'alerte. Nous pouvons utiliser la valeur de start_address_bytes (8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300) pour rechercher des pivots dans VirusTotal en interrogeant le contenu : {8bff558bec56e83f3e0000e8343e000050e8143e000085c0752a8b750856e821}. Nous avons identifié relativement peu de résultats, mais ils comprenaient l'entrée ci-dessous, soumise pour la première fois en juillet 2021.
En recherchant les résultats de VirusTotal, nous avons pu voir que le chercheur Felix Bilstein(@fxb_b) a rédigé une règle YARA crowdsourcée identifiant cette porte dérobée PHOREAL. En passant à l'onglet CONTENU, nous pouvons comparer certaines chaînes de notre alerte avec ce qui a été précédemment signalé à VirusTotal.
En utilisant les chaînes uniques que nous avons identifiées ci-dessus et les octets d'adresse de départ, nous pouvons créer une signature YARA en convertissant les chaînes uniques ($a) et les octets d'adresse de départ ($b) en valeurs hexadécimales, comme indiqué ci-dessous.
Chaînes YARA converties
strings:
\\ "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}" ascii wide
$a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
45 00 35 00 7D 00 }
\\ "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}" ascii wide
$a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }
\\ "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll" ascii
$a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }
\\ PHOREAL start_address_bytes sequence
\\ mov edi, edi; push ebp; mov ebp, esp; call 0x000043f0;
\\ call 0x000043ea; push eax; call 0x000043d0; test eax, eax;
\\ jnz 0x00000038; push dword ptr [ebp+0x08]
$str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
2 of them
Cette règle, lorsqu'elle sera déployée dans l'agent élastique, identifiera PHOREAL auprès des clients et renforcera la prévention déjà assurée par la protection de la mémoire shellcode_thread (dans les environnements des clients où la protection de la mémoire est activée). Dans notre cas, le déploiement de cette règle a également permis la collecte du fil malveillant à l'aide du même mécanisme que celui décrit dans notre article sur la collecte des balises Cobalt Strike.
Peu après le déploiement du nouvel artefact YARA, nous avons reçu une nouvelle alerte malware_signature avec le fil malveillant capturé en mémoire. Le triage manuel des binaires effectué par notre équipe d'analyse des logiciels malveillants et de rétro-ingénierie (MARE) a rapidement confirmé que l'échantillon était PHOREAL/RIZZO en comparant la structure et les fonctions entre notre échantillon et les rapports antérieurs. En outre, ils ont été en mesure d'extraire un domaine crypté RC4 d'une ressource RCDATA, comme décrit dans un livre blanc CYLANCE OceanLotus de 2018.
Le domaine identifié par MARE (thelivemusicgroup[.]com) se résout actuellement en 103.75.117[.]250. qui appartient à Oneprovider[.]com, une société d'hébergement de serveurs dédiés basée au Canada et dont les centres de données sont répartis dans le monde entier.
https:// ipinfo.io/ Résultats de la requête pour 103.75.117[.]250
{
"ip": "103.75.117[.]250",
"city": "Hong Kong",
"region": "Central and Western",
"country": "HK",
"loc": "22.2783,114.1747",
"org": "AS133752 Leaseweb Asia Pacific pte. ltd.",
"timezone": "Asia/Hong_Kong",
"asn": {
"asn": "AS133752",
"name": "Leaseweb Asia Pacific pte. ltd.",
"domain": "leaseweb.com",
"route": "103.75.117[.]0/24",
"type": "hosting"
},
"company": {
"name": "Oneprovider.com - Hong Kong Infrastructure",
"domain": "oneprovider[.]com",
"type": "hosting"
},
"privacy": {
"vpn": false,
"proxy": false,
"tor": false,
"relay": false,
"hosting": true,
"service": ""
},
"abuse": {
"address": "1500 Ste-Rose LAVAL H7R 1S4 Laval Quebec, Canada",
"country": "CA",
"email": "info@oneprovider.com",
"name": "ONE PROVIDER",
"network": "103.75.117[.]0/24",
"phone": "+1 514 286-0253"
},
"domains": {
"ip": "103.75.117[.]250",
"total": 2,
"domains": [
"thelivemusicgroup[.]com",
"cdn-api-cn-1[.]com"
]
}
La plupart des informations intéressantes sur le domaine sont confidentielles, mais les dates de "mise à jour" et de "création" indiquées dans la figure ci-dessous peuvent être utiles pour déterminer depuis combien de temps ce domaine est utilisé à des fins malveillantes.
L'agent élastique semble avoir été déployé après la compromission, ce qui a limité notre capacité à déterminer le vecteur d'accès initial. Un rapport de Mandiant datant de 2017 indique que PHOREAL peut être déployé dans une capacité d'"établissement de points d'appui" pour permettre le triage des victimes et la mise en place d'outils de suivi post-exploitation.
Analyse
Elastic Security utilise le modèle Diamond pour décrire les relations de haut niveau entre les adversaires et les victimes des intrusions.
Justification de l'évaluation de l'adversaire
Sur la base de l'activité observée et des rapports précédents, nous estimons avec un degré de confiance élevé que REF4322 est APT32/OceanLotus et l'acteur à l'origine de cet incident. APT32 est actif depuis 2014 et cible notamment les gouvernements et les entreprises d'Asie du Sud-Est ou d'autres entreprises internationales ayant des intérêts au Viêt Nam. APT32 est le seul groupe actuellement identifié comme exploitant la porte dérobée PHOREAL, et notre victime correspond au profil géographique et sectoriel des victimes antérieures typiques et spécifiques d'APT32.
Conclusion
Règles YARA
Nous avons créé une règle YARA pour identifier cette activité PHOREAL.
Règle Yara pour détecter la porte dérobée REF4322/APT32 en mémoire PHOREAL/Rizzo
rule Windows_Trojan_PHOREAL {
meta:
Author = "Elastic Security"
creation_date = "2022-02-16"
last_modified = "2022-02-16"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "PHOREAL"
threat_name = "Windows.Trojan.PHOREAL"
description = "Detects REF4322/APT32 in-memory backdoor PHOREAL/Rizzo."
reference_sample = "88f073552b30462a00d1d612b1638b0508e4ef02c15cf46203998091f0aef4de"
strings:
\\ "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}" ascii wide
$a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
45 00 35 00 7D 00 }
\\ "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}" ascii wide
$a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }
\\ "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll" ascii
$a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }
\\ PHOREAL start_address_bytes sequence
$str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
2 of them
}
Défenses recommandées
Les étapes suivantes peuvent être mises à profit pour améliorer le niveau de protection d'un réseau :
- Activer la protection de la mémoire d'Elastic Security sur les terminaux Windows
- Utilisez les signatures YARA ci-dessus pour déterminer s'il existe une activité PHOREAL au sein de votre organisation.
- Contrôler ou bloquer le trafic réseau à destination ou en provenance des centres d'intérêt réseau identifiés et remédier aux systèmes affectés en conséquence.
Références
Les recherches suivantes sont citées tout au long du document.
- https://github.com/CyberMonitor/APT_CyberCriminal_Campagin_Collections/blob/master/2018/2018.10.17.OceanLotus_SpyRATs/SpyRATsofOceanLotusMalwareWhitePaper.pdf
- https://www.mandiant.com/resources/cyber-espionage-apt32
- https://www.secureworks.com/research/threat-profiles/tin-woodlawn
- https://attack.mitre.org/software/S0158/
- https://attack.mitre.org/groups/G0050/
Observables
Indicateur | Type | Référence | Remarques |
---|---|---|---|
thelivemusicgroup[.]com | nom de domaine | Domaine C2 crypté dans le logiciel malveillant | |
103.75.117[.]250 | ipv4-addr | IP résolue de thelivemusicgroup[.]com | |
ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33 | SHA256 | tscon32.dll | Pilier PHOREAL |
Éléments
Les artefacts sont également disponibles au téléchargement en format ECS et STIX dans un paquet zip combiné.