- Home
- Difesa lato client
- Demo
- Fase 3 — Mitigazione
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.
Verificare il conteggio dei domini mitigati
Sezione intitolata “Verificare il conteggio dei domini mitigati”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:
# 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”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}]}'Evidenza
Sezione intitolata “Evidenza”| Controllo | Atteso | Stato |
|---|---|---|
| Conteggio domini mitigati | 0 (baseline pulita) | PASS se 0, richiede pulizia se > 0 |
| Conteggio domini rilevati | > 0 (rilevamenti della Fase 2 presenti) | PASS se > 0 |
| Domini di esfiltrazione presenti | www.httpbin.org, jsonplaceholder.typicode.com | PASS 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.
Esecuzione automatizzata tramite IA
Sezione intitolata “Esecuzione automatizzata tramite IA”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):
- Navigare con initScript — prima navigare verso
about:blankper garantire un contesto documento pulito (evita initScript obsoleti da navigazioni precedenti), quindi usarenavigate_pageversohttp://$F5XC_DOMAINNAME/#/logincon l’initScript della Fase 2 (codice verbatim in Fase 2 — Esecuzione automatizzata tramite IA). Questo initScript salvasetInterval,clearInterval,fetcheconsole.lognativi — il riferimento alfetchnativo è corretto qui perché non sono attive mitigazioni - Chiudere il banner di benvenuto —
press_keyconEscapeper 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 - Attendere il completamento — attendere 10 secondi affinché tutti i callback di caricamento/errore degli script CDN e le risoluzioni delle promise fetch vengano completati
- Acquisire le prove —
list_console_messagesper verificare la presenza di[CSD Demo] Simulation completee i risultati del caricamento CDN;list_network_requestsfiltrato per i tipiscriptefetchper verificare i codici di stato HTTP (200/201per il successo)
Esecuzione manuale
Sezione intitolata “Esecuzione manuale”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:
- Navigare verso
http://xF5XC_DOMAINNAMEx/#/login - Inserire credenziali fittizie nei campi Email e Password (non inviare il modulo)
- Aprire DevTools — premere F12 e passare alla scheda Console
- Incollare ed eseguire lo Script di rilevamento combinato da Rilevamento Trigger
- Osservare l’output della console — tutti gli script CDN devono caricarsi e le chiamate di esfiltrazione devono avere successo con risposte
200/201
Evidenza — Prima della mitigazione
Sezione intitolata “Evidenza — Prima della mitigazione”| Controllo | Atteso (Prima della mitigazione) | Stato |
|---|---|---|
| Script CDN iniettati | Tutti e 4 i tag script si caricano — compaiono i messaggi [Supply Chain] Loaded from, la scheda di rete mostra 200 | PASS |
Esfiltrazione fetch verso www.httpbin.org | La scheda di rete mostra 200 — dati inviati | PASS |
| Esfiltrazione fetch verso jsonplaceholder.typicode.com | La scheda di rete mostra 201 — dati inviati | PASS |
| Output della console | [CSD Demo] Simulation complete | PASS |
Passaggio 3: Applicare le mitigazioni
Sezione intitolata “Passaggio 3: Applicare le mitigazioni”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):
| Dominio | Ruolo |
|---|---|
cdn.jsdelivr.net | Iniezione script CDN |
esm.sh | Iniezione script CDN |
unpkg.com | Iniezione script CDN |
ga.jspm.io | Iniezione script CDN |
www.httpbin.org | Endpoint di esfiltrazione dati |
jsonplaceholder.typicode.com | Endpoint di esfiltrazione dati |
Mitigare un dominio (eseguire una volta per dominio):
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:
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 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.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 .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:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'Evidenza
Sezione intitolata “Evidenza”| Controllo | Atteso | Stato |
|---|---|---|
| Conteggio domini mitigati | 6 (corrisponde al conteggio POST) | PASS se il conteggio corrisponde |
Tutti i POST del Passaggio 3 hanno restituito 200 o 409 | Ogni dominio accettato | PASS |
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 <script> viene impostato su una stringa vuota).
Esecuzione automatizzata tramite IA
Sezione intitolata “Esecuzione automatizzata tramite IA”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().
- Navigare con initScript — usare
new_pageconisolatedContextper un contesto browser pulito (evita initScript obsoleti dal Passaggio 2), quindi navigare versoabout:blank, poi verso la pagina di login con l’initScript della Fase 2 - Chiudere il banner di benvenuto —
press_keyconEscape - Attendere il completamento — attendere 10 secondi affinché tutti i callback asincroni vengano completati
- Acquisire le prove —
list_console_messagesper verificare la presenza di[CSD Demo] Simulation complete;list_network_requestsfiltrato per i tipiscriptefetchper 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
Esecuzione manuale
Sezione intitolata “Esecuzione manuale”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:
- Navigare verso
http://xF5XC_DOMAINNAMEx/#/login - Inserire credenziali fittizie nei campi Email e Password (non inviare il modulo)
- Aprire DevTools — premere F12 e passare alla scheda Console
- Incollare ed eseguire lo Script di rilevamento combinato da Rilevamento Trigger
- Osservare l’output della console e della rete — i callback
onloadeonerrordegli script CDN non si attivano per i domini mitigati (CSD ha svuotato ilsrcdello 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 con200/201— la mitigazione CSD blocca il caricamento degli script, non le chiamate fetch/XHR
Evidenza — Dopo la mitigazione
Sezione intitolata “Evidenza — Dopo la mitigazione”| Controllo | Atteso (Dopo la mitigazione) | Stato |
|---|---|---|
| Caricamenti script CDN | Bloccati — gli script non compaiono nella scheda di rete (CSD ha impostato src a stringa vuota) | PASS |
| Callback degli script CDN | Né onload né onerror si attivano per i domini mitigati | PASS |
Esfiltrazione fetch verso www.httpbin.org | 200 — fetch ancora completata (CSD non intercetta fetch) | INFO |
| Esfiltrazione fetch verso jsonplaceholder.typicode.com | 201 — fetch ancora completata (CSD non intercetta fetch) | INFO |
| Output della console | [CSD Demo] Simulation complete | PASS |
Passaggio 6: Confronto Prima vs Dopo
Sezione intitolata “Passaggio 6: Confronto Prima vs Dopo”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.
Tabella di confronto
Sezione intitolata “Tabella di confronto”| Segnale | Prima della mitigazione (Passaggio 2) | Dopo la mitigazione (Passaggio 5) |
|---|---|---|
| Caricamenti script CDN | 200 — tutti e 4 gli script CDN si caricano normalmente | Bloccati — script assenti dalla scheda di rete (CSD ha impostato src a stringa vuota) |
Callback onload CDN | Compaiono i messaggi [Supply Chain] Loaded from | Nessun callback si attiva (nessuna richiesta di rete è stata effettuata) |
Esfiltrazione verso www.httpbin.org | 200 — dati esfiltrati | 200 — fetch ancora completata (CSD non intercetta fetch) |
| Esfiltrazione verso jsonplaceholder.typicode.com | 201 — dati esfiltrati | 201 — fetch ancora completata (CSD non intercetta fetch) |
| API domini mitigati CSD | 0 mitigati | 6 mitigati |
Verifica della mitigazione nei dati del backend
Sezione intitolata “Verifica della mitigazione nei dati del backend”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:
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:
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}]}'Riepilogo delle prove della Fase 3
Sezione intitolata “Riepilogo delle prove della Fase 3”| Controllo | Atteso | Stato |
|---|---|---|
| Baseline pulita (Passaggio 1) | 0 domini mitigati all’avvio | PASS / FAIL |
| Prima — attacco riuscito (Passaggio 2) | Script caricati, esfiltrazione restituisce 200/201 | PASS / 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’elenco | PASS / FAIL |
| Dopo — caricamenti script bloccati (Passaggio 5) | Script CDN assenti dalla scheda di rete, chiamate fetch ancora completate | PASS / FAIL |
| Confronto prima vs dopo (Passaggio 6) | Differenza netta tra le prove del Passaggio 2 e del Passaggio 5 | PASS / FAIL |
Fase 3 completata. Procedere verso Fase 4 — Smontaggio quando si è pronti a rimuovere tutti gli oggetti di deployment.