SOC Prime Bias: Medio

29 Ene 2026 18:23

El Código PyRAT: Internos de un RAT Basado en Python

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
El Código PyRAT: Internos de un RAT Basado en Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El artículo perfila PyRAT, un troyano de acceso remoto basado en Python empaquetado como un binario ELF usando PyInstaller. Funciona tanto en Linux como en Windows, se comunica con un servidor C2 a través de HTTP sin cifrar, y admite la ejecución de comandos, exfiltración de archivos, captura de pantallas y una rutina de autodestrucción. La persistencia se implementa a través de XDG autostart en Linux y una clave de registro Run en Windows. El informe enfatiza lo liviana que es la herramienta y lo fácilmente que puede ser reutilizada por los ciberdelincuentes.

Investigación

Los investigadores extrajeron el bytecode de Python incrustado con pyinstxtractor, descompilaron los módulos e identificaron la clase principal Agent que realiza el fingerprinting del host, la generación de UID, la gestión de hilos y la coordinación con C2. El análisis estático reveló importaciones clave, nombres de archivos, interacción con el registro y el endpoint HTTP POST utilizado para el beaconing. Las pruebas de comportamiento mostraron el flujo de trabajo completo: creación de persistencia, ejecución de comandos, enumeración de archivos, operaciones de carga/descarga, creación de archivos ZIP, captura de pantalla y limpieza de artefactos opcional.

Mitigación

Monitoree .desktop de autoinicio sospechosos creados en los perfiles de usuario y para adiciones a la clave HKCURun utilizando nombres de ejecutables desconocidos. En la capa de red, observe el tráfico HTTP POST saliente hacia hosts desconocidos que apunten al endpoint /api/{uid}/hello. En los endpoints, marque los binarios ELF desconocidos que contengan contenido Python incrustado y el comportamiento anómalo del proceso, como la ejecución frecuente de subprocesos.

Respuesta

Si se detecta, aísle el sistema, recopile la muestra ELF y cualquier archivo .desktop asociado, y conserve el estado relevante del registro. Extraiga el UID, la dirección C2 y los archivos transferidos durante la ejecución como parte de la forensia. Bloquee la infraestructura C2 identificada, elimine la persistencia y complete una limpieza completa. Rote credenciales para cuentas que puedan haber sido expuestas.

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>Malware</b> – <b>Nombre</b>: PyRAT ELF<br/><b>Descripción</b>: RAT para Linux/Windows ejecutado como binario ELF»] class malware_pyrat malware tech_system_info[«<b>Técnica</b> – <b>T1082 Descubrimiento de Información del Sistema</b><br/>Recopila versión del SO, nombre de host y detalles de hardware»] class tech_system_info technique tech_user_discovery[«<b>Técnica</b> – <b>T1033 Descubrimiento del Propietario/Usuario del Sistema</b><br/>Enumera el usuario conectado y los detalles de la cuenta»] class tech_user_discovery technique action_establish_c2[«<b>Acción</b> – Establecer C2 mediante HTTP POST sin cifrar»] class action_establish_c2 action tech_web_service[«<b>Técnica</b> – <b>T1102.003 Servicio Web: Comunicación Unidireccional</b><br/>Utiliza HTTP POST para enviar datos a un servidor remoto»] class tech_web_service technique tech_exfil_unenc[«<b>Técnica</b> – <b>T1048.003 Exfiltración por Protocolo No C2 sin Cifrar</b><br/>Transfiere datos sin cifrado»] class tech_exfil_unenc technique tech_data_encoding[«<b>Técnica</b> – <b>T1132.002 Codificación de Datos: Codificación No Estándar</b><br/>Aplica codificación personalizada antes de la transmisión»] class tech_data_encoding technique action_execute_cmd[«<b>Acción</b> – Ejecutar Comandos»] class action_execute_cmd action tech_windows_shell[«<b>Técnica</b> – <b>T1059.003 Consola de Comandos de Windows</b><br/>Ejecuta comandos mediante cmd.exe»] class tech_windows_shell technique tech_unix_shell[«<b>Técnica</b> – <b>T1059.004 Shell Unix</b><br/>Ejecuta comandos mediante /bin/sh»] class tech_unix_shell technique action_collect_files[«<b>Acción</b> – Recopilar Archivos y Enumerar el Sistema de Archivos»] class action_collect_files action tech_archive[«<b>Técnica</b> – <b>T1560.002 Archivar Datos Recopilados: Archivado mediante Biblioteca</b><br/>Comprime datos usando una biblioteca ZIP»] class tech_archive technique tech_screenshot[«<b>Técnica</b> – <b>T1113 Captura de Pantalla</b><br/>Captura la imagen del escritorio»] class tech_screenshot technique tech_persist_linux[«<b>Técnica</b> – <b>T1547.013 Inicio Automático XDG</b><br/>Agrega una entrada .desktop al directorio de inicio automático del usuario»] class tech_persist_linux persistence tech_persist_windows[«<b>Técnica</b> – <b>T1547.014 Claves Run del Registro / Carpeta de Inicio</b><br/>Crea una entrada en HKCU\\Run para persistencia»] class tech_persist_windows persistence tech_cleanup[«<b>Técnica</b> – <b>T1070.009 Eliminación de Indicadores: Limpiar Persistencia</b><br/>Elimina artefactos de persistencia y registros»] class tech_cleanup cleanup %% Connections malware_pyrat –>|conduce_a| tech_system_info malware_pyrat –>|conduce_a| tech_user_discovery tech_system_info –>|proporciona información para| action_establish_c2 tech_user_discovery –>|proporciona información para| action_establish_c2 action_establish_c2 –>|utiliza| tech_web_service action_establish_c2 –>|utiliza| tech_exfil_unenc action_establish_c2 –>|utiliza| tech_data_encoding action_establish_c2 –>|habilita| action_execute_cmd action_execute_cmd –>|utiliza| tech_windows_shell action_execute_cmd –>|utiliza| tech_unix_shell action_execute_cmd –>|conduce_a| action_collect_files action_collect_files –>|conduce_a| tech_archive tech_archive –>|conduce_a| tech_screenshot tech_screenshot –>|habilita| tech_persist_linux tech_screenshot –>|habilita| tech_persist_windows tech_persist_linux –>|posteriormente conduce a| tech_cleanup tech_persist_windows –>|posteriormente conduce a| tech_cleanup

