Salta ai contenuti

Fase 3 — Mitigazione

La Fase 3 crea una prova prima/dopo della mitigazione CSD. Si riesegue l’attacco senza mitigazioni per stabilire una baseline, si applicano le mitigazioni, quindi si riesegue lo stesso attacco per dimostrare che CSD blocca le chiamate di rete. La Fase 2 deve essere completata — tutti i controlli DET devono risultare PASS — prima di procedere.

Passaggio 1: Confermare l’assenza di mitigazioni attive (Baseline)

Sezione intitolata “Passaggio 1: Confermare l’assenza di mitigazioni attive (Baseline)”

Prima di acquisire lo snapshot “prima”, verificare che l’ambiente sia pulito — non devono essere attive mitigazioni. Ciò garantisce che l’attacco di baseline venga eseguito senza alcun blocco da parte di 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 il conteggio non è 0, le mitigazioni di un’esecuzione precedente sono ancora presenti. Eliminarle tutte prima di procedere:

Terminal window
# Delete a mitigated domain (repeat for each domain name)
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/<domain-name>" \
| jq .

Sostituire <domain-name> con il valore metadata.name utilizzato al momento della mitigazione del dominio (es. cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io, httpbin.org, jsonplaceholder.typicode.com). Se la pulizia di httpbin.org lascia un elemento residuo, provare anche a eliminare www.httpbin.org — alcune esecuzioni precedenti potrebbero aver utilizzato questo come nome dei metadati.

Confermare la presenza dei rilevamenti della Fase 2

Sezione intitolata “Confermare la presenza dei rilevamenti della Fase 2”
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}]}'
ControlloAttesoStato
Conteggio domini mitigati0 (baseline pulita)PASS se 0, richiede pulizia se > 0
Conteggio domini rilevati> 0 (rilevamenti della Fase 2 presenti)PASS se > 0
Domini di esfiltrazione presentiwww.httpbin.org, jsonplaceholder.typicode.comPASS se almeno uno è presente

Passaggio 2: Eseguire l’attacco — Prima della mitigazione

Sezione intitolata “Passaggio 2: Eseguire l’attacco — Prima della mitigazione”

Rieseguire la simulazione combinata con nessuna mitigazione attiva per acquisire una baseline aggiornata. Questo è lo snapshot “prima” — prova che gli attacchi hanno successo quando la mitigazione CSD non è applicata.

Gli assistenti IA con strumenti di automazione del browser eseguono la simulazione dell’attacco in modo programmatico utilizzando lo stesso initScript della Fase 2 (che salva il fetch nativo):

  1. Navigare con initScript — prima navigare verso about:blank per garantire un contesto documento pulito (evita initScript obsoleti da navigazioni precedenti), quindi usare navigate_page verso http://$F5XC_DOMAINNAME/#/login con l’initScript della Fase 2 (codice verbatim in Fase 2 — Esecuzione automatizzata tramite IA). Questo initScript salva setInterval, clearInterval, fetch e console.log nativi — il riferimento al fetch nativo è corretto qui perché non sono attive mitigazioni
  2. Chiudere il banner di benvenutopress_key con Escape per chiudere il banner di benvenuto. Nelle visite successive il banner potrebbe non apparire (cookie persistenti). La finestra di dialogo per il consenso ai cookie viene chiusa automaticamente dal tasto Escape
  3. Attendere il completamento — attendere 10 secondi affinché tutti i callback di caricamento/errore degli script CDN e le risoluzioni delle promise fetch vengano completati
  4. Acquisire le provelist_console_messages per verificare la presenza di [CSD Demo] Simulation complete e i risultati del caricamento CDN; list_network_requests filtrato per i tipi script e fetch per verificare i codici di stato HTTP (200/201 per il successo)

