La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
Récemment, un fabricant européen d'équipements d'installation électrique a contacté Group-IB - son employé a reçu par courrier une lettre suspecte avec une pièce jointe malveillante. Ilya Pomerantsev, spécialiste de l'analyse des logiciels malveillants chez CERT Group-IB, a effectué une analyse détaillée de ce fichier, y a découvert le logiciel espion AgentTesla et a expliqué à quoi s'attendre d'un tel logiciel malveillant et en quoi il est dangereux.

Avec cet article, nous ouvrons une série d'articles sur la façon d'analyser de tels fichiers potentiellement dangereux, et nous attendons les plus curieux le 5 décembre pour un webinaire interactif gratuit sur le sujet. « Analyse des logiciels malveillants : analyse de cas réels ». Tous les détails sont sous la coupe.

Mécanisme de distribution

Nous savons que le malware a atteint la machine de la victime via des e-mails de phishing. Le destinataire de la lettre était probablement en BCC.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
L'analyse des en-têtes montre que l'expéditeur de la lettre a été usurpé. En fait, la lettre laissée avec vps56[.]oneworldhosting[.]com.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
La pièce jointe de l'e-mail contient une archive WinRar qoute_jpeg56a.r15 avec un fichier exécutable malveillant QOUTE_JPEG56A.exe à l'intérieur.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

Écosystème de logiciels malveillants

Voyons maintenant à quoi ressemble l'écosystème du malware étudié. Le schéma ci-dessous montre sa structure et les directions d'interaction des composants.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
Examinons maintenant chacun des composants du malware plus en détail.

Chargeur

Fichier original QOUTE_JPEG56A.exe est un compilé AutoIt v3 scénario.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
Pour obscurcir le script original, un obfuscateur avec un Obfuscateur PELock AutoIT caractéristiques
La désobscurcissement s'effectue en trois étapes :

  1. Supprimer l'obscurcissement Pour-si

    La première étape consiste à restaurer le flux de contrôle du script. L’aplatissement du flux de contrôle est l’un des moyens les plus courants de protéger le code binaire d’une application contre l’analyse. Les transformations confuses augmentent considérablement la complexité de l’extraction et de la reconnaissance des algorithmes et des structures de données.

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  2. Récupération de ligne

    Deux fonctions sont utilisées pour chiffrer les chaînes :

    • gdorizabegkvfca - Effectue un décodage de type Base64

      La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

    • xgacyukcyzxz - XOR simple octet-octet de la première chaîne avec la longueur de la seconde

      La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  3. Supprimer l'obscurcissement BinaireVersChaîne и Exécution

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

La charge principale est stockée sous une forme divisée dans le répertoire Polices sections de ressources du fichier.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
L'ordre de collage est le suivant : TIEQHCXWFG, IME, SPDGUHIMPV, KQJMWQQAQTKTFXTUOSW, AOCHKRWWSKWO, JSHMSJPS, NHHWXJBMTTSPXVN, BFUTIFWWXVE, HWJHO, AVZOUMVFRDWFLWU.

La fonction WinAPI est utilisée pour décrypter les données extraites CryptDéchiffrer, et la clé de session générée en fonction de la valeur est utilisée comme clé fZgFiZlJDxvuWatFRgRXZqmNCIyQgMYc.

Le fichier exécutable déchiffré est envoyé à l'entrée de la fonction RunPEqui réalise ProcessusInjecter в RegAsm.exe en utilisant intégré Code Shell (aussi connu sous le nom Exécuter le code shell). La paternité appartient à l'utilisateur du forum espagnol indétectables[.]net sous le surnom de Wardow.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
Il convient également de noter que dans l'un des fils de discussion de ce forum, un obfuscateur pour AutoIt avec des propriétés similaires identifiées lors de l’analyse des échantillons.

Lui-même Code Shell assez simple et attire l'attention uniquement emprunté au groupe de hackers AnunakCarbanak. Fonction de hachage des appels API.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

Nous connaissons également des cas d'utilisation Shellcode Frenchy différentes versions.
En plus des fonctionnalités décrites, nous avons également identifié des fonctions inactives :

  • Blocage de l'arrêt manuel du processus dans le gestionnaire de tâches

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Redémarrer un processus enfant lorsqu'il se termine

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Contourner l'UAC

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Enregistrer la charge utile dans un fichier

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Démonstration de fenêtres modales

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • En attendant que la position du curseur de la souris change

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • AntiVM et AntiSandbox

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Auto destruction

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  • Pompage de la charge utile du réseau

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

Nous savons qu'une telle fonctionnalité est typique du protecteur ChiffrementIT, qui est apparemment le chargeur de démarrage en question.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

Module principal du logiciel

Ensuite, nous décrirons brièvement le module principal du malware et l'examinerons plus en détail dans le deuxième article. Dans ce cas, il s'agit d'une application sur .NET.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
Au cours de l'analyse, nous avons découvert qu'un obfuscateur était utilisé ConfuseurEX.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

