Le cybergroupe Sednit fonctionne depuis au moins 2004 et apparaît régulièrement dans les actualités. Sednit (mieux connu sous le nom de Fancy Bear) serait à l'origine de la fissure du Comité national démocrate américain avant les élections de 2016, de l'Agence mondiale antidopage (AMA), de la chaîne de télévision TV5Monde et d'autres attaques. L'arsenal du groupe comprend un ensemble d'outils malveillants, dont certains ont été documentés
dans un rapport précédent .
Nous avons récemment publié un rapport sur
LoJax , un rootkit UEFI qui est également lié à Sednit et a été utilisé dans des attaques dans les Balkans, en Europe centrale et orientale.
En août 2018, les opérateurs Sednit ont déployé deux nouveaux composants Zebrocy, et nous avons désormais constaté une forte augmentation de l'utilisation de cet outil. Zebrocy est une collection de chargeurs de démarrage, de compte-gouttes et de portes dérobées. Les téléchargeurs et les droppers sont destinés à l'intelligence, tandis que les backdoors fournissent la persistance et les logiciels espions. Ces nouveaux composants ont une manière inhabituelle d'exfiltrer les données collectées via les protocoles de service de messagerie SMTP et POP3.
Les victimes des nouveaux outils ressemblent aux victimes mentionnées dans notre précédent article sur
Zebrocy , ainsi qu'au
Kaspersky Lab . Les cibles des attaques se trouvent en Asie centrale, en Europe centrale et orientale, ce sont principalement des ambassades, des ministères des affaires étrangères et des diplomates.
Revue
Figure 1. Schéma des composants anciens et nouveaux de ZebrocyPendant deux ans, le cybergroupe Sednit a utilisé les e-mails de phishing comme vecteur d'infection pour Zebrocy (options 1 et 2 dans le tableau ci-dessus). Après le compromis, les attaquants ont utilisé divers bootloaders de la première étape pour collecter des informations sur la victime et, en cas d'intérêt, après quelques heures ou jours, ont déployé l'une des portes dérobées du deuxième niveau.
Le schéma classique de la campagne Zebrocy consiste à obtenir la victime sous forme d'archive dans la pièce jointe à la lettre. L'archive contient deux fichiers, dont l'un est un document inoffensif, et le second est un fichier exécutable. Les attaquants tentent de tromper la victime en appelant le deuxième fichier un nom typique du document ou de l'image et en utilisant la «double extension».
Dans la nouvelle campagne (option 3 dans le tableau), un schéma plus compliqué est utilisé - nous allons l'analyser ci-dessous.
Compte-gouttes Delphi
Le premier binaire est un compte-gouttes Delphi, ce qui est assez inhabituel pour la campagne Zebrocy. Dans la plupart des cas, il s’agit plutôt d’un chargeur de démarrage installé sur le système de la victime au premier stade de l’attaque.
À l'aide de plusieurs méthodes, dropper complique l'ingénierie inverse. Dans les échantillons examinés, il utilise le mot-clé
foie pour indiquer le début et la fin des éléments clés, comme indiqué ci-dessous.
$ yara -s tag_yara.yar SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe find_tag SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0x4c260:$tag: l\x00i\x00v\x00e\x00r\x00 0x6f000:$tag: liver 0x6f020:$tag: liver 0x13ab0c:$tag: liver
La règle YARA ci-dessus recherche le
foie de la chaîne. La première ligne de
foie est utilisée dans le code, mais elle ne sépare rien, tandis que les autres partagent le descripteur de clé, l'image (son hexdump est illustré ci-dessous) et le composant crypté dans le compte-gouttes.
$ hexdump -Cn 48 -s 0x6f000 SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0006f000 6c 69 76 65 72 4f 70 65 6e 41 69 72 33 39 30 34 |liverOpenAir3904| 0006f010 35 5f 42 61 79 72 65 6e 5f 4d 75 6e 63 68 65 6e |5_Bayren_Munchen| 0006f020 6c 69 76 65 72 ff d8 ff e0 00 10 4a 46 49 46 00 |liver……JFIF.|
Tout d'abord, les données sont enregistrées dans une image avec le nom de fichier
C: \ Users \ public \ Pictures \ scanPassport.jpg , si un tel fichier n'existe pas.
Fait intéressant, le fichier
dropper s'appelle
SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe , ce qui suggère également un schéma de phishing lié aux passeports et aux informations de voyage. Cela peut signifier que l'opérateur peut connaître le but du message de phishing. Le compte-gouttes ouvre l'image et, si le fichier existe déjà, arrête l'exécution. Sinon, il l'ouvre et reçoit le handle de clé
OpenAir39045_Bayren_Munchen . L'image est manquante, bien que le format soit correct - voir la figure ci-dessous.
Figure 2. ScanPassport.jpgLa ligne de descripteurs clés contient
Bayren_Munchen - très probablement une référence à l'équipe de football du FC Bayern Munich. Dans tous les cas, le contenu du descripteur n'est pas important, mais sa longueur, avec laquelle vous pouvez obtenir la clé XOR pour décrypter le composant.
Pour obtenir la clé XOR, le compte-gouttes recherche le dernier mot-clé
liver et l'indente de la longueur du descripteur. La longueur de la clé XOR est de 27 (0x1b) octets (identique à la longueur du descripteur de clé).
À l'aide de la clé XOR et d'une simple boucle, le compte-gouttes déchiffre la dernière partie - le composant chiffré situé immédiatement après la dernière balise à la fin du fichier. Veuillez noter que l'en-tête MZ du composant exécutable commence immédiatement après le mot-clé
liver , et la clé XOR est obtenue à partir de la partie de l'en-tête PE, qui est généralement une séquence de 0x00 octets récupérée après déchiffrement du composant, comme illustré dans la figure ci-dessous.
Figure 3. Composant chiffré (à gauche) par rapport au composant déchiffré (à droite)Le composant est réinitialisé sur
C: \ Users \ Public \ Documents \ AcrobatReader.txt et convertit le fichier en
C: \ Users \ Public \ Documents \ AcrobatReader.exe .
Il s'agit peut-être d'une tentative de contourner la protection du PC, qui génère un avertissement lorsque le fichier binaire vide le fichier avec l'extension .exe sur le disque.
Une fois de plus, l'opérateur essaie de tromper la victime, et si elle fait attention au répertoire, elle verra l'image comme dans la figure suivante:
Figure 4. Le composant ressemble à un fichier PDFPar défaut, Windows cache l'extension, et celle-ci est utilisée par un attaquant qui décharge le fichier exécutable dans le dossier Documents et le déguise en PDF.
Enfin, le dropper exécute le composant hébergé et se ferme.
MSIL Mail Loader
Le composant livré du compte-gouttes précédent est le chargeur MSIL emballé avec UPX. Pour une meilleure compréhension, la logique du processus est décrite ci-dessous, puis le code source est donné et le schéma de contrôle est considéré.
La méthode principale appelle
Exécuter pour lancer l'application, qui crée ensuite
Form1 .
{ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run((Form) new Form1()); }
Form1 affecte de nombreuses variables, dont un nouveau
temporisateur pour sept d'entre elles.
this.start = new Timer(this.components); this.inf = new Timer(this.components); this.txt = new Timer(this.components); this.subject = new Timer(this.components); this.run = new Timer(this.components); this.load = new Timer(this.components); this.screen = new Timer(this.components);
L'objet Timer a trois champs importants:
- Activé: indique l'état de la minuterie activée.
- Intervalle: temps entre les événements en millisecondes
- Cochez: le rappel est exécuté après expiration du temporisateur et si le temporisateur est activé
Les champs sont indiqués comme suit:
this.start.Enabled = true; this.start.Interval = 120000; this.start.Tick += new EventHandler(this.start_Tick); this.inf.Interval = 10000; this.inf.Tick += new EventHandler(this.inf_Tick); this.txt.Interval = 120000; this.txt.Tick += new EventHandler(this.txt_Tick); this.subject.Interval = 120000; this.subject.Tick += new EventHandler(this.subject_Tick); this.run.Interval = 60000; this.run.Tick += new EventHandler(this.run_Tick); this.load.Interval = 120000; this.load.Tick += new EventHandler(this.load_Tick); this.screen.Interval = 8000; this.screen.Tick += new EventHandler(this.screen_Tick);
Pour chaque objet, l'
intervalle d' intervalle est défini de 8 secondes à 2 minutes. Un rappel est ajouté au gestionnaire d'événements. Notez que seul
start définit la valeur true pour
Enabled , ce qui signifie qu'après 2 minutes (12 000 millisecondes = 120 secondes),
start_Tick sera appelé par le gestionnaire d'événements.
private void start_Tick(object sender, EventArgs e) { try { this.start.Enabled = false; Lenor lenor = new Lenor(); this.dir = !Directory.Exists(this.label15.Text.ToString()) ? this.label16.Text.ToString() + "\" : this.label15.Text.ToString() + "\"; this.att = this.dir + "audev.txt"; this._id = lenor.id(this.dir); this.inf.Enabled = true; }
En outre, chaque méthode présente un comportement identique - modifie la valeur
Enabled sur
false au début. La méthode est exécutée, puis modifie la valeur
Enabled de l'objet suivant sur
true , ce qui active le temporisateur suivant. La variable
Enabled est utilisée par l'opérateur pour créer quelque chose comme une machine d'état - si la fonction ne fonctionne pas, le mécanisme répète son exécution jusqu'à ce qu'il reçoive un résultat positif. Le temps entre les exécutions de deux fonctions peut être utilisé comme une tentative de contourner la protection antivirus en ajoutant un délai.
Maintenant, après avoir décrit la structure de chaque méthode, nous passons à l'algorithme de contrôle. Voici un aperçu des étapes sous forme d'échange d'e-mails entre boîtes aux lettres.
Figure 5. Échange d'e-mailsMalvar vérifie l'existence d'un chemin d'accès spécifique utilisé pour vider chacun des fichiers pendant l'exécution. Si possible, utilisez
C: \ Users \ Public \ Videos \ , sinon
C: \ Documents and Settings \ All Users \ Documents \ comme répertoire par défaut. Veuillez noter que le deuxième chemin est spécifique à Windows XP, tandis que le premier chemin est spécifique à Vista et supérieur.
Un
identifiant de 16 octets
est généré en concaténant le numéro de série du volume C: et le nom d'utilisateur; il est stocké dans le fichier
audev.txt .
Le chargeur de démarrage collecte les informations suivantes:
- chemin d'application actuel
- version du système d'exploitation
- répertoire système
- domaine utilisateur
- nom de la voiture
- nom d'utilisateur
- fuseau horaire actuel
- date actuelle
- une liste des disques logiques et des informations sur chacun d'eux (modèle, numéro de série, etc.)
- répertoriant les répertoires
C: \ Program Files \ et
C: \ Program Files (x86) \- liste des processus
Ces données sont stockées dans le fichier
C: \ Users \ Public \ Videos \ si.ini et envoyées par lettre dans la pièce jointe via SMTPS en utilisant le port par défaut 465. Le corps du message contient la ligne
SI (qui peut signifier les informations système), le destinataire du message est
sym777. g@post.cz . Pour l'ensemble de l'échange d'informations, l'objet des lettres est indiqué comme
id .
L'opérateur a décidé de créer plusieurs adresses de rechange et envoie la même lettre à deux autres destinataires, très probablement, au cas où l'adresse principale ne fonctionnerait pas. Après l'envoi de la lettre, le chargeur supprime le fichier
si.ini .
Lors de la première exécution du malware, un fichier
set.txt est
créé avec le texte
{System_Parametrs = 10} à l' intérieur et une entrée dans la clé de registre Windows.
Figure 6. Persistance dans le registreUne capture d'écran est
prise sous le nom
scx.bin de l'ordinateur de la victime et envoyée par e-mail en pièce jointe avec le texte
SC (qui peut signifier Capture d'écran) dans le corps du message.
Après l'envoi, le logiciel malveillant contacte la boîte aux lettres
kae.mezhnosh@post.cz en utilisant le protocole POP3 sur SSL (port 995) et recherche les messages dont le sujet correspond à
id . Si un tel message existe et que le corps n'est pas vide, le malware le déchiffre et envoie un message avec
okey dans le corps à
sym777.g@post.cz . Le contenu d'un message reçu précédemment est effacé et analysé comme suit:
string[] strArray = this._adr.Replace("B&", "").Replace("Db", "").Split('%'); string str1 = strArray[0]; string str2 = strArray[1];
Deux lignes sont obtenues: la première est le mot de passe et la seconde est le nom d'utilisateur de l'adresse e-mail.
De nouvelles informations d'identification sont utilisées pour se connecter à la boîte aux lettres reçue, rechercher dans celle-ci un message avec une rubrique qui correspond à l'
ID du malvari et une application avec la chaîne
audev dans le nom de fichier. Si les deux conditions sont remplies, le malware stocke l'application et supprime le message du serveur.
Un journal des messages est envoyé à
sym777.g@post.cz et les messages reçus via POP3 proviennent du destinataire avec les données utilisateur récemment reçues.
Le plan d'attaque complique l'enquête. Premièrement, si vous avez un chargeur de démarrage avec des lettres, vous ne pouvez pas vous connecter à la boîte aux lettres contenant l'étape suivante.
Deuxièmement, si vous recevez des informations d'identification pour le courrier, vous ne pouvez toujours pas obtenir la charge utile suivante car elle est supprimée après réception.
Lorsque le chargeur de démarrage écrit avec succès la pièce jointe sur le disque, il envoie un message par courrier électronique avec
okey2 dans le corps et la
pièce jointe
l.txt contenant
090 . Le même fichier est remplacé par des zéros et le malware essaie d'obtenir un autre message. Si cela fonctionne, le fichier
l.txt est
envoyé avec
okey3 dans le corps. Le contenu de la pièce jointe est le répertoire et le nom du fichier. Malvar déplace le fichier audev vers cette adresse. Enfin, le malware envoie un e-mail avec
okey4 dans le corps et
l.txt dans la pièce jointe. Cela lance le fichier exécutable,
audev.exe, et vérifie la présence de la ligne
audev dans la liste des processus.
Process.Start(this.rn); foreach (Process process in Process.GetProcesses()) { if (process.ProcessName.Contains("audev")) }
Si un tel nom est trouvé, la dernière lettre sera envoyée, contenant dans le corps
okey5 et
l.txt dans la pièce jointe. Enfin,
l.txt et
set.txt sont supprimés, la clé de registre Windows créée est supprimée et le programme se termine.
Delphi Mail Downloader
Le rôle principal du chargeur de démarrage est d'évaluer l'importance d'un système compromis et, s'il semble intéressant, de charger et d'exécuter le dernier chargeur de démarrage Zebrocy.
Le fichier binaire est écrit en Delphi et empaqueté en utilisant UPX. Une définition complète de l'objet
TForm1 peut être trouvée dans la section avec ses ressources, elle montre quelques paramètres de configuration utilisés. Les sections suivantes décrivent l'initialisation, les capacités et le protocole réseau du chargeur de démarrage.
Initialisation
Tout d'abord, déchiffre l'ensemble des chaînes qui sont des adresses e-mail et des mots de passe. L'opérateur applique l'
algorithme de chiffrement
AES ECB . Chaque ligne est décryptée à la place hexadécimale, où les quatre premiers octets correspondent à la taille finale de la ligne décryptée (les lignes décryptées à la fin peuvent contenir une indentation). L'objet
TForm1 contient deux clés AES: la première est utilisée pour chiffrer les données et la seconde est utilisée pour les déchiffrer.
Les adresses e-mail et les mots de passe sont utilisés par l'opérateur pour envoyer des commandes aux malvari, ainsi que pour obtenir des informations collectées sur l'ordinateur de la victime. Les protocoles de communication SMTP et POP3 sont appliqués - tous deux via SSL. Pour utiliser OpenSSL, le malware supprime et utilise deux bibliothèques dynamiques OpenSSL:
libeay32.dll (98c348cab0f835d6cf17c3a31cd5811f86c0388b) et
ssleay32.dll (6d981d71895581dfb103170486b8614f7f203bdc) .
Figure 7. Propriétés de la DLL OpenSSLVeuillez noter que tous les fichiers sont sauvegardés dans le répertoire de travail du malware
: C: \ Users \ Public \ .
La persistance est fournie lors de la première exécution du malvari grâce à la
technique de script bien connue du script
d' entrée. Un fichier avec le script
registration.bat est créé et plusieurs lignes sont écrites à partir de l'objet
TForm1 . Le script final est le suivant:
reg add HKCU\Environment /v "UserInitMprLogonScript" /t REG_EXPAND_SZ /d "C:\Users\Public\Videos\audev.exe" /f del C:\Users\Public\Videos\registr.bat exit
Enfin, le malware crée un
identifiant , de la même manière que dans les binaires Zebrocy décrits précédemment. Il obtient le nom d'utilisateur à l'aide de l'API Windows
GetUserNameW et ajoute le numéro de série du lecteur C: \ au début.
Les possibilités
Étant donné qu'il existe plusieurs conditions et procédures pour collecter des informations sur la victime, voici une description de ses différentes capacités. La configuration de l'analyse est stockée dans l'objet
TForm1 , où sept possibilités différentes de collecte d'informations à partir de l'ordinateur de la victime sont regroupées.
En commençant par une simple analyse, les premières informations que le malware peut obtenir sont liées aux fichiers avec les extensions suivantes:
.docx, .xlsx, .pdf, .pptx, .rar, .zip, .jpg, .bmp, .tiff . Pour chacun des fichiers trouvés sur le disque, le malware reçoit le chemin complet et la dernière date de modification. Ces informations sont cryptées à l'aide de la clé AES, dont nous avons parlé plus tôt, et stockées dans le fichier
0.txt . Une autre analyse vise les extensions
.dat, .json, .db et, comme dans le cas précédent, obtient le chemin complet et la dernière date à laquelle le fichier a été modifié. Il les crypte ensuite et les stocke dans le fichier
57.txt .
La liste des processus en cours d'exécution est une autre caractéristique de malvari qui vous permet de stocker des informations dans un fichier
08.txt . Cela ressemble à ceci:
======Listing_of_processes======= [System Process] System smss.exe csrss.exe wininit.exe csrss.exe winlogon.exe services.exe lsass.exe […]
Le fichier
i.txt recueille des informations générales sur l'ordinateur de la victime, ainsi que des informations sur le malvari (numéro de version et chemin le long duquel il est exécuté). Voir l'exemple ci-dessous:
v7.00 C:\Users\Public\Videos\audev.txt ============================================ Log_Drivers: C: fixed; size= 102297 Mb, free=83927 Mb S/N: [redacted] ================================================== OSV: Windows 7 WinType: 32 WinDir: C:\Windows Lang: English (United States) TZ: UTC1:0 Romance Standard Time HostN: [redacted]-PC User: [redacted] ===============S_LIST===================== C:\Program Files\Common Files C:\Program Files\desktop.ini C:\Program Files\DVD Maker C:\Program Files\Internet Explorer C:\Program Files\Microsoft.NET C:\Program Files\MSBuild C:\Program Files\Reference Assemblies C:\Program Files\Uninstall Information C:\Program Files\Windows Defender […]
Les logiciels malveillants peuvent prendre des captures d'écran, qui sont enregistrées au format
2 \ [AAAA-mm-jj HH-MM-SS] -Image_001.jpg , et génèrent un autre fichier
2 \ sa.bin , rempli d'une liste de chemins d'accès aux fichiers de toutes les captures d'écran capturées. La dernière option consiste à répertorier les composants réseau et les données système, le résultat est écrit en
4.txt .
Protocole réseau
Le chargeur de courrier Delphi est un ajout relativement nouveau à la boîte à outils Zebrocy, il fournit une nouvelle façon d'exfiltrer les données et de recevoir des commandes de l'opérateur. L'exfiltration est assez simple, mais elle fait beaucoup de bruit sur le réseau, car les fichiers chiffrés précédemment collectés sont envoyés via SMTPS, chaque version du fichier est trois fois.

Le sujet du message est l'
ID de la victime et le fichier est envoyé en pièce jointe avec un mot-clé correspondant au contenu du fichier. Veuillez noter que pour chaque fichier, une version chiffrée est envoyée.

Des captures d'écran et des fichiers pour les deux analyses sont également envoyés, mais avec des mots clés différents.

Figure 8. Exemple d'un message avec des données transmisesAlors que SMTP est utilisé pour l'exfiltration des données, le fichier binaire est connecté à l'
adresse e- mail
tomasso25@ambcomission.com via POP3 et l'analyse des messages. Le corps de la lettre contient divers mots clés interprétés par le malware comme des commandes.

Après l'exécution, le journal du débogueur et le résultat des commandes (le cas échéant) sont renvoyés à l'opérateur. Par exemple, après une commande de numérisation, l'opérateur reçoit un fichier contenant une liste de fichiers avec les extensions correspondantes avec chacun de ces fichiers.
Bien que ce chargeur de démarrage ait des fonctions de porte dérobée, il décharge dans le système un chargeur de démarrage sur Delphi, déjà associé à ce groupe, que nous avons décrit dans un
article précédent sur Zebrocy.
Conclusion
Dans le passé, nous avons déjà vu l'intersection de Zebrocy et du malware traditionnel Sednit. Nous avons surpris Zebrocy déversant la porte dérobée phare de Sednit dans le système XAgent, donc avec une grande certitude nous attribuons la paternité de Zebrocy à ce cybergroupe.
Néanmoins, l'analyse des fichiers binaires a révélé des erreurs au niveau de la langue, ainsi que le développement, indiquant un niveau de qualification différent des auteurs. Les deux chargeurs de démarrage utilisent des protocoles de messagerie pour exfiltrer les données et disposent de mécanismes identiques pour collecter les mêmes informations. Cependant, ils créent beaucoup de bruit sur le réseau et le système, créant de nombreux fichiers et les envoyant. Dans le processus d'analyse du chargeur de messagerie sur Delphi, il nous a semblé que certaines fonctions avaient disparu, mais les lignes restaient toujours dans le fichier binaire. Cette boîte à outils est utilisée par l'équipe Sednit, mais nous pensons qu'elle est développée par une autre équipe - moins expérimentée par rapport aux créateurs des composants Sednit traditionnels.
Les composants de Zebrocy sont un ajout à la boîte à outils Sednit, et les événements récents peuvent expliquer l'utilisation active accrue des binaires Zebrocy au lieu des malvari traditionnels.
Indicateurs de compromis
Noms de fichiers, SHA-1 et détection par les produits ESET1. SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe - 7768fd2812ceff05db8f969a7bed1de5615bfc5a -
Win32 / Sednit.ORQ2. C: \ Users \ public \ Pictures \ scanPassport.jpg - da70c54a8b9fd236793bb2ab3f8a50e6cd37e2df
3. C: \ Users \ Public \ Documents \ AcrobatReader. {Exe, txt} - a225d457c3396e647ffc710cd1edd4c74dc57152 -
MSIL / Sednit.D4. C: \ Users \ Public \ Videos \ audev.txt - a659a765536d2099ecbde988d6763028ff92752e -
Win32 / Sednit.CH5.% TMP% \ Indy0037C632.tmp - 20954fe36388ae8b1174424c8e4996ea2689f747 -
Win32 / TrojanDownloader.Sednit.CMR6.% TMP% \ Indy01863A21.tmp - e0d8829d2e76e9bb02e3b375981181ae02462c43 -
Win32 / TrojanDownloader.Sednit.CMQCourrielcarl.dolzhek17@post.cz
shinina.lezh@post.cz
P0tr4h4s7a@post.cz
carl.dolzhek17@post.cz
sym777.g@post.cz
kae.mezhnosh@post.cz
tomasso25@ambcomission.com
kevin30@ambcomission.com
salah444@ambcomission.com
karakos3232@seznam.cz
rishit333@ambcomission.com
antony.miloshevich128@seznam.cz