El Código PyRAT: Internos de un RAT Basado en Python
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
Detecciones
Operación Potencial de Autoeliminación de Malware o Encubrimiento de Stderr (a través de la línea de comandos)
Ver
El Archivo Fue Creado en la Carpeta Tmp de Linux (a través de file_event)
Ver
Puntos de Persistencia Posibles [ASEPs – Software/NTUSER Hive] (a través de la línea de comandos)
Ver
Intento de Eliminación de Claves de Registro Posible (a través de process_creation)
Ver
Intento de Modificación de Archivos XDG Autostart de Linux Posible (a través de la línea de comandos)
Ver
Permisos Peligrosos para un Binario/Script/Carpeta fueron establecidos (a través de la línea de comandos)
Ver
IOC (HashMd5) para detectar: El Código de PyRAT: RAT Basado en Python y sus Internos
Ver
Persistencia en Windows a través de la Clave de Ejecución del Usuario Actual [Evento del Registro de Windows]
Ver
Detección de Persistencia de PyRAT en Linux [Creación de Proceso en Linux]
Ver
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:
- 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. - Copia una herramienta empaquetada de Debian disfrazada llamada
dpkgnen/usr/local/bin, otorgándole derechos de ejecución. La herramienta es un envoltorio simple que simplemente lanza la carga ELF. - Instala una entrada de escritorio de autostart (
dpkgn.desktop) en~/.config/autostartpara que la carga se ejecute al inicio de cada sesión gráfica. - Configura los permisos apropiados para evitar sospechas inmediatas.
Los eventos de archivo combinados (
agent-svc.pycanddpkgn) cumplen con la primera condición de la regla, mientras que el archivo.desktopcumple con la segunda condición. - Escribe la carga útil ELF maliciosa (
-
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."