Ce rapport traite de la fonctionnalité du malware Kalim Backdoor.
Table des matières :
- Qu'est-ce qu'une backdoor ?
- Analyse technique.
- Résumé.
- Tactiques et techniques (MITRE ATT&CK).
- IOCs.
- Règle Yara.
Que signifie Backdoor ?
Une backdoor est une méthode cachée pour accéder à un système qui contourne les mécanismes normaux d'authentification et de sécurité.
Analyse technique :
Analyse statique de base :
Téléchargez-le d'abord sur VirusTotal pour une analyse initiale. Les résultats indiquent que le fichier est une DLL 64 bits, identifiée sous la famille de logiciels malveillants Kalim. De plus, plusieurs détections suggèrent une association potentielle avec le groupe de menace MuddyWater.
Le malware établit également une communication réseau avec le domaine moodleuni[.]com.
Il dépose certains fichiers :
Ouvrez-le maintenant dans Die (Detect it Easy) :
L'échantillon importe un grand nombre d'API Windows, ce qui indique qu'il n'est pas packé. Au total, il importe des fonctions de six DLL : KERNEL32.dll, USER32.dll, ADVAPI32.dll, SHELL32.dll, ole32.dll et WININET.dll.
Bien que plusieurs API soient importées de chaque DLL, certaines fonctions sont particulièrement remarquables en raison de leur rôle dans le comportement du malware.
Plus précisément, l'échantillon importe des API liées au réseau à partir de WININET.dll pour établir une communication avec le serveur de commande et de contrôle (C2). Il utilise également des fonctions liées à COM depuis ole32.dll pour créer et interagir avec des objets COM (Component Object Model). De plus, le malware utilise SHGetFolderPathW depuis SHELL32.dll pour récupérer les chemins de répertoires système identifiés par des valeurs CSIDL.
Analyse statique avancée :
Au niveau de DllMain, la seule action effectuée est la création d'un nouveau thread. Dans ce thread, deux fonctions sont exécutées : sub_1800063A0 et StartAddress.
En analysant la fonction sub_1800063A0, j'ai découvert qu'elle comporte deux étapes distinctes. La première étape, le malware dépose une copie de lui-même dans le répertoire AppData\Roaming. Pour ce faire, il crée un nouveau sous-répertoire nommé Updates, puis crée un fichier exécutable appelé update.exe. La charge utile binaire écrite dans ce fichier provient directement des données intégrées situées à unk_18002AA10. Par conséquent, le fichier final est écrit dans le chemin suivant : "C:\Users<Nom d'utilisateur>\AppData\Roaming\Update\update.exe".
Lors de la deuxième étape, le malware initialise un objet COM (Component Object Model) en utilisant RCLSID : {00021401-0000-0000-C000-000000000046}, qui correspond à l'objet Shell Link (CLSID_ShellLink) et RIID : {000214F9-0000-0000-C000-000000000046}, qui correspond à l'interface IShellLinkW. En visualisant la table complète de l'interface Shell COM implémentée par shell32.dll, les méthodes invoquées peuvent être identifiées avec précision. Le malware appelle quatre méthodes COM clés : SetPath, SetDescription, Save et Release. En utilisant ces fonctions, il crée un raccourci malveillant de démarrage nommé MicrosoftUpdateSerice.lnk dans le répertoire de démarrage Windows, établissant ainsi une persistance sur le système infecté.
Analyse de la fonction StartAddress
Le malware implémente sa logique de communication réseau via trois fonctions distinctes et génère deux threads séparés. Un thread est responsable de la création et de la gestion d'un shell de commandes, tandis que le second thread gère le téléchargement des données collectées après l'exécution du malware.
Les trois fonctions gèrent collectivement la communication entre l'hôte infecté et le serveur de commande et de contrôle (C2) et sont organisées en trois couches logiques.
La première couche est responsable de la collecte d'informations d'empreinte hôte à partir du système compromis. La deuxième couche traite ces données en effectuant un chiffrement et des manipulations supplémentaires pour les préparer à la transmission. La troisième couche établit une communication réseau avec le domaine C2 moodleuni[.]com et transmet les données traitées.
Les deux premières fonctions liées au réseau sont spécifiquement responsables de l'authentification et de la construction de requêtes HTTP POST, permettant une transmission de données authentifiée vers le serveur distant.
La troisième fonction est responsable de la réception des commandes du serveur C2. En fonction de la réponse du serveur, le malware détermine sa prochaine action — soit générer un shell de commandes caché, soit télécharger les données collectées en fonction de la commande reçue du C2.
Analyse des deux threads pour comprendre pleinement ce qu'ils font.
Dans le premier thread, le malware crée un objet job ainsi que deux autres pipes puis leur définit une certaine propriété.
Ensuite, il crée un CMD avec certaines propriétés :
La valeur 1 dans le quatrième argument signifie que le CMD peut hériter des handles de pipe
La valeur 0x1000200u dans le cinquième argument signifie que le CMD possède les éléments suivants :
CREATE_NO_WINDOW = 0x0000000u
CREATE_NEW_PROCESS_GROUP = 0x0000200u
CREATE_UNICODE_ENVIRONMENT = 0x0000400u
Et des informations de démarrage : {size of the structure = 104 bytes, hStdError = hWritePipe, hStdOutput = hWritePipe, hStdInput = hReadPipe2, dwFlags |= 0x100u = STARTF_USESTDHANDLES}. Le premier pipe est chargé de lire la sortie du shell et le second est chargé d'écrire dans le shell.
Et un pointeur vers une PROCESS_INFORMATION
Et après avoir créé le shell, il l'affecte à l'objet job et le met en état d'attente (pending) en attendant les commandes du C2.