IELibrary.dll

La bibliothèque est stockée en tant que ressource principale du module et est un plugin bien connu pour agent de Tesla, qui fournit des fonctionnalités permettant d'extraire diverses informations des navigateurs Internet Explorer et Edge.

Agent Tesla est un logiciel d'espionnage modulaire distribué à l'aide d'un modèle de malware en tant que service sous le couvert d'un produit d'enregistrement de frappe légitime. L'agent Tesla est capable d'extraire et de transmettre les informations d'identification des utilisateurs des navigateurs, des clients de messagerie et des clients FTP au serveur aux attaquants, d'enregistrer les données du presse-papiers et de capturer l'écran de l'appareil. Au moment de l'analyse, le site officiel des développeurs n'était pas disponible.

Le point d'entrée est la fonction Obtenir les mots de passe enregistrés classe InternetExplorer.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1
En général, l'exécution du code est linéaire et ne contient aucune protection contre l'analyse. Seule la fonction non réalisée mérite attention GetSavedCookies. Apparemment, les fonctionnalités du plugin étaient censées être étendues, mais cela n'a jamais été fait.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

Attacher le chargeur de démarrage au système

Étudions comment le chargeur de démarrage est connecté au système. Le spécimen étudié n'effectue pas d'ancrage, mais dans des événements similaires, cela se produit selon le schéma suivant :

  1. Dans le dossier C:UtilisateursPublic le script est créé Visual Basic

    Exemple de scénario :

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 1

  2. Le contenu du fichier de chargement est complété par un caractère nul et enregistré dans le dossier %Temp%<Nom du dossier personnalisé><Nom du fichier>
  3. Une clé d'exécution automatique est créée dans le registre pour le fichier de script HKCUSoftwareMicrosoftWindowsCurrentVersionRun<Nom du script>

Ainsi, sur la base des résultats de la première partie de l'analyse, nous avons pu établir les noms des familles de tous les composants du malware étudié, analyser le schéma d'infection, mais également obtenir des objets pour écrire des signatures. Nous continuerons notre analyse de cet objet dans le prochain article, où nous examinerons plus en détail le module principal agent de Tesla. Ne manquez pas!

D'ailleurs, le 5 décembre, nous invitons tous les lecteurs à un webinaire interactif gratuit sur le thème « Analyse des malwares : analyse de cas réels », où l'auteur de cet article, spécialiste du CERT-GIB, montrera en ligne la première étape de analyse des logiciels malveillants - déballage semi-automatique des échantillons en utilisant l'exemple de trois mini-cas réels tirés de la pratique, et vous pouvez participer à l'analyse. Le webinaire s'adresse aux spécialistes ayant déjà de l'expérience dans l'analyse de fichiers malveillants. L'inscription se fait uniquement à partir du courrier électronique de l'entreprise : зарегистрируйтесь. Dans votre attente!

Yara

rule AgentTesla_clean{
meta:
    author = "Group-IB"
    file = "78566E3FC49C291CB117C3D955FA34B9A9F3EEFEFAE3DE3D0212432EB18D2EAD"
    scoring = 5
    family = "AgentTesla"
strings:
    $string_format_AT = {74 00 79 00 70 00 65 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 68 00 77 00 69 00 64 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 74 00 69 00 6D 00 65 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 63 00 6E 00 61 00 6D 00 65 00 3D 00 7B 00 33 00 7D 00 0D 00 0A 00 6C 00 6F 00 67 00 64 00 61 00 74 00 61 00 3D 00 7B 00 34 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 3D 00 7B 00 35 00 7D 00 0D 00 0A 00 69 00 70 00 61 00 64 00 64 00 3D 00 7B 00 36 00 7D 00 0D 00 0A 00 77 00 65 00 62 00 63 00 61 00 6D 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 37 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 38 00 7D 00 0D 00 0A 00 5B 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 73 00 5D 00}
    $web_panel_format_string = {63 00 6C 00 69 00 65 00 6E 00 74 00 5B 00 5D 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 6C 00 69 00 6E 00 6B 00 5B 00 5D 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 75 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 5B 00 5D 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 5B 00 5D 00 3D 00 7B 00 33 00 7D 00 00 15 55 00 52 00 4C 00 3A 00 20 00 20 00 20 00 20 00 20 00 20 00 00 15 55 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 3A 00 20 00 00 15 50 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 3A 00}
condition:
     all of them
}

rule  AgentTesla_obfuscated {
meta:
    author = "Group-IB"
    file = "41DC0D5459F25E2FDCF8797948A7B315D3CB075398D808D1772CACCC726AF6E9"
    scoring = 5
    family = "AgentTesla"
strings:
    $first_names = {61 66 6B 00 61 66 6D 00 61 66 6F 00 61 66 76 00 61 66 79 00 61 66 78 00 61 66 77 00 61 67 6A 00 61 67 6B 00 61 67 6C 00 61 67 70 00 61 67 72 00 61 67 73 00 61 67 75 00}
    $second_names = "IELibrary.resources"
condition:
     all of them
}

