SOC Prime Bias: Moyen

29 Jan 2026 18:23

Le Code PyRAT : Internes d’un RAT Basé sur Python

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Le Code PyRAT : Internes d’un RAT Basé sur Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

L’article dresse le profil de PyRAT, un cheval de Troie d’accès à distance basé sur Python et empaqueté sous la forme d’un binaire ELF à l’aide de PyInstaller. Il fonctionne à la fois sur Linux et Windows, communique avec un serveur C2 via HTTP non chiffré, et prend en charge l’exécution de commandes, l’exfiltration de fichiers, la capture d’écran et une routine d’autodestruction. La persistance est mise en œuvre via XDG autostart sur Linux et une clé de registre Run sur Windows. Le rapport souligne la légèreté de l’outil et la facilité avec laquelle il peut être réutilisé par les cybercriminels.

Enquête

Les chercheurs ont extrait le bytecode Python intégré avec pyinstxtractor, décompilé les modules et identifié la classe principale Agent qui effectue l’empreinte digitale de l’hôte, la génération d’UID, la gestion des threads et la coordination C2. L’analyse statique a révélé les importations clés, les noms de fichiers, l’interaction avec le registre et le point de terminaison HTTP POST utilisé pour le signalement. Les tests comportementaux ont montré le flux de travail complet : création de persistance, exécution de commandes, énumération de fichiers, opérations de téléchargement/téléversement, création d’archives ZIP, capture d’écran et nettoyage optionnel des artefacts.

Atténuation

Surveillez les fichiers .desktop autostart suspects créés dans les profils utilisateur et les ajouts à la clé de registre HKCURun utilisant des noms exécutables inconnus. Au niveau du réseau, surveillez le trafic HTTP POST sortant vers des hôtes inconnus ciblant le point de terminaison /api/{uid}/hello. Sur les terminaux, signalez les binaires ELF inconnus contenant du contenu Python intégré et un comportement de processus anormal tel que l’exécution fréquente de sous-processus.

Réponse

Si détecté, isolez le système, collectez l’échantillon ELF et tout fichier .desktop associé, et préservez l’état du registre pertinent. Extrayez l’UID, l’adresse C2, et tous les fichiers transférés lors de l’exécution dans le cadre de l’analyse judiciaire. Bloquez l’infrastructure C2 identifiée, supprimez la persistance et effectuez un nettoyage complet. Modifiez les identifiants des comptes qui ont pu être compromis.

graph TB %% Class Definitions classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef action fill:#ccffcc classDef persistence fill:#ffcc99 classDef cleanup fill:#dddddd %% Node Definitions malware_pyrat[« <b>Logiciel Malveillant</b> – <b>Nom</b> : PyRAT ELF<br/><b>Description</b> : RAT Linux/Windows exécuté comme binaire ELF »] class malware_pyrat malware tech_system_info[« <b>Technique</b> – <b>T1082 Découverte des Informations Système</b><br/>Collecte la version de l’OS, le nom d’hôte et les détails matériels »] class tech_system_info technique tech_user_discovery[« <b>Technique</b> – <b>T1033 Découverte du Propriétaire/Utilisateur du Système</b><br/>Identifie l’utilisateur connecté et les détails du compte »] class tech_user_discovery technique action_establish_c2[« <b>Action</b> – Établir le C2 via HTTP POST non chiffré »] class action_establish_c2 action tech_web_service[« <b>Technique</b> – <b>T1102.003 Service Web : Communication Unidirectionnelle</b><br/>Utilise HTTP POST pour envoyer des données vers un serveur distant »] class tech_web_service technique tech_exfil_unenc[« <b>Technique</b> – <b>T1048.003 Exfiltration via Protocole Non-C2 Non Chiffré</b><br/>Transfère les données sans chiffrement »] class tech_exfil_unenc technique tech_data_encoding[« <b>Technique</b> – <b>T1132.002 Encodage des Données : Encodage Non Standard</b><br/>Applique un encodage personnalisé avant la transmission »] class tech_data_encoding technique action_execute_cmd[« <b>Action</b> – Exécuter des Commandes »] class action_execute_cmd action tech_windows_shell[« <b>Technique</b> – <b>T1059.003 Invite de Commandes Windows</b><br/>Exécute des commandes via cmd.exe »] class tech_windows_shell technique tech_unix_shell[« <b>Technique</b> – <b>T1059.004 Shell Unix</b><br/>Exécute des commandes via /bin/sh »] class tech_unix_shell technique action_collect_files[« <b>Action</b> – Collecter des Fichiers et Énumérer le Système de Fichiers »] class action_collect_files action tech_archive[« <b>Technique</b> – <b>T1560.002 Archivage des Données Collectées : Via Bibliothèque</b><br/>Compresse les données à l’aide d’une bibliothèque ZIP »] class tech_archive technique tech_screenshot[« <b>Technique</b> – <b>T1113 Capture d’Écran</b><br/>Capture l’image du bureau »] class tech_screenshot technique tech_persist_linux[« <b>Technique</b> – <b>T1547.013 Démarrage Automatique XDG</b><br/>Ajoute une entrée .desktop au répertoire de démarrage automatique »] class tech_persist_linux persistence tech_persist_windows[« <b>Technique</b> – <b>T1547.014 Clés Run du Registre / Dossier de Démarrage</b><br/>Crée une entrée HKCU\\Run pour la persistance »] class tech_persist_windows persistence tech_cleanup[« <b>Technique</b> – <b>T1070.009 Suppression des Indicateurs : Nettoyage de la Persistance</b><br/>Supprime les artefacts de persistance et les journaux »] class tech_cleanup cleanup %% Connections malware_pyrat –>|mène_à| tech_system_info malware_pyrat –>|mène_à| tech_user_discovery tech_system_info –>|fournit des informations pour| action_establish_c2 tech_user_discovery –>|fournit des informations pour| action_establish_c2 action_establish_c2 –>|utilise| tech_web_service action_establish_c2 –>|utilise| tech_exfil_unenc action_establish_c2 –>|utilise| tech_data_encoding action_establish_c2 –>|permet| action_execute_cmd action_execute_cmd –>|utilise| tech_windows_shell action_execute_cmd –>|utilise| tech_unix_shell action_execute_cmd –>|mène_à| action_collect_files action_collect_files –>|mène_à| tech_archive tech_archive –>|mène_à| tech_screenshot tech_screenshot –>|permet| tech_persist_linux tech_screenshot –>|permet| tech_persist_windows tech_persist_linux –>|mène ultérieurement à| tech_cleanup tech_persist_windows –>|mène ultérieurement à| tech_cleanup

