BlueDelta (APT28) Suplantación de Credenciales a través de Alojamiento Gratuito y Ngrok
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
BlueDelta, un grupo afiliado al GRU también conocido como APT28/Fancy Bear, llevó a cabo múltiples campañas de robo de credenciales entre febrero y septiembre de 2025. Las campañas utilizaron servicios gratuitos de hospedaje y tunelización para alojar páginas de inicio de sesión falsas de Outlook, Google y Sophos VPN y exfiltrar las credenciales capturadas. Los señuelos incluían documentos PDF legítimos y lenguaje específico de la región para aumentar la credibilidad. La operación tuvo como objetivo entidades del sector energético, investigación nuclear, gubernamentales y académicas en Turquía, Macedonia del Norte y Uzbekistán.
Investigación
Insikt Group de Recorded Future recopiló más de una docena de páginas de phishing alojadas en servicios como Webhook.site, InfinityFree, Byet Internet Services y ngrok. JavaScript en las páginas capturó nombres de usuario, contraseñas e identificadores de las víctimas, envió señales a webhooks controlados por atacantes y luego redirigió a las víctimas a portales auténticos. Múltiples variantes reutilizaron código y modificaron nombres de variables para simplificar el despliegue. La infraestructura tenía una vida corta y utilizó acortadores de enlaces como ShortURL.at.
Mitigación
Bloquear dominios conocidos de hospedaje gratuito y tunelización, monitorear el tráfico saliente hacia servicios de webhook y reforzar el MFA en todas las cuentas con acceso externo. Educar a los usuarios sobre las páginas de phishing que imitan portales de OWA, Google y VPN, especialmente cuando se adjuntan señuelos PDF. Implementar filtrado de red para URLs maliciosas conocidas y aplicar controles de seguridad de correo electrónico para detectar enlaces PDF sospechosos.
Respuesta
Alertar a los analistas de SOC cuando se observen HTTP POSTs a endpoints de webhook conocidos y cuando se carguen páginas de robo de credenciales. poner en cuarentena la página maliciosa, aislar cuentas de usuario afectadas, forzar restablecimientos de contraseñas y revisar registros para detectar movimientos laterales. Realizar una búsqueda de amenazas para otras páginas que utilicen la misma infraestructura y actualizar listas de bloqueos en consecuencia.
«graph TB %% Definiciones de Clase classDef action fill:#99ccff classDef service fill:#ffcc99 classDef tool fill:#cccccc %% Nodos – Reconocimiento recon_info[«<b>Acción</b> – <b>T1591 Recopilar Información de la Org de la Víctima</b>: Recopilar direcciones de correo electrónico públicas y detalles de la organización de los investigadores objetivo.»] class recon_info action recon_roles[«<b>Acción</b> – <b>T1591.004 Identificar Roles</b>: Determinar funciones laborales específicas como analistas de energía, académicos de think-tank y personal de seguridad.»] class recon_roles action %% Nodos – Desarrollo de Recursos resource_dev[«<b>Acción</b> – <b>T1583.006 Adquirir Servicios Web de Infraestructura</b>: Registrar dominios desechables y usar servicios gratuitos de hospedaje/tunelización (Webhook.site, InfinityFree, Byet, ngrok, shorturl.at).»] class resource_dev service %% Nodos – Phishing phishing[«<b>Acción</b> – <b>T1566.001 Spearphishing con Anexo</b>: Enviar un correo electrónico diseñado que contiene un enlace malicioso acortado que redirige a través de varias URLs.»] class phishing action %% Nodos – Ofuscación html_smuggling[«<b>Acción</b> – <b>T1027.006 Contrabando de HTML</b>: La primera redirección sirve HTML que brevemente incorpora un señuelo legítimo en PDF a través de meta-refresh.»] class html_smuggling action %% Nodos – Robo de Credenciales credential_forge[«<b>Acción</b> – <b>T1606 Falsificación de Credenciales Web / T1056.003 Captura de Portal Web</b>: Páginas de inicio de sesión falsificadas (OWA, Google, Sophos VPN) capturan credenciales con JavaScript.»] class credential_forge tool %% Nodos – Captura de Entrada Beacon web_capture_beacon[«<b>Acción</b> – <b>T1056.003 Captura de Portal Web</b>: JavaScript envía una señal de página abierta y las credenciales ingresadas al webhook del atacante.»] class web_capture_beacon tool %% Nodos – Exfiltración exfil_webhook[«<b>Acción</b> – <b>T1567.004 Exfiltración a través de Webhook</b>: POST de datos capturados como JSON a un webhook controlado por el atacante (webhook.site, ngrok-free.app).»] class exfil_webhook service %% Nodos – Comando y Control c2_webprotocol[«<b>Acción</b> – <b>T1071.001 Protocolo de Capa de Aplicación Protocolos Web</b>: Usar tráfico web estándar para comunicación C2.»] class c2_webprotocol service c2_webservice[«<b>Acción</b> – <b>T1102.002 Comunicación Bidireccional de Servicio Web</b>: Mantener un canal persistente bidireccional a través del servicio de webhook.»] class c2_webservice service %% Nodos – Tunelización protocol_tunnel[«<b>Acción</b> – <b>T1572 Tunelización de Protocolo</b>: Aprovechar túneles ngrok para exponer endpoints de exfiltración local a internet.»] class protocol_tunnel tool %% Nodos – Redirección Posterior a Exfiltración post_redirect[«<b>Acción</b> – Redirección Posterior a Exfiltración: Después de capturar datos, las víctimas son enviadas al documento legítimo original o portal VPN para evitar sospechas.»] class post_redirect action %% Conexiones – Flujo recon_info u002du002d>|conduce_a| recon_roles recon_roles u002du002d>|conduce_a| resource_dev resource_dev u002du002d>|habilita| phishing phishing u002du002d>|desencadena| html_smuggling html_smuggling u002du002d>|entrega| credential_forge credential_forge u002du002d>|captura| web_capture_beacon web_capture_beacon u002du002d>|envía_a| exfil_webhook exfil_webhook u002du002d>|soporta| c2_webprotocol c2_webprotocol u002du002d>|utiliza| c2_webservice c2_webservice u002du002d>|depende_de| protocol_tunnel protocol_tunnel u002du002d>|facilita| post_redirect «
Flujo de Ataque
Detecciones
Posible Distribución de Malware a través de Endpoints WebsiteHook (vía proxy)
Ver
Posible Distribución de Malware a través de Endpoints WebsiteHook (vía dns)
Ver
Posible Servicio de Tunelización de Puertos (vía dns)
Ver
Posible Infiltración/Exfiltración de Datos/C2 a través de Servicios/Terceros Herramientas (vía proxy)
Ver
IOCs (DestinoIP) para detectar: BlueDelta vinculado al GRU evoluciona el Robo de Credenciales
Ver
IOCs (OrigenIP) para detectar: BlueDelta vinculado al GRU evoluciona el Robo de Credenciales
Ver
Detección de las Campañas de Robo de Credenciales de BlueDelta a través del Sitio Webhook [Webserver]
Ver
Ejecución de Simulación
Prerequisito: La Verificación Previa de Telemetría y Línea Base debe haber pasado.
Razonamiento: 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 apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.
-
Narrativa y Comandos del Ataque:
- Entrega inicial de phishing: Un atacante envía un correo electrónico de phishing que contiene una URL corta que redirige al
webhook.sitepágina. - Interacción de la víctima: La víctima hace clic en el enlace; el navegador sigue la redirección y emite un HTTP GET solicitud a
https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7. - Página de captura de credenciales: La página alberga JavaScript que roba las credenciales ingresadas y las envía por POST a la misma URL del webhook, pero el proxy solo registra la solicitud GET inicial, lo cual es suficiente para activar la regla.
- Para la prueba, emulamos a la víctima utilizando
Invoke-WebRequestde PowerShell para solicitar la exacta URL maliciosa, reproduciendo la misma entrada del registro del proxy.
- Entrega inicial de phishing: Un atacante envía un correo electrónico de phishing que contiene una URL corta que redirige al
-
Script de Prueba de Regresión:
# ------------------------------------------------- # Simulación de Acceso al Sitio Webhook de BlueDelta (TC-20260109-9X3BZ) # ------------------------------------------------- $maliciousUrls = @( "https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7", "https://webhook.site/3791f8c0-1308-4c5b-9c82-0dc416aeb9c4" ) foreach ($url in $maliciousUrls) { try { Write-Host "Solicitando URL maliciosa: $url" Invoke-WebRequest -Uri $url -UseBasicParsing -Method GET -TimeoutSec 10 | Out-Null Write-Host "✅ Solicitud enviada." } catch { Write-Warning "Solicitud a $url falló: $_" } } -
Comandos de Limpieza:
# Vaciar caché de proxy (si aplica) para evitar entradas residuales net stop "Servicio Squid" net start "Servicio Squid" # Eliminar cualquier archivo temporal creado por el script (ninguno en este caso) Write-Host "Limpieza completa."