SOC Prime Bias: Élevé

31 Mar 2026 17:23

À l’intérieur de Pay2Key : Analyse technique d’une variante de ransomware Linux

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
À l’intérieur de Pay2Key : Analyse technique d’une variante de ransomware Linux
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Pay2Key est une opération de rançongiciel attribuée à l’Iran qui a introduit une variante Linux fin août 2025. Le logiciel malveillant s’exécute avec des privilèges root, désactive les protections de sécurité et chiffre les fichiers avec ChaCha20. Son comportement est piloté par un fichier de configuration et il prend en charge à la fois le mode de cryptage complet et partiel des fichiers. L’analyse met en avant les techniques de l’opérateur et le besoin croissant de défenses spécifiques aux rançongiciels Linux.

Enquête

Morphisec Threat Labs a mené une analyse de rétro-ingénierie de l’échantillon Pay2Key Linux. Les chercheurs ont documenté la validation des privilèges, le parsing de la configuration JSON, la découverte du système de fichiers via /proc/mounts, l’arrêt des services, la désactivation de SELinux et AppArmor, la persistance via cron, et le chiffrement ChaCha20 avec des clés par fichier stockées dans un bloc de métadonnées obfusqué. L’échantillon ne montrait aucune preuve de trafic réseau C2 ou d’exfiltration de données.

Atténuation

Le rapport recommande de déployer des outils anti-rançongiciels axés sur Linux capables d’arrêter l’exécution avant que le chiffrement ne commence, de soutenir la défense par déplacement de cible, et de maintenir des protections d’intégrité à l’exécution. Il est également conseillé de réduire la surface d’attaque en désactivant les services inutiles et en renforçant les politiques SELinux/AppArmor. Une protection des points finaux qui suit l’activité anormale des processus privilégiés peut encore améliorer la résilience.

Réponse

Si Pay2Key est détecté, isolez le système, arrêtez le processus malveillant et supprimez l’entrée de persistance cron. Confirmez que les permissions des fichiers sont intactes et récupérez les données chiffrées à partir des sauvegardes. Une enquête judiciaire devrait ensuite capturer les indicateurs d’IOC pertinents et vérifier l’environnement plus large pour une activité liée.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef operator fill:#ff9900 %% Nodes representing each ATT&CK technique persistence_cron["<b>Technique</b> – <b>T1053.003 Tâche/Job Planifié(e) : Cron</b><br/>Crée ou modifie une tâche cron pour assurer l’exécution après le redémarrage du système"] class persistence_cron technique defense_impair["<b>Technique</b> – <b>T1562 Altération des Défenses</b><br/>Désactive SELinux et AppArmor pour affaiblir les mécanismes de protection de l’hôte"] class defense_impair technique indicator_removal["<b>Technique</b> – <b>T1027.005 Suppression d’Indicateurs des Outils</b><br/>Supprime les indicateurs des outils de sécurité pour échapper à la détection"] class indicator_removal technique discovery_mounts["<b>Technique</b> – <b>T1083 Découverte de Fichiers et Répertoires</b><br/>Lit /proc/mounts, filtre les pseudo-systèmes de fichiers et classe les montages pour la sélection des cibles"] class discovery_mounts technique obfuscation_storage["<b>Technique</b> – <b>T1027 Fichiers ou Informations Obfusqués</b><br/>Stocke les métadonnées de chiffrement en utilisant une chaîne codée en dur et obfusque la charge utile"] class obfuscation_storage technique deobfuscate["<b>Technique</b> – <b>T1140 Déobfuscation/Décodage de Fichiers ou Informations</b><br/>Décode la charge utile obfusquée pendant le traitement"] class deobfuscate technique impact_encryption["<b>Technique</b> – <b>T1486 Données Chiffrées pour un Impact</b><br/>Génère des clés ChaCha20 par fichier et chiffre les données, produisant des fichiers exigeant une rançon"] class impact_encryption technique %% Flow connections persistence_cron –>|conduit à| defense_impair defense_impair –>|conduit à| indicator_removal indicator_removal –>|conduit à| discovery_mounts discovery_mounts –>|conduit à| obfuscation_storage obfuscation_storage –>|conduit à| deobfuscate deobfuscate –>|conduit à| impact_encryption "

Flux d’Attaque

Exécution de la Simulation

Pré-requis : La Vérification Pré-vol de Télémétrie & Référence doit avoir été validée.

Rationalisation : 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 exactement la télémétrie attendue par la logique de détection.

  • Narration & Commandes d’Attaque :

    L’attaquant simulé a déjà obtenu une prise sur l’hôte Linux et souhaite préparer l’environnement pour le déploiement du rançongiciel. Ils vérifient d’abord qu’ils fonctionnent avec des privilèges root, puis désactivent délibérément les contrôles de sécurité et arrêtent les services critiques pour éviter toute interruption pendant le chiffrement. L’attaquant évite de créer une entrée cron à cette étape pour satisfaire la clause de négation de la règle.

    1. Vérification des Privilèges – L’attaquant exécute id -u et vérifie la présence de UID 0, qui apparaît dans la ligne de commande comme « root ».
    2. Interruption de Service – Utilisation de systemctl stop l’attaquant arrête le ssh service pour prévenir toute interférence à distance.
    3. Interruption de Processus – L’attaquant tue un processus en arrière-plan de basse priorité (sleep 300 &) pour illustrer le modèle de kill .
    4. Désactivation des Défenses – SELinux est réglé en mode permissif (setenforce 0) et AppArmor est désactivé (aa-disable).

    Ces étapes produisent des événements execve qui satisfont selection1 (contiennent « root ») et selection2/selection3 (contiennent des commandes stop/kill ou désactiver) tout en omettant crontab, déclenchant ainsi la règle Sigma.

  • Script de Test de Régression :

    #!/usr/bin/env bash
    set -e
    
    echo "[*] Étape 1 – Vérifier les privilèges root (contient 'root')"
    id -u | grep ^0 && echo "privilège root confirmé"
    
    echo "[*] Étape 2 – Arrêter un service (systemctl stop sshd)"
    sudo systemctl stop sshd || true
    
    echo "[*] Étape 3 – Lancer et tuer un processus factice"
    sleep 300 &
    DUMMY_PID=$!
    sudo kill -9 $DUMMY_PID || true
    
    echo "[*] Étape 4 – Désactiver SELinux et AppArmor"
    sudo setenforce 0 || true
    sudo aa-disable || true
    
    echo "[+] Simulation terminée – la détection aurait dû être déclenchée."
  • Commandes de Nettoyage :

    #!/usr/bin/env bash
    set -e
    
    echo "[*] Restauration des services"
    sudo systemctl start sshd || true
    
    echo "[*] Réactivation de SELinux (enforcement) et AppArmor"
    sudo setenforce 1 || true
    sudo aa-enable || true
    
    echo "[*] S'assurer qu'aucun processus isolé ne reste"
    pkill -f "sleep 300" || true
    
    echo "[+] Nettoyage terminé."