InterLock: Desglose Completo de Herramientas de una Operación de Ransomware
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
InterLock es una operación de ransomware de doble extorsión activa desde octubre de 2024 que roba datos, opera un sitio de filtración basado en Tor y cifra archivos en entornos FreeBSD/ESXi y Windows. La cadena de intrusión utiliza instaladores MSI de ScreenConnect para el acceso inicial, un backdoor NodeSnake multilenguaje para la persistencia, un recolector de credenciales NTLM y un marco de crypter personalizado que empaqueta las cargas de ransomware. El tráfico de comando y control depende de la comunicación WebSocket protegida con RC4, respaldada por IPs estáticas de respaldo y puntos finales adicionales de Cloudflare Tunnel. El ransomware añade la extensión .interlock, deja una nota de rescate que contiene una URL de negociación .onion, y utiliza claves derivadas de PRNG débiles que pueden permitir la recuperación.
Investigación
El informe analiza 15 muestras, incluyendo cuatro instaladores MSI de ScreenConnect, tres implantes NodeSnake (JavaScript, Java y C++ nativo), un DLL ladrón de NTLM, y cuatro ejecutables de ransomware. Todos los artefactos comparten tres direcciones IP de C2 codificadas en el software y el mismo bucle de descifrado de crypter marcado por el patrón de bytes 488b041f483345f04889041e. En su forma nativa, NodeSnake agrega tunelización TCP, secuestro de hilos y anti-depuración. La variante de ransomware de Windows crea una tarea programada diaria y borra los registros de eventos de Windows a través de wevtapi.dll. La infraestructura también incluye dos dominios protegidos por Let’s Encrypt y múltiples subdominios gratuitos de Cloudflare Tunnel.
Mitigación
Los defensores deben bloquear las IPs conocidas de C2 y los dominios de Cloudflare Tunnel en el perímetro. Si ConnectWise ScreenConnect no es necesario, debería ser eliminado o deshabilitado. Los controles de seguridad deben detectar el patrón de bytes del crypter y el prefijo del handshake de WebSocket cifrado con RC4 92 01 88 fe. La monitorización también debe cubrir la tarea programada llamada TaskSystem y cualquier creación de archivos con la extensión .interlock. Los controles de acceso de menor privilegio pueden reducir aún más la exposición al robo de credenciales NTLM y el abuso de rundll32.
Respuesta
Si se detecta InterLock, aísle el host afectado, preserve el binario completo para análisis forense, y extraiga la clave pública RSA-4096 incrustada junto con las claves cifradas por archivo. Cuando sea posible, intente la recuperación de claves usando el débil rand() más clock() PRNG si hay disponibles marcas de tiempo confiables. Elimine la tarea de persistencia TaskSystem, borre los artefactos .interlock, y restaure los datos impactados desde copias de seguridad. Los usuarios afectados deben ser notificados, y el incidente de doble extorsión debe ser reportado a las autoridades.
"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#cccccc classDef operator fill:#ff9900 %% Initial Access initial_access["<b>Action</b> – <b>T1204.004 User Execution</b>: Malicious MSI installer delivered"] class initial_access action msiexec_tool["<b>Tool</b> – <b>Name</b>: Msiexec<br/><b>Technique</b>: T1218.007 System Binary Proxy Execution"] class msiexec_tool tool screenconnect_client["<b>Malware</b> – <b>Name</b>: ScreenConnect client<br/><b>Purpose</b>: Remote access component"] class screenconnect_client malware nodesnake_backdoor["<b>Malware</b> – <b>Name</b>: NodeSnake backdoor<br/><b>Capabilities</b>: Interactive Windows shell and oneu2011shot commands"] class nodesnake_backdoor malware %% Persistence persistence_task["<b>Action</b> – <b>T1546 Event Triggered Execution</b>: Scheduled task created"] class persistence_task action scheduled_task["<b>Process</b> – <b>Name</b>: TaskSystem<br/><b>Schedule</b>: Daily at 20:00"] class scheduled_task process self_delete["<b>Action</b> – <b>T1070.009 Indicator Removal</b>: Selfu2011deletion after execution"] class self_delete action %% Credential Access credential_access["<b>Action</b> – <b>T1556.008 Modify Authentication Process</b>: NTLM hash harvesting"] class credential_access action ntlmthief_dll["<b>Tool</b> – <b>Name</b>: NtlmThief DLL<br/><b>Function</b>: Harvest NTLM hashes and force NTLMv1"] class ntlmthief_dll tool %% Defense Evasion defense_evasion["<b>Action</b> – <b>T1027 Obfuscated Files or Information</b>: Payloads packed with custom crypter"] class defense_evasion action custom_crypter["<b>Tool</b> – <b>Name</b>: Custom Crypter<br/><b>Techniques</b>: XOR, junk code, compileu2011afteru2011delivery, compression, stripped binaries"] class custom_crypter tool %% Command and Control c2_communication["<b>Action</b> – <b>T1071.001 Application Layer Protocol</b>: WebSocket channel (RC4 encrypted)"] class c2_communication action websocket_impl["<b>Tool</b> – <b>Name</b>: WebSocket client<br/><b>Features</b>: Dynamic URLs via Cloudflare Tunnel"] class websocket_impl tool %% Proxy Services proxy_service["<b>Action</b> – <b>T1090 Proxy</b>: Internal and multiu2011hop proxying"] class proxy_service action cloudflare_tunnel["<b>Tool</b> – <b>Name</b>: Cloudflare Tunnel<br/><b>Purpose</b>: Dynamic resolution of C2 URLs"] class cloudflare_tunnel tool protocol_tunneling["<b>Action</b> – <b>T1572 Protocol Tunneling</b>: TCP tunnel relays"] class protocol_tunneling action %% Privilege Escalation / Defense Evasion priv_esc["<b>Action</b> – <b>T1055.003 Process Injection</b>: Thread Execution Hijacking"] class priv_esc action tls_injection["<b>Action</b> – <b>T1055.005 Process Injection</b>: Thread Local Storage injection"] class tls_injection action process_injection_tool["<b>Tool</b> – <b>Name</b>: Process Injection routine"] class process_injection_tool tool %% Discovery discovery["<b>Action</b> – <b>T1016 System Network Configuration Discovery</b>: Collect system and network info"] class discovery action %% Collection collection["<b>Action</b> – <b>T1560.001 Archive via Utility</b> and <b>T1560.003 Archive via Custom Method</b>: Package exfiltrated data"] class collection action %% Exfiltration exfiltration["<b>Action</b> – <b>T1020 Automated Exfiltration</b> and <b>T1048.002 Exfiltration Over Asymmetric Encrypted Nonu2011C2 Protocol</b>"] class exfiltration action %% Impact impact["<b>Action</b> – <b>T1486 Data Encrypted for Impact</b>: InterLock ransomware encrypts files"] class impact action ransomware["<b>Malware</b> – <b>Name</b>: InterLock ransomware<br/><b>Encryption</b>: AESu2011256u2011CBC and RSAu20114096 OAEP<br/><b>Extension</b>: .interlock"] class ransomware malware ransom_note["<b>Action</b> – <b>T1490 Inhibit System Recovery</b>: Clear event logs and drop ransom note"] class ransom_note action artifact_cleanup["<b>Action</b> – <b>T1070 Indicator Removal</b>: Delete artifacts and files"] class artifact_cleanup action %% Connections initial_access –>|uses| msiexec_tool msiexec_tool –>|installs| screenconnect_client screenconnect_client –>|drops| nodesnake_backdoor nodesnake_backdoor –>|creates| persistence_task persistence_task –>|creates| scheduled_task scheduled_task –>|executes| self_delete nodesnake_backdoor –>|enables| credential_access credential_access –>|uses| ntlmthief_dll nodesnake_backdoor –>|obfuscates| defense_evasion defense_evasion –>|employs| custom_crypter nodesnake_backdoor –>|communicates via| c2_communication c2_communication –>|uses| websocket_impl websocket_impl –>|routes through| cloudflare_tunnel cloudflare_tunnel –>|supports| proxy_service proxy_service –>|includes| protocol_tunneling nodesnake_backdoor –>|performs| priv_esc priv_esc –>|uses| process_injection_tool process_injection_tool –>|also performs| tls_injection nodesnake_backdoor –>|performs| discovery nodesnake_backdoor –>|packages data with| collection collection –>|exfiltrates via| exfiltration exfiltration –>|delivers payload to| impact impact –>|uses| ransomware ransomware –>|leaves| ransom_note ransom_note –>|triggers| artifact_cleanup %% Class assignments class msiexec_tool tool class screenconnect_client malware class nodesnake_backdoor malware class ntlmthief_dll tool class custom_crypter tool class websocket_impl tool class cloudflare_tunnel tool class process_injection_tool tool class ransomware malware "
Flujo de Ataque
Detecciones
Comunicación de Dominio Sospechosa Trycloudflare (via dns)
Ver
Ejecución Sospechosa desde Perfil de Usuario Público (via process_creation)
Ver
Posible Uso de Schtasks o AT para Persistencia (via cmdline)
Ver
Posible Uso de PING para Ejecución con Retardo (via cmdline)
Ver
Comando y Control Sospechoso por Solicitud de DNS de Dominio de Nivel Superior Inusual (TLD) (via dns)
Ver
Posible Enumeración del Sistema (via cmdline)
Ver
Posible Enumeración o Manipulación de Cuenta o Grupo (via cmdline)
Ver
IOCs (Emails) para detectar: InterLock: desmantelamiento completo de herramientas de una operación de ransomware
Ver
IOCs (SourceIP) para detectar: InterLock: desmantelamiento completo de herramientas de una operación de ransomware
Ver
IOCs (HashSha256) para detectar: InterLock: desmantelamiento completo de herramientas de una operación de ransomware
Ver
IOCs (DestinationIP) para detectar: InterLock: desmantelamiento completo de herramientas de una operación de ransomware
Ver
IOCs (HashMd5) para detectar: InterLock: desmantelamiento completo de herramientas de una operación de ransomware
Ver
Detección de Handshake y Patrón de URL de NodeSnake WebSocket [Conexión de Red de Windows]
Ver
Detectar Variante ELF de InterLock Usando sysconf para el Conteo de CPUs [Creación de Proceso en Linux]
Ver
Detectar Método de Ejecución de NodeSnake JS Implant e InterLock DLL [Creación de Proceso en Windows]
Ver
Detección de InterLock Ransomware y Establecimiento de Salida de Comandos de NodeSnake [Evento de Archivo de Windows]
Ver
Ejecución de Simulación
Prerrequisito: El Chequeo de Telemetría y Línea Base Pre‑vuelo debe haber pasado.
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 los TTPs identificados y procurar generar exactamente la telemetría esperada por la lógica de detección.
-
Narrativa de Ataque y Comandos:
El adversario ha comprometido una estación de trabajo de bajo privilegio y está ejecutando un implante de JavaScript de NodeSnake que realiza dos acciones:- Enumeración de nivel de privilegio – ejecuta
cmd.exe /c net1 sessionpara listar las sesiones de red activas, un método conocido para descubrir si el proceso se ejecuta como SYSTEM o como usuario regular. - Ejecución de carga útil basada en DLL – deja caer un DLL malicioso (
evilpayload.dll) en%TEMP%y lo lanza a través derundll32.exe %TEMP%evilpayload.dll,run %TEMP%evilpayload.dll. Esto imita la técnica de InterLock de usar rundll32 como cargador para una carga útil de segunda etapa.
Ambos comandos se ejecutan directamente para producir las cadenas de línea de comandos exactas que coincide con la regla de Sigma.
- Enumeración de nivel de privilegio – ejecuta
-
Guión de Prueba de Regresión:
# ------------------------------------------------- # Simulación de NodeSnake/InterLock – activa la regla Sigma # ------------------------------------------------- # 1. Crear un DLL malicioso ficticio (no se necesita binario para detección) $dllPath = "$env:TEMPevilpayload.dll" Set-Content -Path $dllPath -Value "MZ" -Encoding ASCII # Placeholder mínimo de encabezado PE # 2. Ejecutar el comando de enumeración de privilegios (coincidencia exacta) Write-Host "[*] Ejecutando enumeración de privilegios (cmd.exe /c net1 session)" cmd.exe /c net1 session # 3. Ejecutar el cargador de payload de rundll32 (coincidencia exacta) Write-Host "[*] Lanzando DLL malicioso a través de rundll32.exe" rundll32.exe "$dllPath,run $dllPath" # 4. Pausar para permitir la ingesta de SIEM Start-Sleep -Seconds 10 -
Comandos de Limpieza:
# ------------------------------------------------- # Limpieza para la simulación # ------------------------------------------------- $dllPath = "$env:TEMPevilpayload.dll" if (Test-Path $dllPath) { Remove-Item -Path $dllPath -Force Write-Host "[+] Eliminado $dllPath" } else { Write-Host "[-] No se encontró DLL para eliminar." } # Opcionalmente limpiar el historial de PowerShell para reducir la huella forense Clear-History