Pular para o conteúdo

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.

Terminal window
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:

Terminal window
# 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”
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}]}'
VerificaçãoEsperadoStatus
Contagem de domínios mitigados0 (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 presenteswww.httpbin.org, jsonplaceholder.typicode.comPASS se pelo menos um aparecer

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.

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):

  1. Navegar com initScript — primeiro navegue até about:blank para garantir um contexto de documento limpo (evita initScripts obsoletos de navegações anteriores), depois execute navigate_page para http://$F5XC_DOMAINNAME/#/login com o initScript da Fase 2 (código literal em Fase 2 — Execução Automatizada por IA). Este initScript salva as referências nativas de setInterval, clearInterval, fetch e console.log — a referência ao fetch nativo está correta aqui pois nenhuma mitigação está ativa
  2. Dispensar o 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 CDN e resoluções de promessas fetch sejam concluídos
  4. Capturar evidências — execute list_console_messages para verificar [CSD Demo] Simulation complete e os resultados de carregamento dos scripts CDN; execute list_network_requests filtrado pelos tipos script e fetch para verificar os códigos de status HTTP (200/201 para sucesso)

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:

  1. Navegue até http://xF5XC_DOMAINNAMEx/#/login
  2. Insira credenciais fictícias nos campos de E-mail e Senha (não envie o formulário)
  3. Abra o DevTools — pressione F12 e mude para a aba Console
  4. Cole e execute o Script de Detecção Combinado de Acionar Detecção
  5. 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
VerificaçãoEsperado (Antes da Mitigação)Status
Scripts CDN injetadosTodas as 4 tags de script carregam — mensagens [Supply Chain] Loaded from aparecem, aba de rede mostra 200PASS
Fetch de exfiltração para www.httpbin.orgAba de rede mostra 200 — dados enviadosPASS
Fetch de exfiltração para jsonplaceholder.typicode.comAba de rede mostra 201 — dados enviadosPASS
Saída do console[CSD Demo] Simulation completePASS

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ínioFunção
cdn.jsdelivr.netInjeção de script CDN
esm.shInjeção de script CDN
unpkg.comInjeção de script CDN
ga.jspm.ioInjeção de script CDN
www.httpbin.orgEndpoint de exfiltração de dados
jsonplaceholder.typicode.comEndpoint de exfiltração de dados

Mitigar um domínio (execute uma vez por domínio):

Terminal window
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:

esm.sh
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.com
curl -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.io
curl -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.com
curl -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:

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq '{count: (.items | length)}'
VerificaçãoEsperadoStatus
Contagem de domínios mitigados6 (corresponde à contagem de POSTs)PASS se a contagem corresponder
Todos os POSTs do Passo 3 retornaram 200 ou 409Cada domínio aceitoPASS

Se a contagem for menor do que o esperado, re-execute o comando POST para o domínio ausente do Passo 3.

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 &lt;script&gt; é substituído por uma string vazia).

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().

  1. Navegar com initScript — utilize new_page com isolatedContext para 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
  2. Dispensar o Banner de Boas-vindaspress_key com Escape
  3. Aguardar a conclusão — aguarde 10 segundos para que todos os callbacks assíncronos sejam concluídos
  4. Capturar evidências — execute list_console_messages para verificar [CSD Demo] Simulation complete; execute list_network_requests filtrado pelos tipos script e fetch para observar que os carregamentos de scripts CDN estão ausentes (o CSD substituiu o src do script por uma string vazia) enquanto as chamadas fetch para domínios de exfiltração ainda são concluídas normalmente

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:

  1. Navegue até http://xF5XC_DOMAINNAMEx/#/login
  2. Insira credenciais fictícias nos campos de E-mail e Senha (não envie o formulário)
  3. Abra o DevTools — pressione F12 e mude para a aba Console
  4. Cole e execute o Script de Detecção Combinado de Acionar Detecção
  5. Observe a saída do console e da rede — os callbacks onload e onerror dos scripts CDN não são acionados para domínios mitigados (o CSD substituiu o src do 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 com 200/201 — a mitigação CSD bloqueia o carregamento de scripts, não chamadas fetch/XHR
VerificaçãoEsperado (Após a Mitigação)Status
Carregamentos de scripts CDNBloqueados — scripts não aparecem na aba de rede (CSD substituiu src por string vazia)PASS
Callbacks de scripts CDNNem onload nem onerror são acionados para domínios mitigadosPASS
Fetch de exfiltração para www.httpbin.org200 — fetch ainda é concluído (CSD não intercepta fetch)INFO
Fetch de exfiltração para jsonplaceholder.typicode.com201 — fetch ainda é concluído (CSD não intercepta fetch)INFO
Saída do console[CSD Demo] Simulation completePASS

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.

SinalAntes da Mitigação (Passo 2)Após a Mitigação (Passo 5)
Carregamentos de scripts CDN200 — todos os 4 scripts CDN carregam normalmenteBloqueados — scripts ausentes da aba de rede (CSD substituiu src por string vazia)
Callbacks onload dos CDNsMensagens [Supply Chain] Loaded from aparecemNenhum callback é acionado (nenhuma requisição de rede foi feita)
Exfiltração para www.httpbin.org200 — dados exfiltrados200 — fetch ainda é concluído (CSD não intercepta fetch)
Exfiltração para jsonplaceholder.typicode.com201 — dados exfiltrados201 — fetch ainda é concluído (CSD não intercepta fetch)
API de domínios mitigados do CSD0 mitigados6 mitigados

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:

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}]}'

Verificar Scripts com Status de Mitigação:

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}]}'
VerificaçãoEsperadoStatus
Linha de base limpa (Passo 1)0 domínios mitigados no inícioPASS / FAIL
Antes — ataque tem êxito (Passo 2)Scripts carregam, exfiltração retorna 200/201PASS / 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 listaPASS / FAIL
Após — carregamentos de scripts bloqueados (Passo 5)Scripts CDN ausentes da aba de rede, chamadas fetch ainda são concluídasPASS / FAIL
Comparação antes vs depois (Passo 6)Diferença clara entre as evidências do Passo 2 e do Passo 5PASS / FAIL

Fase 3 concluída. Prossiga para a Fase 4 — Desmontagem quando estiver pronto para remover todos os objetos de implantação.