En cette période de pandémie, une adaptation du travail a été nécessaire dans le cadre des mesures prises par le
gouvernement, s’accompagnant de documents administratifs de toutes natures. De fausses versions de certains documents sont utilisés par des acteurs malveillants pour mener des attaques. Cet article présente un exemple de document malveillant (en l’occurrence un modèle d’attestation de déplacement professionnel).
Ce modèle de document a été trouvé sur un faux forum après une simple recherche Google sur « modèle attestation déplacement ». En cliquant sur le lien du faux forum, un zip, hébergé sur un autre site, contenant le fichier malveillant (modèle_attestation_déplacement_professionnel.js) est téléchargé, comme vous pouvez le voir sur la Figure 1.
Figure 1 : Faux forum dont provient le document malveillant
Nous allons présenter l’analyse du code Javascript obfusqué.
Analyse statique
Fonction de désobfuscation : les chaînes de caractères obfusquées (QX95sur la figure 2) vont être désobfusquées, à l’aide d’une des fonctions du code, de la manière suivante : chacun de leurs caractères est concaténé à la variable constituant la chaîne désobfusquée (WB37) suivant la parité de l’indice de la boucle while (vI4880).
Le programme fait appel à la fonction (JO58) présentée précédemment pour désobfusquer la chaîne.
Le programme crée un objet permettant d’accéder au système de fichiers. Il va ensuite, si celui-ci n’existe pas déjà, créer le fichier XS594362.tmp dans le répertoire temporaire de la victime (ce répertoire est donné par la variable d’environnement temp). On constate la présence d’une seconde chaîne de caractères obfusquée.
Le programme fait de nouveau appel à la fonction (JO58) pour désobfusquer.
On trouve au début de ce code une liste de trois URLs. Les instructions présentées ci-dessous seront effectuées pour les 3 URLs (boucle while).
Le programme crée un objet permettant les communications entre serveurs. Il va ensuite générer un nombre aléatoire et procéder à une requête GET sur la première URL en demandant la ressource forum.php et en passant en paramètre le nombre aléatoire. Lors de la réception de la réponse, si le status code est différent de 200, le programme suspend temporairement l’exécution du script. Dans le cas contraire, il recherche le nombre aléatoire, généré précédemment, dans la réponse. Si il le trouve, il calcule la variable Yp13 et exécute l’instruction VU11[3](Yp13)().
Ces deux instructions ne peuvent pas être analysées statiquement en l’état car elles dépendent de la réponse du serveur.
Analyse dynamique
Lors de l’exécution du script en environnement contrôlé, on constate la création du fichier XS594362.tmp, dans le répertoire temporaire de l’utilisateur et dans les données capturées par procmon
(figure 7).
On observe les résolutions de domaines, les requêtes et les réponses http en effectuant une capture des flux réseaux à l’exécution du script (Figures 8 et 10). On schématise les communications à l’aide de procdot (corrélation sortie de procmon et capture Wireshark simultanée, Figure 9).
Malheureusement, les réponses aux requêtes GET du script ne contiennent pas de charge utile (comme vous pouvez le voir sur la Figure 10), même si leur status code est 200. Nous ne pouvons donc pas aller plus loin dans cette analyse. En revanche, le CERT Intrinsec a rencontré le même acteur et le même procédé en 2019 avec la distribution du rançongiciel Gandcrab [1] et en 2020 avec la distribution du malware Gootkit.
Indicateurs
- hXXp://movimentoroessler[.]org/modele-attestation-deplacement-professionnel/
- hXXp://centrospaw.com[.]pl/page.php?id=324d686c4146566864422b3957625671375874645858545a4e6e43376d424a5a544f4a6277654d6759655776346e4967346a6e5a327a75377553493073703654555a6b3d
- www[.]familletoujours[.]fr/forum[.]php
- pelican[.]la[.]audubon[.]org/forum[.]php
- ecofiltros[.]com[.]br/forum[.]php
- 187[.]45[.]193[.]220
- 160[.]153[.]74[.]2
- 213[.]186[.]33[.]3
- 207[.]99[.]25[.]16
- XS594362[.]tmp
Références
[1] An (almost) perfect ransomware distribution ecosystem, Omar Jbari, 1er Août 2019