Frenchy shellcode – partie 3 : Extraction du shellcode depuis Netwire et Lokibot

Article

Darkweb : la face cachée du web - Gatewatcher

Au cours de nos recherche sur « frenchy » shellcode, nous avons trouvé que celui-ci apparait dans des nombreux malwares tels que :

Pour obfusquer ses fichiers, tous ces logiciels malveillants utilisent des packers principalement basés sur AutoIt, mais aussi des packers DotNet.

Dans cette troisième partie nous allons extraire frechy shellcode depuis deux malwares : Netwire et Lokibot.

Le premier utilise un packer basé sur DotNet et le second un packer basé sur AutoIt.

Nous allons également voir les résultats de la détection de ces deux échantillons par les moteurs de détection MALCORE qui effectue une analyse statique et heuristique multi-moteurs en temps réel des fichiers.

Netwire – frenchy shellcode v3

Netwire est un cheval de Troie d’accès à distance (RAT) qui s’axe sur le vol de mots de passe et l’enregistrement de frappe, mais qui inclut également des capacités de contrôle à distance.

Ce malware est apparu en 2012 et est largement utilisé pendant de nombreuses années. Il se fait également remarquer au cours de l’année 2020 comme l’un des botnets les plus actifs.

Dans cette section, nous allons voir un échantillon du RAT Netwire (

21c1d45977877018568e8073c3Acf7c5) qui utilise le shellcode frenchy v3.

Le logiciel malveillant comporte plusieurs couches. Il charge une bibliothèque qui à son tour charge un PE contentant le shellcode.

Extraction de shellcode

Première couche

Nous allons commencer par l’ouverture de l’échantillon dans « PE detective » pour trouver sa signature.

Figure 1 – Netwire – première couche: Signature

Comme nous pouvons le voir dans la Figure 1, nous sommes en face d’un programme .NET. Nous allons donc essayer de le décompiler avec dnSpy.

Figure 2 -Netwire - première couche: Point d'entrée

Figure 2 -Netwire – première couche: Point d’entrée

La fonction « Main » ci-dessus contient la méthode « ObjectEqualityCompare1() » (voir la Figure 3) qui concatène plusieurs ressources, les décode, puis les charge en mémoire.

 

Figure 3 – Netwire – première couche: Chargement des ressources

 

Figure 4 - Netwire - première couche: Les ressources

Figure 4 – Netwire – première couche: Les ressources

Tel que nous pouvons le voir dans la Figure 4, les ressources sont stockées dans le répertoire « Resources », au format base64.

Nous placerons un point d’arrêt (voir la Figure 5) au retour de la fonction de décodage pour voir le tableau qui en résulte.

Figure 5 – Netwire - première couche: Les ressources décodés

Figure 5 – Netwire – première couche: Les ressources décodés

Le début du tableau décodé est un en-tête MS-DOS. Il s’agit donc d’un PE que nous allons extraire pour l’analyser.

Deuxième couche

Nous allons utiliser « PE detective » à nouveau pour trouver la signature du PE que nous venons d’extraire.

Figure 6 -Netwire - deuxième couche: Signature

Figure 6 -Netwire – deuxième couche: Signature

Nous voyons dans la Figure 6 qu’il s’agit d’une autre application .NET.

Figure 7 – Netwire - deuxième couche: Point d'entrée

Figure 7 – Netwire – deuxième couche: Point d’entrée

Ce nouveau PE, plus précisément une DLL, charge une ressource chiffrée, la déchiffre et démarre la fonction « invoqueMe » dans un nouveau thread (voir la Figure 7).

Nous allons placer un point d’arrêt (voir la Figure 8) au moment de chargement de la ressource afin de l’extraire.

Figure 8 – Netwire - deuxième couche : Chargement de la troisième ressource

Figure 8 – Netwire – deuxième couche : Chargement de la troisième ressource

Ce nouveau tableau que nous obtenons semble être un PE, encore une fois une application .NET, mais cette fois-ci obfusquée.

 

Troisième couche

Comme nous pouvons le voir dans la Figure 9, l’auteur du malware applique sur ce troisième PE plusieurs obfuscations. Nous pouvons enlever celle-ci avec « de4dot » et l’ouvrir dans « dnSpy ».

Figure 9 - Netwire - troisième couche : Obfuscation

Figure 9 – Netwire – troisième couche : Obfuscation

La fonction qui exécute frenchy shellcode avec le chemin de la cible et le PE à injecter comme arguments est « gdelegate » (voir la Figure 10).

Nous allons donc lancer cette fonction afin d’examiner ses paramètres et extraire le shellcode.

Figure 10 – Netwire – troisième couche : Les parametres de frenchy_shellcode

Figure 10 - Netwire - troisième couche : Les parametres de frenchy_shellcode

Figure 11 – Netwire – troisième couche : Le tableau contenant frenchy_shellcode_003

Figure 12 - Netwire - troisième couche : La charge utile et le processus cible

Figure 12 – Netwire – troisième couche : La charge utile et le processus cible

 

L’exécution de la fonction « gdelegate » nous relève la valeur de la variable « array2 » (voir la Figure 11) qui contient le frechy shellcode, « text » qui contient le chemin du processus cible et « byte_0 » qui stocke le PE à injecter (voir la Figure 12).

Pour extraire le shellcode il ne reste donc qu’à sauvegarder le contenu de « array2 » dans un fichier.

Détection par MALCORE

10 sur 14 moteurs de détection Malcore trouvent l’échantillon malicieux.

Logs MALCORE :