Gli operatori senza strumenti di automazione del browser eseguono la simulazione manualmente utilizzando la stessa procedura descritta in Fase 2 — Passaggio 8: Simulazione dell’attacco:

  1. Navigare verso http://xF5XC_DOMAINNAMEx/#/login
  2. Inserire credenziali fittizie nei campi Email e Password (non inviare il modulo)
  3. Aprire DevTools — premere F12 e passare alla scheda Console
  4. Incollare ed eseguire lo Script di rilevamento combinato da Rilevamento Trigger
  5. Osservare l’output della console — tutti gli script CDN devono caricarsi e le chiamate di esfiltrazione devono avere successo con risposte 200/201
ControlloAtteso (Prima della mitigazione)Stato
Script CDN iniettatiTutti e 4 i tag script si caricano — compaiono i messaggi [Supply Chain] Loaded from, la scheda di rete mostra 200PASS
Esfiltrazione fetch verso www.httpbin.orgLa scheda di rete mostra 200 — dati inviatiPASS
Esfiltrazione fetch verso jsonplaceholder.typicode.comLa scheda di rete mostra 201 — dati inviatiPASS
Output della console[CSD Demo] Simulation completePASS

Per ciascun dominio rilevato, eseguire un POST verso l’endpoint dei domini mitigati. I target principali dalla simulazione della Fase 2 sono i 4 domini di iniezione CDN e qualsiasi dominio di esfiltrazione dati rilevato.

Target principali di mitigazione (dallo script di simulazione combinato):

DominioRuolo
cdn.jsdelivr.netIniezione script CDN
esm.shIniezione script CDN
unpkg.comIniezione script CDN
ga.jspm.ioIniezione script CDN
www.httpbin.orgEndpoint di esfiltrazione dati
jsonplaceholder.typicode.comEndpoint di esfiltrazione dati

Mitigare un dominio (eseguire una volta per dominio):

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 .

Ripetere per ciascun dominio:

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 as mitigated_domain (see note below)
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 .

Una risposta 200 restituisce l’oggetto dominio mitigato creato. Una risposta 409 indica che il dominio è già presente nell’elenco dei mitigati — questa è una condizione di successo.

Passaggio 4: Verificare l’applicazione delle mitigazioni

Sezione intitolata “Passaggio 4: Verificare l’applicazione delle mitigazioni”

Elencare tutti i domini mitigati e confermare che il conteggio corrisponda al numero di domini appena inviati:

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)}'
ControlloAttesoStato
Conteggio domini mitigati6 (corrisponde al conteggio POST)PASS se il conteggio corrisponde
Tutti i POST del Passaggio 3 hanno restituito 200 o 409Ogni dominio accettatoPASS

Se il conteggio è inferiore al previsto, rieseguire il comando POST per il dominio mancante dal Passaggio 3.

Passaggio 5: Eseguire l’attacco — Dopo la mitigazione

Sezione intitolata “Passaggio 5: Eseguire l’attacco — Dopo la mitigazione”

Rieseguire la stessa identica simulazione combinata per acquisire lo snapshot “dopo”. Lo script di simulazione è identico — è cambiato solo lo stato di mitigazione di CSD. I caricamenti di script dai domini mitigati vengono ora bloccati dal JavaScript CSD (il src del tag &lt;script&gt; viene impostato su una stringa vuota).

Gli assistenti IA con strumenti di automazione del browser rieseguono la simulazione dell’attacco in modo programmatico utilizzando lo stesso initScript della Fase 2 (codice verbatim in Fase 2 — Esecuzione automatizzata tramite IA). L’initScript salva il fetch nativo per evitare errori di zone.js — questo non influisce sulla mitigazione CSD perché CSD non intercetta le chiamate fetch().

  1. Navigare con initScript — usare new_page con isolatedContext per un contesto browser pulito (evita initScript obsoleti dal Passaggio 2), quindi navigare verso about:blank, poi verso la pagina di login con l’initScript della Fase 2
  2. Chiudere il banner di benvenutopress_key con Escape
  3. Attendere il completamento — attendere 10 secondi affinché tutti i callback asincroni vengano completati
  4. Acquisire le provelist_console_messages per verificare la presenza di [CSD Demo] Simulation complete; list_network_requests filtrato per i tipi script e fetch per osservare che i caricamenti degli script CDN siano assenti (CSD ha svuotato il src dello script) mentre le chiamate fetch verso i domini di esfiltrazione vengono ancora completate normalmente

