SOC Prime Bias: Moyen

20 Jan 2026 20:18

Ajoutez le Punycode à votre routine de chasse aux menaces

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
Ajoutez le Punycode à votre routine de chasse aux menaces
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

L’article explique comment les noms de domaine internationalisés (IDN) peuvent être utilisés à des fins malveillantes via Punycode pour générer des URL trompeuses qui semblent légitimes à première vue. Il aborde les concepts de base de l’encodage/décodage, partage des exemples de chaînes Punycode observées dans la télémétrie DNS, et met en avant une heuristique de recherche pratique : surveiller les journaux de requêtes DNS pour le xn-- préfixe comme un indicateur fort de potentiel usurpation ou abus basé sur les IDN.

Enquête

L’auteur démontre le décodage d’un domaine encodé en Punycode à l’aide d’un court exemple en Python, puis applique la même logique à des observations réelles. Des extraits de journaux DNS montrent des recherches répétées pour xn---domaines préfixés, suggérant des requêtes automatisées ou scriptées plutôt qu’une navigation utilisateur organique. Le schéma aide à illustrer comment les attaquants peuvent opérationnaliser des ressemblances avec les IDN à grande échelle, tout en restant difficiles à repérer dans les journaux bruts.

Mitigation

Les équipes de sécurité devraient ajouter des recherches de routine pour xn-- dans les journaux de résolveur DNS et trier chaque correspondance comme un cas potentiel d’abus d’IDN. Faites un suivi en examinant les domaines décodés à la recherche de caractères Unicode suspects (par ex., des homographes), puis appliquez des contrôles standard tels que la validation des URL, les vérifications de réputation des domaines et la corrélation avec la télémétrie des points de terminaison/processus. Lorsque cela est possible, enrichissez les détections avec des listes blanches d’utilisations légitimes connues des IDN dans votre environnement pour réduire le bruit.

Réponse

Lorsqu’un domaine Punycode est identifié, les analystes doivent décoder le domaine, évaluer la réputation et le contexte historique, et déterminer si le trafic s’aligne avec l’activité commerciale attendue. Si une intention malveillante est confirmée, bloquez ou mettez en trou noir le domaine et pivotez pour identifier les infrastructures associées et les tentatives d’accès descendantes. Maintenez une surveillance continue des abus IDN/Punycode comme composant permanent de la chasse aux menaces, en ajustant les seuils et l’enrichissement au fil du temps pour maintenir une fidélité élevée.

Flux d’attaque

Nous mettons toujours à jour cette partie. Inscrivez-vous pour être notifié

Prévenez-moi

Exécution de la simulation

Prérequis : la vérification de pré-vol de la télémétrie et de la base doit avoir été réussie.

  • Narration d’attaque & Commandes :
    Un adversaire veut contacter un serveur de commande et de contrôle qui est caché derrière un domaine Unicode pour éviter une inspection occasionnelle. Ils encodent le domaine en utilisant Punycode, ce qui donne une chaîne commençant par « xn--« . En lançant une requête DNS pour ce nom encodé, l’attaquant génère exactement la télémétrie que la règle surveille. L’attaquant effectue la recherche à partir de l’hôte compromis en utilisant les outils Windows intégrés pour rester en mode « vivre de la terre ».

    # Domaine Punycode malveillant (exemple : xn--e1afmkfd.xn--p1ai)
    $maliciousDomain = "xn--e1afmkfd.xn--p1ai"
    Resolve-DnsName -Name $maliciousDomain -DnsOnly
  • Script de test de régression :

    <#
    .SYNOPSIS
        Simule une requête DNS punycode pour valider la règle de détection des "Domaines encodés en Punycode".
    
    .DESCRIPTION
        Le script effectue une seule recherche DNS pour un domaine punycode fabriqué.
        Il journalise l'action, attend brièvement pour garantir l'ingestion des journaux, puis se termine.
    #>
    
    #--- Configuration ---
    $punycodeDomain = "xn--e1afmkfd.xn--p1ai"   # Remplacez par tout FQDN encodé en punycode
    $logFile       = "$env:Temppunycode_test.log"
    
    #--- Exécution ---
    "[$(Get-Date -Format o)] Début de la requête DNS punycode pour $punycodeDomain" | Out-File -FilePath $logFile -Append
    try {
        Resolve-DnsName -Name $punycodeDomain -DnsOnly -ErrorAction Stop | Out-Null
        "[$(Get-Date -Format o)] Requête réussie" | Out-File -FilePath $logFile -Append
    } catch {
        "[$(Get-Date -Format o)] Échec de la requête : $_" | Out-File -FilePath $logFile -Append
    }
    
    #--- Pause optionnelle pour permettre l'ingestion par le SIEM (ajuster selon les besoins) ---
    Start-Sleep -Seconds 5
    "[$(Get-Date -Format o)] Script terminé" | Out-File -FilePath $logFile -Append
  • Commandes de nettoyage :

    # Vider le cache DNS pour supprimer la requête du cache local du résolveur
    ipconfig /flushdns
    
    # Supprimer le fichier de log temporaire créé par le script de test
    Remove-Item -Path "$env:Temppunycode_test.log" -ErrorAction SilentlyContinue