ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus

Dans cet article, nous vous expliquerons comment le cybergroupe OceanLotus (APT32 et APT-C-00) a récemment utilisé l'un des exploits accessibles au public pour CVE-2017-11882, les vulnérabilités de corruption de mémoire dans Microsoft Office et la manière dont les logiciels malveillants du groupe parviennent à persister sur les systèmes compromis sans laisser de trace. Nous décrirons ensuite comment, depuis début 2019, le groupe utilise des archives auto-extractibles pour exécuter du code.

OceanLotus est spécialisé dans le cyberespionnage, ses cibles prioritaires étant les pays d'Asie du Sud-Est. Les attaquants forgent des documents qui attirent l'attention des victimes potentielles afin de les convaincre d'effectuer une porte dérobée et travaillent également au développement d'outils. Les méthodes utilisées pour créer des pots de miel varient selon les attaques, depuis les fichiers « à double extension », les archives auto-extractibles, les documents avec des macros, jusqu'aux exploits connus.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus

Utilisation d'un exploit dans Microsoft Equation Editor

Mi-2018, OceanLotus a mené une campagne exploitant la vulnérabilité CVE-2017-11882. L'un des documents malveillants du cybergroupe a été analysé par les spécialistes du 360 Threat Intelligence Center (recherche en chinois), y compris une description détaillée de l'exploit. Le message ci-dessous contient un aperçu d’un tel document malveillant.

La première étape

document FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1 : D1357B284C951470066AAA7A8228190B88A5C7C3) est similaire à celui mentionné dans l’étude ci-dessus. Il est intéressant car il s'adresse aux utilisateurs intéressés par la politique cambodgienne (CNRP - Cambodge National Rescue Party, dissous fin 2017). Malgré l'extension .doc, le document est au format RTF (voir image ci-dessous), contient du code inutile et est également déformé.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 1. « Déchets » en RTF

Même s'il y a des éléments tronqués, Word ouvre ce fichier RTF avec succès. Comme vous pouvez le voir sur la figure 2, il existe une structure EQNOLEFILEHDR au décalage 0xC00, suivie d'un en-tête MTEF, puis d'une entrée MTEF (figure 3) pour la police.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 2. Valeurs d'entrée FONT

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 3. Format d'enregistrement POLICE

Débordement possible sur le terrain prénom, car sa taille n'est pas vérifiée avant la copie. Un nom trop long déclenche une vulnérabilité. Comme vous pouvez le voir d'après le contenu du fichier RTF (offset 0xC26 sur la figure 2), le tampon est rempli de shellcode suivi d'une commande factice (0x90) et adresse de retour 0x402114. L'adresse est un élément de dialogue dans EQNEDT32.exe, indiquant les instructions RET. Cela fait qu'EIP pointe vers le début du champ prénomcontenant le shellcode.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 4. Début du shellcode de l'exploit

adresse 0x45BD3C stocke une variable qui est déréférencée jusqu'à ce qu'elle atteigne un pointeur vers la structure actuellement chargée MTEFData. Le reste du shellcode est ici.

Le but du shellcode est d'exécuter le deuxième morceau de shellcode intégré dans le document ouvert. Le shellcode d'origine essaie d'abord de trouver le descripteur de fichier du document ouvert en itérant sur tous les descripteurs système (NtQuerySystemInformation avec une argumentation SystemExtendedHandleInformation) et vérifier s'ils correspondent PID descripteur et PID processus WinWord et si le document a été ouvert avec un masque d'accès - 0x12019F.