Flux d’attaque

Exécution de la simulation

Prérequis : La vérification du télémétrie et de la base de référence doit être réussie.

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 TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Narration de l’attaque et commandes :

    Un attaquant a obtenu un identifiant SSH compromis pour un utilisateur régulier. Après connexion, il exécute un script de type « living off the land » qui :

    1. Écrit la charge utile ELF malveillante (agent-svc.pyc) dans le répertoire personnel de l’utilisateur, la déguisant en fichier bytecode Python alors qu’il s’agit en réalité d’un binaire ELF.
    2. Copie un outil de paquetage Debian masqué nommé dpkgn dans /usr/local/bin, lui accordant des droits d’exécution. L’outil est un simple wrapper qui lance la charge utile ELF.
    3. Installe une entrée de bureau autostart (dpkgn.desktop) dans ~/.config/autostart afin que la charge utile s’exécute à chaque démarrage de session graphique.
    4. Définit les permissions appropriées pour éviter toute suspicion immédiate.

    Les événements de fichiers combinés (agent-svc.pyc and dpkgn) satisfont à la première condition de la règle, tandis que le fichier .desktop satisfait à la seconde condition.

  • Script de test de régression :

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Déployer une charge utile ELF malveillante déguisée en .pyc
    MALWARE_PATH="$HOME/agent-svc.pyc"
    echo "Création d'une fausse charge utile ELF (binaire fictif)..."
    dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none
    chmod +x "$MALWARE_PATH"
    
    # 2. Déployer un faux outil Debian nommé dpkgn
    FAKE_TOOL="/usr/local/bin/dpkgn"
    echo "#!/usr/bin/env bash" | sudo tee "$FAKE_TOOL" > /dev/null
    echo "exec "$MALWARE_PATH" "$@"" | sudo tee -a "$FAKE_TOOL" > /dev/null
    sudo chmod +x "$FAKE_TOOL"
    
    # 3. Créer une entrée de bureau autostart
    AUTOSTART_DIR="$HOME/.config/autostart"
    mkdir -p "$AUTOSTART_DIR"
    DESKTOP_FILE="$AUTOSTART_DIR/dpkgn.desktop"
    cat > "$DESKTOP_FILE" <<EOF
    [Desktop Entry]
    Type=Application
    Exec=$FAKE_TOOL
    Hidden=false
    NoDisplay=false
    X-GNOME-Autostart-enabled=true
    Name=Package Manager
    Comment=System Update Service
    EOF
    
    echo "Artefacts de persistance PyRAT déployés."
  • Commandes de nettoyage :

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Supprimer ELF malveillant
    rm -f "$HOME/agent-svc.pyc"
    
    # Supprimer faux outil
    sudo rm -f /usr/local/bin/dpkgn
    
    # Supprimer l'entrée autostart
    rm -f "$HOME/.config/autostart/dpkgn.desktop"
    
    echo "Nettoyage terminé."