Gli operatori senza strumenti di automazione del browser rieseguono la simulazione manualmente utilizzando la stessa procedura descritta in Fase 2 — Passaggio 8: Simulazione dell’attacco:

  1. Navigare verso http://xF5XC_DOMAINNAMEx/#/login
  2. Inserire credenziali fittizie nei campi Email e Password (non inviare il modulo)
  3. Aprire DevTools — premere F12 e passare alla scheda Console
  4. Incollare ed eseguire lo Script di rilevamento combinato da Rilevamento Trigger
  5. Osservare l’output della console e della rete — i callback onload e onerror degli script CDN non si attivano per i domini mitigati (CSD ha svuotato il src dello script impostandolo a una stringa vuota, impedendo completamente la richiesta di rete). Le chiamate fetch verso i domini di esfiltrazione (www.httpbin.org, jsonplaceholder.typicode.com) vengono comunque completate con 200/201 — la mitigazione CSD blocca il caricamento degli script, non le chiamate fetch/XHR
ControlloAtteso (Dopo la mitigazione)Stato
Caricamenti script CDNBloccati — gli script non compaiono nella scheda di rete (CSD ha impostato src a stringa vuota)PASS
Callback degli script CDNonloadonerror si attivano per i domini mitigatiPASS
Esfiltrazione fetch verso www.httpbin.org200 — fetch ancora completata (CSD non intercetta fetch)INFO
Esfiltrazione fetch verso jsonplaceholder.typicode.com201 — fetch ancora completata (CSD non intercetta fetch)INFO
Output della console[CSD Demo] Simulation completePASS

Questo è il risultato dimostrativo — prove affiancate che dimostrano che lo stesso attacco, sulla stessa pagina, con lo stesso script, produce ora un risultato completamente diverso.

SegnalePrima della mitigazione (Passaggio 2)Dopo la mitigazione (Passaggio 5)
Caricamenti script CDN200 — tutti e 4 gli script CDN si caricano normalmenteBloccati — script assenti dalla scheda di rete (CSD ha impostato src a stringa vuota)
Callback onload CDNCompaiono i messaggi [Supply Chain] Loaded fromNessun callback si attiva (nessuna richiesta di rete è stata effettuata)
Esfiltrazione verso www.httpbin.org200 — dati esfiltrati200 — fetch ancora completata (CSD non intercetta fetch)
Esfiltrazione verso jsonplaceholder.typicode.com201 — dati esfiltrati201 — fetch ancora completata (CSD non intercetta fetch)
API domini mitigati CSD0 mitigati6 mitigati

Interrogare /detected_domains ogni 60 secondi per un massimo di 10 iterazioni (10 minuti). Procedere alla tabella di confronto una volta ricevuta la risposta, o dopo il massimo di 10 minuti — questi controlli sono informativi e non bloccano la Fase 4.

Verificare i domini rilevati dopo la mitigazione:

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

Verificare lo stato di mitigazione degli script:

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}]}'
ControlloAttesoStato
Baseline pulita (Passaggio 1)0 domini mitigati all’avvioPASS / FAIL
Prima — attacco riuscito (Passaggio 2)Script caricati, esfiltrazione restituisce 200/201PASS / FAIL
Mitigazioni applicate (Passaggio 3)Tutti e 6 i domini accettati tramite POST (200 o 409)PASS / FAIL
Conteggio mitigati confermato (Passaggio 4)6 elementi nell’elencoPASS / FAIL
Dopo — caricamenti script bloccati (Passaggio 5)Script CDN assenti dalla scheda di rete, chiamate fetch ancora completatePASS / FAIL
Confronto prima vs dopo (Passaggio 6)Differenza netta tra le prove del Passaggio 2 e del Passaggio 5PASS / FAIL

Fase 3 completata. Procedere verso Fase 4 — Smontaggio quando si è pronti a rimuovere tutti gli oggetti di deployment.