Pour confirmer que le bon handle a été trouvé (et non le handle d'un autre document ouvert), le contenu du fichier est affiché à l'aide de la fonction CreateFileMapping, et le shellcode vérifie si les quatre derniers octets du document correspondent à "yyyy"(Méthode de chasse aux œufs). Une fois qu'une correspondance est trouvée, le document est copié dans un dossier temporaire (GetTempPath) comment ole.dll. Ensuite, les 12 derniers octets du document sont lus.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 5. Fin des marqueurs de document

Valeur de 32 bits entre les marqueurs AABBCCDD и yyyy est le décalage du prochain shellcode. Il est appelé à l'aide de la fonction CreateThread. Extrait du même shellcode que celui utilisé précédemment par le groupe OceanLotus. Script d'émulation Python, que nous avons publié en mars 2018, fonctionne toujours pour le vidage de deuxième étape.

La deuxième étape

Suppression de composants

Les noms de fichiers et de répertoires sont choisis dynamiquement. Le code sélectionne aléatoirement le nom de l'exécutable ou du fichier DLL dans C:Windowssystem32. Il fait ensuite une requête à ses ressources et récupère le champ FileDescription à utiliser comme nom de dossier. Si cela ne fonctionne pas, le code sélectionne au hasard un nom de dossier dans les répertoires %ProgramFiles% ou C:Windows (à partir de GetWindowsDirectoryW). Il évite d'utiliser un nom qui pourrait entrer en conflit avec des fichiers existants et garantit qu'il ne contient pas les mots suivants : windows, Microsoft, desktop, system, system32 ou syswow64. Si le répertoire existe déjà, "NLS_{6 caractères}" est ajouté au nom.

ressource 0x102 est analysé et les fichiers sont vidés dans %ProgramFiles% ou %AppData%, dans un dossier sélectionné au hasard. Modification de l'heure de création pour avoir les mêmes valeurs que kernel32.dll.

Par exemple, voici le dossier et la liste des fichiers créés en sélectionnant l'exécutable C:Windowssystem32TCPSVCS.exe comme source de données.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 6. Extraction de divers composants

Structure des ressources 0x102 dans un compte-gouttes est assez complexe. En quelques mots, il contient :
— Noms de fichiers
— Taille et contenu du fichier
— Format de compression (COMPRESSION_FORMAT_LZNT1, utilisé par la fonction RtlDecompressBuffer)

Le premier fichier est réinitialisé comme TCPSVCS.exe, ce qui est légitime AcroTranscoder.exe (selon FileDescription, SHA-1 : 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

Vous avez peut-être remarqué que certains fichiers DLL pèsent plus de 11 Mo. En effet, un grand tampon contigu de données aléatoires est placé à l'intérieur du fichier exécutable. Il est possible que ce soit un moyen d'éviter la détection par certains produits de sécurité.

Assurer la persévérance

ressource 0x101 dans le compte-gouttes contient deux entiers de 32 bits qui spécifient comment la persistance doit être fournie. La valeur du premier spécifie comment le malware persistera sans droits d'administrateur.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Tableau 1. Mécanisme de persistance sans droits d'administrateur

La valeur du deuxième entier spécifie la manière dont le logiciel malveillant doit assurer sa persistance lorsqu'il est exécuté avec des droits d'administrateur.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Tableau 2. Mécanisme de persistance avec droits d'administrateur

Le nom du service est le nom du fichier sans extension ; le nom d'affichage est le nom du dossier, mais s'il existe déjà, la chaîne " lui est ajoutéeRevision 1» (le nombre augmente jusqu'à ce qu'un nom inutilisé soit trouvé). Les opérateurs ont veillé à ce que la persistance via le service soit robuste : en cas de panne, le service doit être redémarré après 1 seconde. Alors la valeur WOW64 La clé de registre du nouveau service est définie sur 4, indiquant qu'il s'agit d'un service 32 bits.

Une tâche planifiée est créée via plusieurs interfaces COM : ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Essentiellement, le logiciel malveillant crée une tâche cachée, définit les informations du compte ainsi que les informations de l'utilisateur ou de l'administrateur actuel, puis définit le déclencheur.

Il s'agit d'une tâche quotidienne d'une durée de 24 heures et d'un intervalle entre deux exécutions de 10 minutes, ce qui signifie qu'elle s'exécutera en continu.

Morceau malveillant

Dans notre exemple, le fichier exécutable TCPSVCS.exe (AcroTranscoder.exe) est un logiciel légitime qui charge les DLL qui sont réinitialisées en même temps. Dans ce cas, il est intéressant Flash Video Extension.dll.

Sa fonction DLLMain appelle simplement une autre fonction. Certains prédicats flous sont présents :

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 7. Prédicats flous

Après ces vérifications trompeuses, le code obtient une section .text dossier TCPSVCS.exe, change sa défense en PAGE_EXECUTE_READWRITE et le réécrit en ajoutant des instructions factices :

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 8. Séquence d'instructions

A la fin de l'adresse de la fonction FLVCore::Uninitialize(void), exporté Flash Video Extension.dll, l'instruction est ajoutée CALL. Cela signifie qu'après le chargement de la DLL malveillante, lorsque le runtime appelle WinMain в TCPSVCS.exe, le pointeur d'instruction pointera vers NOP, provoquant FLVCore::Uninitialize(void), étape suivante.

La fonction crée simplement un mutex commençant par {181C8480-A975-411C-AB0A-630DB8B0A221}suivi du nom d'utilisateur actuel. Il lit ensuite le fichier *.db3 sauvegardé, qui contient du code indépendant de la position, et utilise CreateThread pour exécuter le contenu.

Le contenu du fichier *.db3 est le shellcode que le groupe OceanLotus utilise généralement. Nous avons de nouveau réussi à décompresser sa charge utile à l'aide du script d'émulateur que nous avons publié. sur GitHub.

Le script extrait la scène finale. Ce composant est une porte dérobée, que nous avons déjà analysée dans étude OceanLotus précédente. Cela peut être déterminé par le GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} fichier binaire. La configuration du malware est toujours chiffrée dans la ressource PE. Il a à peu près la même configuration, mais les serveurs C&C sont différents des précédents :

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz

L'équipe OceanLotus démontre à nouveau une combinaison de différentes techniques pour éviter la détection. Ils sont revenus avec un diagramme « raffiné » du processus d’infection. En choisissant des noms aléatoires et en remplissant les exécutables avec des données aléatoires, ils réduisent le nombre d'IoC fiables (basés sur les hachages et les noms de fichiers). De plus, grâce à l'utilisation de chargements de DLL tiers, les attaquants n'ont qu'à supprimer le fichier binaire légitime. AcroTranscoder.

Archives auto-extractibles

Après les fichiers RTF, le groupe est passé aux archives auto-extractibles (SFX) avec des icônes de documents communes pour semer davantage la confusion chez l'utilisateur. Threatbook a écrit à ce sujet (lien en chinois). Au lancement, les fichiers RAR auto-extractibles sont supprimés et les DLL avec une extension .ocx sont exécutées, dont la charge utile finale a été préalablement documentée. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Depuis mi-janvier 2019, OceanLotus réutilise cette technique, mais en modifiant certaines configurations au fil du temps. Dans cette section, nous parlerons de la technique et des changements.

Créer un leurre

document THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1 : AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) a été découvert pour la première fois en 2018. Ce fichier SFX a été créé judicieusement - dans la description (Informations de version), il est indiqué qu'il s'agit d'une image JPEG. Le script SFX ressemble à ceci :

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 9. Commandes SFX