Flujo de Ataque

Ejecución de Simulación

Requisito Previo: Debe haber pasado la Verificación de Telemetría y Línea de Base.

Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente las TTPs identificadas y tener como objetivo generar la telemetría exacta esperada por la lógica de detección.

    • Narrativa de Ataque y Comandos:

      Un atacante ha obtenido una credencial de SSH comprometida de un usuario regular. Después de iniciar sesión, ejecutan un script que utiliza recursos nativos que:

      1. Escribe la carga útil ELF maliciosa (agent-svc.pyc) en el directorio de inicio del usuario disfrazándola como un archivo de bytecode de Python aunque es realmente un binario ELF.
      2. Copia una herramienta empaquetada de Debian disfrazada llamada dpkgn en /usr/local/bin, otorgándole derechos de ejecución. La herramienta es un envoltorio simple que simplemente lanza la carga ELF.
      3. Instala una entrada de escritorio de autostart (dpkgn.desktop) en ~/.config/autostart para que la carga se ejecute al inicio de cada sesión gráfica.
      4. Configura los permisos apropiados para evitar sospechas inmediatas.

      Los eventos de archivo combinados (agent-svc.pyc and dpkgn) cumplen con la primera condición de la regla, mientras que el archivo .desktop cumple con la segunda condición.

    • Script de Prueba de Regresión:

      #!/usr/bin/env bash
      set -euo pipefail
      # 1. Desplegar ELF malicioso disfrazado como .pyc
      MALWARE_PATH="$HOME/agent-svc.pyc"
      echo "Creando carga ELF falsa (binario de prueba) ..."
      dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none
      chmod +x "$MALWARE_PATH"
      # 2. Desplegar herramienta falsa de Debian llamada 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. Crear entrada de autostart de escritorio
      AUTOSTART_DIR="$HOME/.config/autostart"
      mkdir -p "$AUTOSTART_DIR"
      DESKTOP_FILE="$AUTOSTART_DIR/dpkgn.desktop"
      cat > "$DESKTOP_FILE" <

  • Comandos de Limpieza:

    #!/usr/bin/env bash
    set -euo pipefail
    # Eliminar ELF malicioso
    rm -f "$HOME/agent-svc.pyc"
    # Eliminar herramienta falsa
    sudo rm -f /usr/local/bin/dpkgn
    # Eliminar entrada de autostart
    rm -f "$HOME/.config/autostart/dpkgn.desktop"
    echo "Limpieza completada."