Zum Inhalt springen

Phase 3 — Abwehr

Phase 3 erstellt einen Vorher-/Nachher-Nachweis der CSD-Abwehr. Sie wiederholen den Angriff ohne Abwehrmaßnahmen, um eine Basislinie zu erstellen, wenden Abwehrmaßnahmen an und wiederholen denselben Angriff, um zu beweisen, dass CSD die Netzwerkaufrufe blockiert. Phase 2 muss abgeschlossen sein — alle DET-Prüfungen müssen BESTANDEN sein — bevor Sie fortfahren.

Schritt 1: Keine aktiven Abwehrmaßnahmen bestätigen (Basislinie)

Abschnitt betitelt „Schritt 1: Keine aktiven Abwehrmaßnahmen bestätigen (Basislinie)“

Bevor Sie den „Vorher”-Schnappschuss erfassen, stellen Sie sicher, dass die Umgebung sauber ist — es sollten keine Abwehrmaßnahmen aktiv sein. Dadurch wird gewährleistet, dass der Basislinienangriff ohne CSD-Blockierung ausgeführt wird.

Terminal-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq '{count: (.items | length)}'

Wenn die Anzahl nicht 0 ist, sind Abwehrmaßnahmen aus einem früheren Durchlauf vorhanden. Löschen Sie jede davon, bevor Sie fortfahren:

Terminal-Fenster
# Eine abgewehrte Domain löschen (für jeden Domainnamen wiederholen)
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/<domain-name>" \
| jq .

Ersetzen Sie <domain-name> durch den metadata.name, der bei der Abwehr der Domain verwendet wurde (z. B. cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io, httpbin.org, jsonplaceholder.typicode.com). Falls die Bereinigung von httpbin.org einen verbleibenden Eintrag hinterlässt, versuchen Sie auch, www.httpbin.org zu löschen — einige frühere Durchläufe haben möglicherweise diesen Namen als Metadatenname verwendet.

Bestätigen, dass Phase-2-Erkennungen vorhanden sind

Abschnitt betitelt „Bestätigen, dass Phase-2-Erkennungen vorhanden sind“
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}]}'
PrüfungErwartetStatus
Anzahl abgewehrter Domains0 (saubere Basislinie)BESTANDEN wenn 0, Bereinigung erforderlich wenn > 0
Anzahl erkannter Domains> 0 (Phase-2-Erkennungen vorhanden)BESTANDEN wenn > 0
Exfil-Domains vorhandenwww.httpbin.org, jsonplaceholder.typicode.comBESTANDEN wenn mindestens eine erscheint

Führen Sie die kombinierte Simulation ohne aktive Abwehrmaßnahmen erneut aus, um eine aktuelle Basislinie zu erfassen. Dies ist der „Vorher”-Schnappschuss — Nachweis, dass Angriffe erfolgreich sind, wenn keine CSD-Abwehr angewendet wird.

KI-Assistenten mit Browser-Automatisierungswerkzeugen führen die Angriffssimulation programmgesteuert mit demselben Phase-2-initScript aus (das das native fetch speichert):

  1. Mit initScript navigieren — navigieren Sie zunächst zu about:blank, um einen sauberen Dokumentenkontext zu gewährleisten (verhindert veraltete initScripts aus früheren Navigationen), dann navigate_page zu http://$F5XC_DOMAINNAME/#/login mit dem Phase-2-initScript (wortwörtlicher Code in Phase 2 — KI-automatisierte Ausführung). Dieses initScript speichert das native setInterval, clearInterval, fetch und console.log — die native fetch-Referenz ist hier korrekt, da keine Abwehrmaßnahmen aktiv sind
  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 — 10 Sekunden warten, bis alle CDN-Skriptlade-/Fehler-Callbacks und Fetch-Promise-Auflösungen abgeschlossen sind
  4. Nachweis erfassenlist_console_messages, um auf [CSD Demo] Simulation complete und CDN-Ladeergebnisse zu prüfen; list_network_requests gefiltert nach script- und fetch-Typen, um HTTP-Statuscodes zu überprüfen (200/201 für Erfolg)

Operatoren ohne Browser-Automatisierungswerkzeuge führen die Simulation manuell mit demselben Verfahren wie in Phase 2 — Schritt 8: Angriffssimulation durch:

  1. Zu http://xF5XC_DOMAINNAMEx/#/login navigieren
  2. Dummy-Anmeldeinformationen in die Felder E-Mail und Passwort eingeben (nicht absenden)
  3. DevTools öffnen — F12 drücken und zur Registerkarte Konsole wechseln
  4. Das kombinierte Erkennungsskript aus Erkennung auslösen einfügen und ausführen
  5. Konsolenausgabe beobachten — alle CDN-Skripte sollten geladen werden und Exfil-Aufrufe sollten mit 200/201-Antworten erfolgreich sein