Le malware se réinitialise {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1 : EFAC23B0E6395B1178BCF7086F72344B24C04DCC), ainsi qu'une photo 2018 thich thong lac.jpg.

L'image du leurre ressemble à ceci :

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 10. Image leurre

Vous avez peut-être remarqué que les deux premières lignes du script SFX appellent deux fois le fichier OCX, mais ce n'est pas une erreur.

{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)

Le flux de contrôle d'un fichier OCX est très similaire à celui des autres composants OceanLotus - de nombreuses séquences de commandes JZ/JNZ и PUSH/RET, en alternance avec du code poubelle.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 11. Code obscurci

Après avoir filtré le code indésirable, exportez DllRegisterServer, appelé regsvr32.exe, ressemble à ceci:

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 12. Code d'installation de base

En gros, au premier appel DllRegisterServer l'exportation définit la valeur du registre HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model pour le décalage chiffré dans la DLL (0x10001DE0).

Lorsque la fonction est appelée une deuxième fois, elle lit la même valeur et s'exécute à cette adresse. À partir de là, la ressource et de nombreuses actions dans la RAM sont lues et exécutées.

Le shellcode est le même chargeur PE utilisé dans les campagnes OceanLotus précédentes. Il peut être émulé en utilisant notre scénario. À la fin, il réinitialise db293b825dcc419ba7dc2c49fa2757ee.dll, le charge en mémoire et exécute DllEntry.

La DLL extrait le contenu de sa ressource, la décrypte (AES-256-CBC) et la décompresse (LZMA). La ressource a un format spécifique facile à décompiler.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 13. Structure de configuration du programme d'installation (KaitaiStruct Visualizer)

La configuration est spécifiée explicitement - en fonction du niveau de privilège, les données binaires seront écrites dans %appdata%IntellogsBackgroundUploadTask.cpl ou %windir%System32BackgroundUploadTask.cpl (ou SysWOW64 pour les systèmes 64 bits).

