Centre des opérations de sécurité Tinkoff de la vie quotidienne: analyse du chargeur de démarrage unique

Bonjour, Habr!

Dans notre centre d'opérations de sécurité Tinkoff, nous analysons régulièrement les techniques utilisées dans les logiciels malveillants et les attaques, et récemment nous sommes tombés sur un fichier intéressant dont nous aimerions parler.

image

La technique qui a été utilisée pour créer ce chef-d'œuvre est connue depuis plus de 20 ans, mais même des décennies plus tard, elle reste pertinente, car les appels de certains contrôles dans la macro ne sont pas suspects et peuvent être utilisés dans des documents légitimes. Il s'agit d'un téléchargeur de logiciels malveillants écrit dans des macros Excel 4.0.

Outils


Dans le cadre de l'analyse, nous utiliserons au minimum des outils tiers et nous nous en sortirons avec un ensemble standard de programmes:

  • Suite Microsoft Office
  • archiveur;
  • éditeur de texte;
  • comme outil d'analyse des actions logicielles, nous utiliserons Sysmon;
  • comme environnement d'analyse, nous utiliserons une machine virtuelle avec Windows 7 à bord

Mnogabukaf


Le document que nous allons analyser est un classeur Excel au format xls. Le logiciel malveillant est livré dans des e-mails de phishing, lorsque le document démarre, la macro décharge la branche de registre, télécharge des informations sur les mises à jour Office à partir du site Web de Microsoft, et télécharge et lance également des fichiers .dll malveillants. Après ces étapes, le livre se ferme sans enregistrer les modifications.

La principale différence avec les autres chargeurs de ce type est qu'il n'utilise pas de macros VBA.

Analyse statique


Voici un exemple d'e-mail contenant un document malveillant.



Ouvrez la pièce jointe dans notre machine virtuelle.

Vous devez faire attention tout de suite: l'image vous avertit que le document est «protégé» et il vaut la peine de l'ouvrir localement et de cliquer sur «activer le contenu»:



un avertissement de sécurité indique que vous devez regarder les projets dans Visual Basic Editor.

Nous nous tournons vers le développeur - gestion des macros (vbs), mais nous ne voyons pas de macros vbs ou vba:



voici le moment de se rappeler ce que sont les documents bureautiques.

Chaque document Microsoft Office est une archive qui peut être décompressée à l'aide de n'importe quel archiveur, extrayant le contenu du document:



Après le déballage, nous voyons qu'à l'intérieur des documents il n'y a pas de fichiers xml que nous sommes habitués à voir, la chose est dans l'ancien format de document - xls.

Dans l'extension xls, le contenu n'est pas stocké au format Office Open XML, mais au format binaire BIFF8. Le document utilise la macro Excel 4.0, où les macros peuvent être exécutées dans les cellules du document.

Il convient de noter que la feuille avec la macro n'est pas masquée, mais la feuille a un grand nombre de cellules vides, ce qui rend l'analyse difficile.

Il existe des outils pour analyser les fichiers BIFF8, ​​par exemple BiffViewer, et pour analyser le contenu, il existe un excellent outil - oletools. Mais nous essaierons de faire sans utiliser des utilitaires tiers.

Excel a également un format basé sur xml - xlsm, vous pouvez y enregistrer du code macro VBA et des feuilles de macro Excel 4.0, ce que nous ferons.
La liste complète des formats disponibles pour Excel est les formats Excel .

Nous enregistrons notre document, le décompressons:



Voyons ce qu'il y a dans les fichiers, commençons par le répertoire des macrosheets dans le dossier xl et trouvons le fichier avec toutes les données sur la feuille de macro:



Ainsi, nous obtenons toutes les valeurs dans les cellules de la feuille de macro. La macro elle-même est obscurcie, les cellules contiennent uniquement des valeurs numériques et des formules qui convertissent ces valeurs et écrivent le résultat dans de nouvelles cellules.

Par exemple, dans cette formule, les valeurs numériques sont converties en caractères, concaténées et écrites dans la cellule FK17653.