PrüfungErwartet (vor der Abwehr)Status
CDN-Skripte injiziertAlle 4 Script-Tags laden — [Supply Chain] Loaded from-Meldungen erscheinen, Netzwerk-Tab zeigt 200BESTANDEN
Exfil-Fetch zu www.httpbin.orgNetzwerk-Tab zeigt 200 — Daten gesendetBESTANDEN
Exfil-Fetch zu jsonplaceholder.typicode.comNetzwerk-Tab zeigt 201 — Daten gesendetBESTANDEN
Konsolenausgabe[CSD Demo] Simulation completeBESTANDEN

Für jede erkannte Domain senden Sie eine POST-Anfrage an den Endpunkt für abgewehrte Domains. Die primären Ziele aus der Phase-2-Simulation sind die 4 CDN-Injektionsdomains und alle erkannten Datenexfiltrationsdomains.

Primäre Abwehrziele (aus dem kombinierten Simulationsskript):

DomainRolle
cdn.jsdelivr.netCDN-Skriptinjektion
esm.shCDN-Skriptinjektion
unpkg.comCDN-Skriptinjektion
ga.jspm.ioCDN-Skriptinjektion
www.httpbin.orgDatenexfiltrationsendpunkt
jsonplaceholder.typicode.comDatenexfiltrationsendpunkt

Eine Domain abwehren (einmal pro Domain ausführen):

Terminal-Fenster
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 .

Für jede Domain wiederholen:

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 — www.httpbin.org als mitigated_domain verwenden (siehe Hinweis unten)
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 .

Eine 200-Antwort gibt das erstellte abgewehrte Domain-Objekt zurück. Eine 409-Antwort bedeutet, dass die Domain bereits in der Abwehrliste vorhanden ist — dies ist eine Erfolgsbedingung.

Schritt 4: Angewendete Abwehrmaßnahmen überprüfen

Abschnitt betitelt „Schritt 4: Angewendete Abwehrmaßnahmen überprüfen“

Listen Sie alle abgewehrten Domains auf und bestätigen Sie, dass die Anzahl der soeben übermittelten Domains entspricht:

Terminal-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq '{count: (.items | length)}'
PrüfungErwartetStatus
Anzahl abgewehrter Domains6 (entspricht POST-Anzahl)BESTANDEN wenn Anzahl übereinstimmt
Alle POSTs aus Schritt 3 haben 200 oder 409 zurückgegebenJede Domain akzeptiertBESTANDEN

Wenn die Anzahl geringer als erwartet ist, führen Sie den POST-Befehl für die fehlende Domain aus Schritt 3 erneut aus.

Führen Sie exakt dieselbe kombinierte Simulation erneut aus, um den „Nachher”-Schnappschuss zu erfassen. Das Simulationsskript ist identisch — nur der Abwehrstatus von CSD hat sich geändert. Skriptladevorgänge von abgewehrten Domains werden jetzt durch das CSD-JavaScript blockiert (das &lt;script&gt;-Tag src wird auf eine leere Zeichenkette geleert).

KI-Assistenten mit Browser-Automatisierungswerkzeugen führen die Angriffssimulation programmgesteuert mit demselben Phase-2-initScript erneut aus (wortwörtlicher Code in Phase 2 — KI-automatisierte Ausführung). Das initScript speichert das native fetch, um zone.js-Fehler zu vermeiden — dies hat keinen Einfluss auf die CSD-Abwehr, da CSD keine fetch()-Aufrufe abfängt.

  1. Mit initScript navigieren — verwenden Sie new_page mit isolatedContext für einen sauberen Browser-Kontext (verhindert veraltete initScripts aus Schritt 2), navigieren Sie dann zu about:blank und anschließend zur Anmeldeseite mit dem Phase-2-initScript
  2. Willkommensbanner schließenpress_key mit Escape
  3. Auf Abschluss warten — 10 Sekunden warten, bis alle asynchronen Callbacks abgeschlossen sind
  4. Nachweis erfassenlist_console_messages, um auf [CSD Demo] Simulation complete zu prüfen; list_network_requests gefiltert nach script- und fetch-Typen, um zu beobachten, dass CDN-Skriptladevorgänge fehlen (CSD hat das Skript-src geleert), während Fetch-Aufrufe an Exfil-Domains weiterhin normal abgeschlossen werden