rule AgentTesla_module_for_IE{
meta:
    author = "Group-IB"
    file = "D55800A825792F55999ABDAD199DFA54F3184417215A298910F2C12CD9CC31EE"
    scoring = 5
    family = "AgentTesla_module_for_IE"
strings:
    $s0 = "ByteArrayToStructure" 
    $s1 = "CryptAcquireContext" 
    $s2 = "CryptCreateHash" 
    $s3 = "CryptDestroyHash" 
    $s4 = "CryptGetHashParam" 
    $s5 = "CryptHashData"
    $s6 = "CryptReleaseContext" 
    $s7 = "DecryptIePassword" 
    $s8 = "DoesURLMatchWithHash" 
    $s9 = "GetSavedCookies" 
    $s10 = "GetSavedPasswords" 
    $s11 = "GetURLHashString"  
condition:
     all of them
}

rule RunPE_shellcode {
meta:
    author = "Group-IB"
    file = "37A1961361073BEA6C6EACE6A8601F646C5B6ECD9D625E049AD02075BA996918"
    scoring = 5
    family = "RunPE_shellcode"
strings:
    $malcode = {
      C7 [2-5] EE 38 83 0C // mov     dword ptr [ebp-0A0h], 0C8338EEh
      C7 [2-5] 57 64 E1 01 // mov     dword ptr [ebp-9Ch], 1E16457h
      C7 [2-5] 18 E4 CA 08 // mov     dword ptr [ebp-98h], 8CAE418h
      C7 [2-5] E3 CA D8 03 // mov     dword ptr [ebp-94h], 3D8CAE3h
      C7 [2-5] 99 B0 48 06 // mov     dword ptr [ebp-90h], 648B099h
      C7 [2-5] 93 BA 94 03 // mov     dword ptr [ebp-8Ch], 394BA93h
      C7 [2-5] E4 C7 B9 04 // mov     dword ptr [ebp-88h], 4B9C7E4h
      C7 [2-5] E4 87 B8 04 // mov     dword ptr [ebp-84h], 4B887E4h
      C7 [2-5] A9 2D D7 01 // mov     dword ptr [ebp-80h], 1D72DA9h
      C7 [2-5] 05 D1 3D 0B // mov     dword ptr [ebp-7Ch], 0B3DD105h
      C7 [2-5] 44 27 23 0F // mov     dword ptr [ebp-78h], 0F232744h
      C7 [2-5] E8 6F 18 0D // mov     dword ptr [ebp-74h], 0D186FE8h
      }
condition:
    $malcode 
}

rule AgentTesla_AutoIT_module{
meta:
    author = "Group-IB"
    file = "49F94293F2EBD8CEFF180EDDD58FA50B30DC0F08C05B5E3BD36FD52668D196AF"
    scoring = 5
    family = "AgentTesla"
strings:                                    
    $packedexeau = {55 ED F5 9F 92 03 04 44 7E 16 6D 1F 8C D7 38 E6 29 E4 C8 CF DA 2C C4 E1 F3 65 48 25 B8 93 9D 66 A4 AD 3C 39 50 00 B9 60 66 19 8D FC 20 0A A0 56 52 8B 9F 15 D7 62 30 0D 5C C3 24 FE F8 FC 39 08 DF 87 2A B2 1C E9 F7 06 A8 53 B2 69 C3 3C D4 5E D4 74 91 6E 9D 9A A0 96 FD DB 1F 5E 09 D7 0F 25 FB 46 4E 74 15 BB AB DB 17 EE E7 64 33 D6 79 02 E4 85 79 14 6B 59 F9 43 3C 81 68 A8 B5 32 BC E6}
condition:
     all of them
}

Des hachis

Nom qoute_jpeg56a.r15
MD5 53BE8F9B978062D4411F71010F49209E
SHA1 A8C2765B3D655BA23886D663D22BDD8EF6E8E894
SHA256 2641DAFB452562A0A92631C2849B8B9CE880F0F8F

890E643316E9276156EDC8A

Type Archiver WinRAR
Taille 823014
Nom QOUTE_JPEG56A.exe
MD5 329F6769CF21B660D5C3F5048CE30F17
SHA1 8010CC2AF398F9F951555F7D481CE13DF60BBECF
SHA256 49F94293F2EBD8CEFF180EDDD58FA50B30DC0F08

C05B5E3BD36FD52668D196AF

Type PE (script AutoIt compilé)
Taille 1327616
Nom d'origine Inconnu
timbre dateur 15.07.2019
links Éditeur de liens Microsoft (12.0)[EXE32]
MD5 C2743AEDDADACC012EF4A632598C00C0
SHA1 79B445DE923C92BF378B19D12A309C0E9C5851BF
SHA256 37A1961361073BEA6C6EACE6A8601F646C5B6ECD

9D625E049AD02075BA996918

Type Code Shell
Taille 1474

Source: habr.com

Ajouter un commentaire