- Início
- Defesa do lado do cliente
- Demo
- Fase 3 — Mitigar
Fase 3 — Mitigar
A Fase 3 cria uma prova antes/depois da mitigação CSD. Você re-executa o ataque sem mitigações para estabelecer uma linha de base, aplica as mitigações e, em seguida, re-executa o mesmo ataque para provar que o CSD bloqueia as chamadas de rede. A Fase 2 deve estar concluída — todas as verificações DET com resultado PASS — antes de prosseguir.
Passo 1: Confirmar que Não Há Mitigações Ativas (Linha de Base)
Seção intitulada “Passo 1: Confirmar que Não Há Mitigações Ativas (Linha de Base)”Antes de capturar o snapshot “antes”, verifique se o ambiente está limpo — nenhuma mitigação deve estar ativa. Isso garante que o ataque de linha de base seja executado sem nenhum bloqueio do CSD.
Verificar Contagem de Domínios Mitigados
Seção intitulada “Verificar Contagem de Domínios Mitigados”curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'Se a contagem não for 0, existem mitigações de uma execução anterior. Exclua cada uma antes de prosseguir:
# Excluir um domínio mitigado (repita para cada nome de domínio)curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/<domain-name>" \ | jq .Substitua <domain-name> pelo metadata.name utilizado quando o domínio foi mitigado (ex.: cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io, httpbin.org, jsonplaceholder.typicode.com). Se a limpeza de httpbin.org deixar um item restante, tente também excluir www.httpbin.org — algumas execuções anteriores podem ter utilizado esse valor como nome de metadados.
Confirmar que as Detecções da Fase 2 Estão Presentes
Seção intitulada “Confirmar que as Detecções da Fase 2 Estão Presentes”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}]}'Evidência
Seção intitulada “Evidência”| Verificação | Esperado | Status |
|---|---|---|
| Contagem de domínios mitigados | 0 (linha de base limpa) | PASS se 0, requer limpeza se > 0 |
| Contagem de domínios detectados | > 0 (detecções da Fase 2 presentes) | PASS se > 0 |
| Domínios de exfiltração presentes | www.httpbin.org, jsonplaceholder.typicode.com | PASS se pelo menos um aparecer |
Passo 2: Executar Ataque — Antes da Mitigação
Seção intitulada “Passo 2: Executar Ataque — Antes da Mitigação”Re-execute a simulação combinada sem mitigações ativas para capturar uma linha de base atualizada. Este é o snapshot “antes” — prova de que os ataques têm êxito quando a mitigação CSD não está aplicada.
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 programaticamente utilizando o mesmo initScript da Fase 2 (que salva o fetch nativo):
- Navegar com initScript — primeiro navegue até
about:blankpara garantir um contexto de documento limpo (evita initScripts obsoletos de navegações anteriores), depois executenavigate_pageparahttp://$F5XC_DOMAINNAME/#/logincom o initScript da Fase 2 (código literal em Fase 2 — Execução Automatizada por IA). Este initScript salva as referências nativas desetInterval,clearInterval,fetcheconsole.log— a referência aofetchnativo está correta aqui pois nenhuma mitigação está ativa - Dispensar o 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 CDN e resoluções de promessas fetch sejam concluídos
- Capturar evidências — execute
list_console_messagespara verificar[CSD Demo] Simulation completee os resultados de carregamento dos scripts CDN; executelist_network_requestsfiltrado pelos tiposscriptefetchpara verificar os códigos de status HTTP (200/201para sucesso)
Execução Manual
Seção intitulada “Execução Manual”Operadores sem ferramentas de automação de navegador executam a simulação manualmente utilizando o mesmo procedimento da Fase 2 — Passo 8: Simulação de Ataque:
- Navegue até
http://xF5XC_DOMAINNAMEx/#/login - Insira credenciais fictícias nos campos de E-mail e Senha (não envie o formulário)
- Abra o DevTools — pressione F12 e mude para a aba Console
- Cole e execute o Script de Detecção Combinado de Acionar Detecção
- Observe a saída do console — todos os scripts CDN devem carregar e as chamadas de exfiltração devem ter êxito com respostas
200/201
Evidência — Antes da Mitigação
Seção intitulada “Evidência — Antes da Mitigação”| Verificação | Esperado (Antes da Mitigação) | Status |
|---|---|---|
| Scripts CDN injetados | Todas as 4 tags de script carregam — mensagens [Supply Chain] Loaded from aparecem, aba de rede mostra 200 | PASS |
Fetch de exfiltração para www.httpbin.org | Aba de rede mostra 200 — dados enviados | PASS |
| Fetch de exfiltração para jsonplaceholder.typicode.com | Aba de rede mostra 201 — dados enviados | PASS |
| Saída do console | [CSD Demo] Simulation complete | PASS |
Passo 3: Aplicar Mitigações
Seção intitulada “Passo 3: Aplicar Mitigações”Para cada domínio detectado, faça um POST para o endpoint de domínios mitigados. Os alvos primários da simulação da Fase 2 são os 4 domínios de injeção CDN e quaisquer domínios de exfiltração de dados detectados.
Alvos primários de mitigação (do script de simulação combinado):
| Domínio | Função |
|---|---|
cdn.jsdelivr.net | Injeção de script CDN |
esm.sh | Injeção de script CDN |
unpkg.com | Injeção de script CDN |
ga.jspm.io | Injeção de script CDN |
www.httpbin.org | Endpoint de exfiltração de dados |
jsonplaceholder.typicode.com | Endpoint de exfiltração de dados |
Mitigar um domínio (execute uma vez por domínio):
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "cdn.jsdelivr.net", "namespace": "xF5XC_NAMESPACEx" }, "spec": { "mitigated_domain": "cdn.jsdelivr.net" } }' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .Repita para cada domínio:
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"esm.sh","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"esm.sh"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# unpkg.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"unpkg.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"unpkg.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# ga.jspm.iocurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"ga.jspm.io","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"ga.jspm.io"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# httpbin.org — use www.httpbin.org como mitigated_domain (veja nota abaixo)curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"httpbin.org","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"www.httpbin.org"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# jsonplaceholder.typicode.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"jsonplaceholder.typicode.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"jsonplaceholder.typicode.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .Uma resposta 200 retorna o objeto de domínio mitigado criado. Uma resposta 409 significa que o domínio já está na lista de mitigados — isso é uma condição de sucesso.
Passo 4: Verificar se as Mitigações Foram Aplicadas
Seção intitulada “Passo 4: Verificar se as Mitigações Foram Aplicadas”Liste todos os domínios mitigados e confirme que a contagem corresponde ao número de domínios recém-submetidos:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'Evidência
Seção intitulada “Evidência”| Verificação | Esperado | Status |
|---|---|---|
| Contagem de domínios mitigados | 6 (corresponde à contagem de POSTs) | PASS se a contagem corresponder |
Todos os POSTs do Passo 3 retornaram 200 ou 409 | Cada domínio aceito | PASS |
Se a contagem for menor do que o esperado, re-execute o comando POST para o domínio ausente do Passo 3.
Passo 5: Executar Ataque — Após a Mitigação
Seção intitulada “Passo 5: Executar Ataque — Após a Mitigação”Re-execute a mesma simulação combinada para capturar o snapshot “após”. O script de simulação é idêntico — apenas o estado de mitigação do CSD mudou. Os carregamentos de scripts de domínios mitigados agora são bloqueados pelo JavaScript do CSD (o src da tag <script> é substituído por uma string vazia).
Execução Automatizada por IA
Seção intitulada “Execução Automatizada por IA”Assistentes de IA com ferramentas de automação de navegador re-executam a simulação de ataque programaticamente utilizando o mesmo initScript da Fase 2 (código literal em Fase 2 — Execução Automatizada por IA). O initScript salva o fetch nativo para evitar erros do zone.js — isso não afeta a mitigação CSD pois o CSD não intercepta chamadas fetch().
- Navegar com initScript — utilize
new_pagecomisolatedContextpara um contexto de navegador limpo (evita initScripts obsoletos do Passo 2), depois navegue atéabout:blank, em seguida até a página de login com o initScript da Fase 2 - Dispensar o Banner de Boas-vindas —
press_keycomEscape - Aguardar a conclusão — aguarde 10 segundos para que todos os callbacks assíncronos sejam concluídos
- Capturar evidências — execute
list_console_messagespara verificar[CSD Demo] Simulation complete; executelist_network_requestsfiltrado pelos tiposscriptefetchpara observar que os carregamentos de scripts CDN estão ausentes (o CSD substituiu osrcdo script por uma string vazia) enquanto as chamadas fetch para domínios de exfiltração ainda são concluídas normalmente
Execução Manual
Seção intitulada “Execução Manual”Operadores sem ferramentas de automação de navegador re-executam a simulação manualmente utilizando o mesmo procedimento da Fase 2 — Passo 8: Simulação de Ataque:
- Navegue até
http://xF5XC_DOMAINNAMEx/#/login - Insira credenciais fictícias nos campos de E-mail e Senha (não envie o formulário)
- Abra o DevTools — pressione F12 e mude para a aba Console
- Cole e execute o Script de Detecção Combinado de Acionar Detecção
- Observe a saída do console e da rede — os callbacks
onloadeonerrordos scripts CDN não são acionados para domínios mitigados (o CSD substituiu osrcdo script por uma string vazia, impedindo totalmente a requisição de rede). As chamadas fetch para domínios de exfiltração (www.httpbin.org, jsonplaceholder.typicode.com) ainda são concluídas com200/201— a mitigação CSD bloqueia o carregamento de scripts, não chamadas fetch/XHR
Evidência — Após a Mitigação
Seção intitulada “Evidência — Após a Mitigação”| Verificação | Esperado (Após a Mitigação) | Status |
|---|---|---|
| Carregamentos de scripts CDN | Bloqueados — scripts não aparecem na aba de rede (CSD substituiu src por string vazia) | PASS |
| Callbacks de scripts CDN | Nem onload nem onerror são acionados para domínios mitigados | PASS |
Fetch de exfiltração para www.httpbin.org | 200 — fetch ainda é concluído (CSD não intercepta fetch) | INFO |
| Fetch de exfiltração para jsonplaceholder.typicode.com | 201 — fetch ainda é concluído (CSD não intercepta fetch) | INFO |
| Saída do console | [CSD Demo] Simulation complete | PASS |
Passo 6: Comparação Antes vs Depois
Seção intitulada “Passo 6: Comparação Antes vs Depois”Este é o resultado mais importante da demonstração — evidência lado a lado provando que o mesmo ataque, na mesma página, com o mesmo script, agora produz um resultado completamente diferente.
Tabela de Comparação
Seção intitulada “Tabela de Comparação”| Sinal | Antes da Mitigação (Passo 2) | Após a Mitigação (Passo 5) |
|---|---|---|
| Carregamentos de scripts CDN | 200 — todos os 4 scripts CDN carregam normalmente | Bloqueados — scripts ausentes da aba de rede (CSD substituiu src por string vazia) |
Callbacks onload dos CDNs | Mensagens [Supply Chain] Loaded from aparecem | Nenhum callback é acionado (nenhuma requisição de rede foi feita) |
Exfiltração para www.httpbin.org | 200 — dados exfiltrados | 200 — fetch ainda é concluído (CSD não intercepta fetch) |
| Exfiltração para jsonplaceholder.typicode.com | 201 — dados exfiltrados | 201 — fetch ainda é concluído (CSD não intercepta fetch) |
| API de domínios mitigados do CSD | 0 mitigados | 6 mitigados |
Verificar Mitigação nos Dados do Backend
Seção intitulada “Verificar Mitigação nos Dados do Backend”Consulte /detected_domains a cada 60 segundos por até 10 iterações (10 minutos). Prossiga para a tabela de comparação assim que a consulta retornar, ou após o máximo de 10 minutos — estas verificações são informativas e não bloqueiam a Fase 4.
Verificar Domínios Detectados Após a Mitigação:
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}]}'Verificar Scripts com Status de Mitigação:
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}]}'Resumo de Evidências da Fase 3
Seção intitulada “Resumo de Evidências da Fase 3”| Verificação | Esperado | Status |
|---|---|---|
| Linha de base limpa (Passo 1) | 0 domínios mitigados no início | PASS / FAIL |
| Antes — ataque tem êxito (Passo 2) | Scripts carregam, exfiltração retorna 200/201 | PASS / FAIL |
| Mitigações aplicadas (Passo 3) | Todos os 6 domínios aceitos via POST (200 ou 409) | PASS / FAIL |
| Contagem de mitigados confirmada (Passo 4) | 6 itens na lista | PASS / FAIL |
| Após — carregamentos de scripts bloqueados (Passo 5) | Scripts CDN ausentes da aba de rede, chamadas fetch ainda são concluídas | PASS / FAIL |
| Comparação antes vs depois (Passo 6) | Diferença clara entre as evidências do Passo 2 e do Passo 5 | PASS / FAIL |
Fase 3 concluída. Prossiga para a Fase 4 — Desmontagem quando estiver pronto para remover todos os objetos de implantação.