Operatoren ohne Browser-Automatisierungswerkzeuge führen die Simulation manuell mit demselben Verfahren wie in Phase 2 — Schritt 8: Angriffssimulation durch:

  1. Zu http://xF5XC_DOMAINNAMEx/#/login navigieren
  2. Dummy-Anmeldeinformationen in die Felder E-Mail und Passwort eingeben (nicht absenden)
  3. DevTools öffnen — F12 drücken und zur Registerkarte Konsole wechseln
  4. Das kombinierte Erkennungsskript aus Erkennung auslösen einfügen und ausführen
  5. Konsolen- und Netzwerkausgabe beobachten — CDN-Skript-onload- und onerror-Callbacks werden für abgewehrte Domains nicht ausgelöst (CSD hat das Skript-src auf eine leere Zeichenkette geleert, wodurch die Netzwerkanfrage vollständig verhindert wird). Fetch-Aufrufe an Exfil-Domains (www.httpbin.org, jsonplaceholder.typicode.com) werden weiterhin abgeschlossen mit 200/201 — die CSD-Abwehr blockiert das Laden von Skripten, nicht Fetch/XHR-Aufrufe
PrüfungErwartet (nach der Abwehr)Status
CDN-SkriptladevorgängeBlockiert — Skripte erscheinen nicht im Netzwerk-Tab (CSD hat src auf leere Zeichenkette geleert)BESTANDEN
CDN-Skript-CallbacksWeder onload noch onerror werden für abgewehrte Domains ausgelöstBESTANDEN
Exfil-Fetch zu www.httpbin.org200 — Fetch wird weiterhin abgeschlossen (CSD fängt Fetch nicht ab)INFO
Exfil-Fetch zu jsonplaceholder.typicode.com201 — Fetch wird weiterhin abgeschlossen (CSD fängt Fetch nicht ab)INFO
Konsolenausgabe[CSD Demo] Simulation completeBESTANDEN

Dies ist der Demo-Höhepunkt — Seite-an-Seite-Nachweis, der beweist, dass derselbe Angriff auf derselben Seite mit demselben Skript nun ein völlig anderes Ergebnis erzeugt.

SignalVor der Abwehr (Schritt 2)Nach der Abwehr (Schritt 5)
CDN-Skriptladevorgänge200 — alle 4 CDN-Skripte laden normalBlockiert — Skripte fehlen im Netzwerk-Tab (CSD hat src auf leere Zeichenkette geleert)
CDN-onload-Callbacks[Supply Chain] Loaded from-Meldungen erscheinenKeine Callbacks werden ausgelöst (es wurde keine Netzwerkanfrage gestellt)
Exfil zu www.httpbin.org200 — Daten exfiltriert200 — Fetch wird weiterhin abgeschlossen (CSD fängt Fetch nicht ab)
Exfil zu jsonplaceholder.typicode.com201 — Daten exfiltriert201 — Fetch wird weiterhin abgeschlossen (CSD fängt Fetch nicht ab)
CSD-API für abgewehrte Domains0 abgewehrt6 abgewehrt

Fragen Sie /detected_domains alle 60 Sekunden für bis zu 10 Iterationen (10 Minuten) ab. Fahren Sie mit der Vergleichstabelle fort, sobald die Abfrage zurückgibt, oder nach dem 10-Minuten-Maximum — diese Prüfungen sind informativ und sperren Phase 4 nicht.

Erkannte Domains nach der Abwehr prüfen:

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

Skripte auf abgewehrten Status prüfen:

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}]}'
PrüfungErwartetStatus
Basislinie sauber (Schritt 1)0 abgewehrte Domains zu BeginnBESTANDEN / NICHT BESTANDEN
Vorher — Angriff erfolgreich (Schritt 2)Skripte laden, Exfil gibt 200/201 zurückBESTANDEN / NICHT BESTANDEN
Abwehrmaßnahmen angewendet (Schritt 3)Alle 6 Domains über POST akzeptiert (200 oder 409)BESTANDEN / NICHT BESTANDEN
Abwehrzahl bestätigt (Schritt 4)6 Einträge in der ListeBESTANDEN / NICHT BESTANDEN
Nachher — Skriptladevorgänge blockiert (Schritt 5)CDN-Skripte fehlen im Netzwerk-Tab, Fetch-Aufrufe werden weiterhin abgeschlossenBESTANDEN / NICHT BESTANDEN
Vergleich Vorher vs. Nachher (Schritt 6)Klarer Unterschied zwischen den Nachweisen aus Schritt 2 und Schritt 5BESTANDEN / NICHT BESTANDEN

Phase 3 abgeschlossen. Fahren Sie mit Phase 4 — Abbau fort, wenn Sie bereit sind, alle Bereitstellungsobjekte zu entfernen.