Formule en excel
FORMULA.FILL(CHAR(CV63675+HE4018)&CHAR(DG27830+HE26544)&CHAR(IA33205-EW25294)&CHAR(X1216+BA26751)&CHAR(X1216*ER27642)&CHAR(EC50683*IA4491)&CHAR(CV63675*CQ12674)&CHAR(CV63675-IP35389)&CHAR(DL61540+AP31398)&CHAR(GB59870-IB5677)&CHAR(X1216+DS45768)&CHAR(GB59870+FV60781)&CHAR(AA45534*S4000)&CHAR(CV63675*FK10514)&CHAR(EC50683/GD6905)&CHAR(GB59870+EM58732)&CHAR(HQ31358-GI51882)&CHAR(X1216+FX24913)&CHAR(DL61540*EC63501)&CHAR(HQ31358-IC62223)&CHAR(X1216*BY50777)&CHAR(X1216*FY64649)&CHAR(G64471+DW7092)&CHAR(HQ31358-B26139)&CHAR(HQ31358/I494)&CHAR(G64471*DG37241)&CHAR(DL61540-ES39934)&CHAR(X1216+BX48975),FK17653)

À la suite de la formule, nous obtenons la ligne suivante:



Chaque macro-commande suivante est «collectée» par une formule similaire, écrite dans la cellule, puis exécutée.

Pour que la macro s'exécute automatiquement à l'ouverture du document, la cellule à partir de laquelle le script doit être lancé doit être appelée Auto_Open. Considérez le fichier workbook.xml:

workbook.xml
<?xml version=«1.0» encoding=«UTF-8» standalone=«yes»?>
<workbook xmlns=«schemas.openxmlformats.org/spreadsheetml/2006/main» xmlns:r=«schemas.openxmlformats.org/officeDocument/2006/relationships» xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006» mc:Ignorable=«x15» xmlns:x15=«schemas.microsoft.com/office/spreadsheetml/2010/11/main»> appName=«xl» lastEdited=«6» lowestEdited=«6» rupBuild=«14420»/><workbookPr/><mc:AlternateContent xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006»> Requires=«x15»><x15ac:absPath url=«C:\Users\User\Desktop\malware\» xmlns:x15ac=«schemas.microsoft.com/office/spreadsheetml/2010/11/ac»/></mc:Choice></mc:AlternateContent>/><sheet name=«Sheet1» sheetId=«1» r:id=«rId1»/><sheet name=«Sheet2» sheetId=«2» r:id=«rId2»/>Sheet2!$IE$65406/>/>/>

À l'intérieur du fichier, nous trouvons la ligne name = "_ xlnm.Auto_OpenT8nee" hidden = "1"> Sheet2! $ IE $ 65406
Cela signifie que la cellule à partir de laquelle la macro est exécutée, IE65406, est masquée. Nous connaissons maintenant le point d'entrée de la macro.

Analyse dynamique


N'exécutez jamais de fichiers suspects sur votre ordinateur. Pour étudier les actions des logiciels suspects, il est nécessaire d'utiliser un environnement spécialement préparé: divers bacs à sable ou une machine isolée spécialement préparée - virtuelle ou en fer.

Ouvrez le document et exécutez le contenu. La fenêtre d'invite de commandes clignote et le livre se ferme.
Voyons les journaux Sysmon.

Sysmon a un événement de création de processus (id 1), plus d'informations sur Sysmon peuvent être trouvées ici .

Par les journaux, nous voyons que la macro crée des fichiers dans le répertoire c: \ users \ public

Ce qui suit est le message sysmon, qui montre que la branche de registre est déchargée et le résultat est écrit dans le fichier:

ID d'événement d'événement Sysmon 1
sysmon event id 1
Process Create:
RuleName: technique_id=T1112,technique_name=Modify Registry
ProcessGuid: {2a62482c-b244-5ecf-3a00-000000002700}
ProcessId: 3268
Image: C:\Windows\System32\reg.exe
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
Description: Registry Console Tool
Product: Microsoft Windows Operating System
Company: Microsoft Corporation
OriginalFileName: reg.exe
CommandLine: «C:\Windows\system32\reg.exe» EXPORT HKCU\Software\Microsoft\Office\16.0\Excel\Security C:\Users\Public\IcItdXw.reg /y"
CurrentDirectory: C:\Users\user\Documents\
User: user
LogonGuid: {2a62482c-b1d8-5ecf-3284-010000000000}
LogonId: 0x18432
TerminalSessionId: 1
IntegrityLevel: High
Hashes: SHA1=8BD131B03D6BA865B228CA8EE3239D2EF2B90B74,MD5=D69A9ABBB0D795F21995C2F48C1EB560,SHA256=36414C7E57AFA6136D77FD47F4C55102E35F2475FBCD719728DA7D14B1590E2A,IMPHASH=BC564726CFF18A49EBC14784593A51CA
ParentProcessGuid: {2a62482c-b23f-5ecf-3900-000000002700}
ParentProcessId: 3164
ParentImage: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE
ParentCommandLine: «C:\Program Files\Microsoft Office\Office16\EXCEL.EXE»

Une fois terminée, la macro supprime les fichiers créés.

Pour interdire la suppression de fichiers, modifier les autorisations sur le dossier, laisser les autorisations de lecture et d'écriture et interdire la suppression:



Réexécutez le document, nous recevrons une erreur lors de l'exécution de la macro, ce qui nous permettra de le déboguer.

Cela est possible car il n'y a pas de gestion des exceptions dans certains appels.





Exécutons la macro étape par étape; pendant le débogage, nous rencontrons des appels de fonction à partir de bibliothèques dll, telles que ShellExecute et URLDownloadToFile . Une fois la macro terminée, les fichiers suivants seront dans le dossier des utilisateurs partagés:



Puisque nous connaissons la cellule à partir de laquelle commence l'exécution, nous pouvons remplir toutes les cellules de la feuille macro. Passons en revue la macro jusqu'à la fonction close (false), où nous allons interrompre l'exécution en cliquant sur le bouton "Pause".

Cellules de contrôle de l'environnement


En parcourant les cellules que la macro remplit, nous rencontrons plusieurs fonctions get.window () et get.workspace ()

  • La fonction get.window () renvoie des informations sur la fenêtre actuelle: état, état de la fenêtre, son nom, options d'affichage, etc.
  • La fonction get.workspace () vous permet de trouver des informations sur l'environnement dans lequel le document s'exécute.

Une liste complète des appels disponibles pour Excel 4.0 se trouve dans les liens.

Ici, nous devons nous attarder plus en détail: mon collègue et moi avons suggéré que la plupart de ces appels sont liés à des tentatives de contournement des bacs à sable:

  • get.winow (7) - vérifie si la fenêtre actuelle est masquée. Renvoie vrai ou faux.
  • get.windows (20) - renvoie vrai si la fenêtre est agrandie.
  • get.windows (23) - peut renvoyer les valeurs 1, 2 et 3.



1 - restauré
2 - minimisé
3 - maximisé

Ainsi, il vérifie si la fenêtre actuelle est ouverte:

get.workspace (31) - vérifie si la macro est déboguée par étapes.
get.workspace (13) - vérifier la largeur de l'espace de travail en pixels: si moins de 770, le livre se fermera



get.workspace (14) - vérifier la hauteur de l'espace de travail en pixels: si moins de 390, le livre fermera



get.workspace (19) - vérifier la présence d'une souris.
get.workspace (1) - retourne dans quel système d'exploitation le document est exécuté.
En cas de faux, dans chaque chèque, il y a une transition vers la cellule de fermeture du livre sans enregistrer le résultat.

Appels de bibliothèque externe


Après avoir vérifié l'environnement, nous passons à la fonctionnalité principale. Voyons comment les fonctions WinAPI sont appelées à partir de la macro:

1. L'appel reg.exe, que nous avons vu dans les journaux Sysmon.