Une persistance supplémentaire est assurée en créant une tâche avec le nom BackgroundUploadTask[junk].job[junk] représente un ensemble d'octets 0x9D и 0xA0.

Nom de l'application de tâche %windir%System32control.exe, et la valeur du paramètre est le chemin d'accès au fichier binaire téléchargé. La tâche cachée s'exécute tous les jours.

Structurellement, un fichier CPL est une DLL avec un nom interne ac8e06de0a6c4483af9837d96504127e.dll, qui exporte une fonction CPlApplet. Ce fichier décrypte sa seule ressource {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, puis charge cette DLL et appelle sa seule exportation DllEntry.

Fichier de configuration de porte dérobée

La configuration de la porte dérobée est cryptée et intégrée dans ses ressources. La structure du fichier de configuration est très similaire à la précédente.

ESET : nouveaux schémas de livraison backdoor pour le cybergroupe OceanLotus
Figure 14. Structure de configuration de la porte dérobée (KaitaiStruct Visualizer)

Bien que la structure soit similaire, de nombreuses valeurs de champ ont été mises à jour par rapport à celles affichées dans notre ancien rapport.

Le premier élément du tableau binaire contient une DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), identifié par Tencent. Mais comme le nom de l’export a été supprimé du binaire, les hachages ne correspondent pas.

Recherches supplémentaires

Lors de la collecte d’échantillons, nous avons remarqué certaines caractéristiques. Le spécimen que nous venons de décrire est apparu vers juillet 2018, et d’autres similaires sont apparus récemment, entre mi-janvier et début février 2019. L'archive SFX a été utilisée comme vecteur d'infection, laissant tomber un document leurre légitime et un fichier OSX malveillant.

Même si OceanLotus utilise de faux horodatages, nous avons remarqué que les horodatages des fichiers SFX et OCX sont toujours les mêmes (0x57B0C36A (08/14/2016 à 7h15 UTC) et 0x498BE80F (02/06/2009 à 7h34 UTC) respectivement). Cela indique probablement que les auteurs ont une sorte de « concepteur » qui utilise les mêmes modèles et modifie simplement certaines caractéristiques.

Parmi les documents que nous avons étudiés depuis début 2018, on retrouve différents noms indiquant les pays qui intéressent les attaquants :

— Les nouvelles coordonnées de Cambodge Media (New).xls.exe
— 李建香 (个人简历).exe (faux document pdf d'un CV)
— feedback, Rallye aux USA du 28 au 29 juillet 2018.exe

Depuis que la porte dérobée a été découverte {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll et la publication de son analyse par plusieurs chercheurs, nous avons observé quelques changements dans les données de configuration des malwares.

Tout d’abord, les auteurs ont commencé à supprimer les noms des DLL d’assistance (DNSprov.dll et deux versions HttpProv.dll). Les opérateurs ont alors arrêté de packaging la troisième DLL (la deuxième version HttpProv.dll), en choisissant d’en intégrer un seul.

Deuxièmement, de nombreux champs de configuration de porte dérobée ont été modifiés, probablement pour échapper à la détection à mesure que de nombreux IoC devenaient disponibles. Les champs importants modifiés par les auteurs incluent :

  • Clé de registre AppX modifiée (voir IoC)
  • chaîne d'encodage mutex ("def", "abc", "ghi")
  • numéro de port

Enfin, toutes les nouvelles versions analysées ont de nouveaux C&C répertoriés dans la section IoCs.

résultats

OceanLotus continue de se développer. Le cybergroupe se concentre sur le raffinement et l’expansion des outils et des leurres. Les auteurs dissimulent les charges utiles malveillantes à l’aide de documents accrocheurs dont le sujet est pertinent pour les victimes visées. Ils développent de nouveaux schémas et utilisent également des outils accessibles au public, tels que l'exploit Equation Editor. De plus, ils améliorent les outils pour réduire le nombre d'artefacts restant sur les machines des victimes, réduisant ainsi les chances de détection par un logiciel antivirus.

Indicateurs de compromis

Des indicateurs de compromission ainsi que les attributs MITRE ATT&CK sont disponibles sur Welivesecurity и sur GitHub.

Source: habr.com

Ajouter un commentaire