detail_threat_found : Infected : Malware/Win32.Generic, HEUR/AGEN.1126216, Gen:Variant.Ser.Razy.4961, W32/MSIL_Kryptik.JE.gen!Eldorado, a variant of MSIL/Kryptik.SEN trojan, Trojan.Inject, Trojan ( 0054d78d1 ), Trojan.Win32.NetWiredRC.fsxqfz, Trojan.Win32.Dnldr29.BZFF, TScope.Trojan.MSIL

Lokibot – frenchy shellcode v5

LokiBot est un cheval de Troie qui vole des informations sensibles telles que des noms d’utilisateur, des mots de passe et d’autres secrets.

Il est connu pour cibler différents navigateurs web, clients de messagerie et portefeuilles de cryptomonnaies.

Le malware a fait son apparition en 2010 lorsqu’il a été mis en vente pour la première fois sur des forums de piratage souterrains.

Largement distribué gratuitement pendant des années, ce logiciel malveillant continue de circuler de nos jours.

Dans cette section, nous allons voir un échantillon de Lokibot (CA94CBA9ACBCBBDB930032F56493FEA9) qui utilise le frenchy shellcode v5.

L’échantillon récupéré est un script obfusqué AutoIt qui contient le shellcode dans une variable.

Extraction de shellcode

Nous commençons l’analyse de l’échantillon avec la commande « strings » :

This is a third-party compiled AutoIt script.

Nous trouvons une chaîne spécifiques AutoIt, ce qui nous permet de conclure que le PE est un script AutoIt compilé.

Nous pouvons alors utiliser « Exe2Aut » pour le décompiler.

Figure 13 – Lokibot : Décompilation du script AutoIt (Exe2Aut)

Nous pouvons voir dans la Figure 13 que le script est obfusqué.

Toutefois nous arrivons à déduire que la première fonction serait responsable du décodage (voir la Figure 14).

Cette méthode prend en paramètre une chaîne de caractères et la réordonne en fonction d’un « shift ».

Figure 14 - Lokibot : Fonction de décodage

Figure 14 – Lokibot : Fonction de décodage

Nous allons tester cette fonction en écrivant la même, mais en python :

def StringMid(_str, start, count):

return _str[start:start + count]

 

def decode_autoit(_str, shift):

return StringMid(_str, len(_str) - shift + 1, shift + 1) + StringMid(_str, 0, len(_str) - shift)

Figure 15 – Lokibot : Fonction de décodage en python

En effet, comme nous le voyons dans la Figure 16, cette fonction nous permet bien de décoder les chaînes.

Figure 16 - Lokibot : Exemple de chaîne décodée

Figure 16 – Lokibot : Exemple de chaîne décodée

Il est intéressant de noter que le script utilise des techniques d’anti-évasion de machine virtuelle pour rendre l’analyse plus difficile (voir la Figure 17).

Figure 17 - Lokibot : Exemple de chaîne décodée

Figure 17 – Lokibot : techniques d’évasion des VMs

En outre, nous trouvons les chemins cibles autorisés pour le remplacement de processus (voir la Figure 18).

Figure 18 - Lokibot : techniques d'évasion des VMs

Figure 18 – Lokibot : Chemins cibles autorisés

Et enfin, nous avons repéré le début du shellcode (voir la Figure 19).

Figure 19 - Lokibot : Frenchy shellcode v5

Figure 19 – Lokibot : Frenchy shellcode v5

Pour extraire le shellcode, nous pouvons écrire la variable qui le contient dans un fichier en appelant la fonction FileWrite, puis exécuter le script (voir la Figure 20).

Figure 20 - Lokibot : L'extraction du shellcode

Figure 20 – Lokibot : L’extraction du shellcode

Détection par MALCORE

13 sur 14 moteurs de détection Malcore trouvent l’échantillon malicieux.

Logs MALCORE :

detail_threat_found : Infected : Trojan/Win32.Injector, DR/AutoIt.Gen8, Trojan.GenericKD.41793831, Win.Malware.Autoit-7424230-0, W32/AutoIt.QK.gen!Eldorado, a variant of Win32/Injector.Autoit.EIQ trojan, Trojan.Autoit, Trojan ( 0055865b1 ), Backdoor.Win32.Androm.tgxk, Trojan.Win32.Androm.gauobj, Trojan.AutoIt.Injector.ZZ, Trojan.Win32.PSWStealer.BSF, Backdoor.Androm

Conclusion

La commercialisation du shellcode semble avoir abouti et nous le retrouvons dans plusieurs logiciels malveillants avancés qui utilisent des packers pour cacher leur contenu.

Nous avons vu comment extraire frenchy shellcode depuis Lokibot, qui s’est avéré être un packer simple, comparé à Netwire qui cache le shellcode sous plusieurs couches.

Peu importe leur complexité, ces échantillons n’échappent pas à la détection heuristique et statique de MALCORE.

Liens

https://resources.infosecinstitute.com/topic/netwire-malware-what-it-is-how-it-works-and-how-to-prevent-it-malware-spotlight/

https://www.zdnet.com/article/cisa-warns-of-notable-increase-in-lokibot-malware/

https://tccontre.blogspot.com/2019/09/lokibot-using-frenchyshellcode005-to.html

https://isc.sans.edu/diary/25934

https://www.trendmicro.com/en_us/research/19/h/analysis-new-remcos-rat-arrives-via-phishing-email.html

https://www.zscaler.com/blogs/security-research/frenchy-shellcode-wild

https://securityboulevard.com/2020/11/agent-tesla-a-day-in-a-life-of-ir/

https://www.trendmicro.com/en_us/research/19/h/analysis-new-remcos-rat-arrives-via-phishing-email.html

Auteur : Anastasia Cotorobai

 

Table des matières

Partager cet article :
Notre dernier article