Pour appeler l'utilitaire, la fonction ShellExecute de la bibliothèque shell32.dll est utilisée, les paramètres de la fonction sont dispersés dans d'autres cellules.

Cellule BN16631:



Cellule A46097:



Dans la cellule GN47559, la commande pour exporter la branche de registre nécessaire est envoyée, Get.workspace (2) renvoie la version d'Excel.



La cellule DX48821 contient le chemin où le résultat est écrit.



Plus loin dans la macro, il existe une vérification de l'existence du fichier IcltdXw.reg créé et de sa suppression.

2. Appel de la fonction URLDownloadToFile. Cette fonction enregistre le résultat d'une requête get dans un fichier.
L'appel est le suivant:



Cet appel nous mène au site Web de Microsoft, à la page contenant des informations sur les mises à jour d'Office.

Paramètres de fonction:

Cellule BR6547



Cellule IN49847



Après l'exécution de l'instruction, il est vérifié si le fichier a été créé, ainsi que la lecture du caractère par l'offset dans le fichier:



Ces actions visent très probablement à vérifier si l'environnement dans lequel le document s'exécute dispose d'un accès Internet.

Dans la formule, la fonction FILES est transmise à iserror et l'argument est le nom du fichier dans lequel le résultat de la fonction URLDownloadToFile doit être écrit: la



cellule FM27223 donnera le contrôle de la fonction de fermeture du livre: une



fois le fichier reçu de Microsoft, les cellules sont remplies pour préparer le deuxième appel à la DLL urlmon.

Chargement de charge utile


Et voici le deuxième appel, mais au domaine dehabadi [.] Ir, à partir duquel la charge malveillante doit être chargée:



Le résultat sera écrit dans un fichier dans le même dossier avec l'extension html:



Ensuite, nous rencontrons une branche dans le code macro si, lors de la première tentative de téléchargement de la charge utile, a échoué, une deuxième tentative sera effectuée, mais à partir d'une adresse différente.

Si le téléchargement réussit, une fenêtre contextuelle d'avertissement apparaît et la bibliothèque chargée est appelée.



L'appel complet est le suivant:

=CALL("shell32","ShellExecuteA","JJCCJJ",0,"open","c:\windows\systemc32\rundll32.exe","c:\users\public\4hcFC.html,DllRegisterServer",0,5) 

Dans un appel complet, la fonction ShellExecuteA est appelée à partir de la bibliothèque Shell32 avec des paramètres de lancement de rundll32, avec lesquels la fonction exportée de la bibliothèque malveillante téléchargée est appelée.

Ceci termine la fonction macro, la charge utile est opérationnelle.

Conclusion


Comme cela a été dit, la technologie est assez ancienne ( Excel 4.0 pour Windows 3.0 et 3.1 ), mais elle fournit pleinement les fonctionnalités dont les logiciels malveillants ont besoin pour atteindre leurs objectifs. Et le but de ce fichier est de placer discrètement des logiciels dangereux dans le système qui peuvent causer de graves dommages, à commencer par le vol de données personnelles, les données d'autorisation pour les systèmes, se terminant par une corruption / chiffrement des données sur l'ordinateur et la possibilité d'exécuter du code à distance.

Pour l'analyse de tels documents, il n'est pas du tout nécessaire d'utiliser des utilitaires et des logiciels spéciaux, cependant, il convient de mentionner un ensemble de scripts oletools - plus de détails peuvent être trouvés ici . Nous terminerons ici, ci-dessous, les indicateurs de compromis identifiés à la suite de l'analyse.

CIO reçu:

evans [.] williamdmon [@] wp [.] pl
eleventalents [.] com
dehabadi [.] ir
hxxps: //eleventalents.com/wp-keys.php
hxxps: //dehabadi.ir/wp-keys.php
de88d3774ae006d96121d9b45efbf1ee
a73d1214740330013773cd733b0daf206eae2e03
ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419

Une liste complète des indicateurs de compromis.

Références:


A travaillé sur l'analyse:

Frolov Ilya
Kolenchuk Alexey

All Articles