GSP879
Übersicht
Google Cloud Armor ist die Netzwerksicherheitslösung von Google für Unternehmen, die Schutz vor DDoS-Angriffen, die Durchsetzung von WAF-Regeln und eine umfassende adaptive Verwaltbarkeit bietet.
Cloud Armor hat die vorkonfigurierten WAF-Regelsätze erweitert, um besseren Schutz vor den OWASP-Top-10-Sicherheitslückenin Webanwendungen zu bieten. Die Regelsätze basieren auf dem OWASP-Modsecurity-Kernregelsatz Version 3.0.2 und schützen vor einigen der häufigsten Sicherheitsrisiken für Webanwendungen, darunter Local File Inclusion (LFI), Remote File Inclusion (RFI), Remote Code Execution (RCE) und viele mehr.
In diesem Lab erfahren Sie, wie Sie sich mithilfe der WAF-Regeln von Google Cloud Armor vor einigen der häufigsten Sicherheitslücken schützen.
Lerninhalte
Aufgaben in diesem Lab:
- Instanzgruppe und globalen Load Balancer zur Unterstützung eines Dienstes einrichten
- Cloud Armor-Sicherheitsrichtlinien mit vorkonfigurierten WAF-Regeln konfigurieren, um sich vor LFI, RCE, Scannern, Protokollangriffen und Session Fixation zu schützen
- Anhand von Logs prüfen, ob Cloud Armor einen Angriff abgewehrt hat.

Die OWASP Juice Shop-Anwendung hilft beim Sicherheitstraining und schärft das Bewusstsein, da sie standardmäßig Beispiele für jede der OWASP-Top-10-Sicherheitslücken enthält. Angreifende können sie zu Testzwecken ausnutzen. In diesem Lab wird sie verwendet, um einige Anwendungsangriffe zu demonstrieren und die Anwendung anschließend mit Cloud Armor-WAF-Regeln zu schützen. Der Anwendung wird ein Google Cloud-Load Balancer vorgeschaltet, auf den die Cloud Armor-Sicherheitsrichtlinie und ‑regeln angewendet werden. Sie wird im öffentlichen Internet bereitgestellt und ist daher von fast überall aus erreichbar. Außerdem wird sie mit Cloud Armor- und VPC-Firewallregeln geschützt.
Einrichtung und Anforderungen
Vor dem Klick auf „Start Lab“ (Lab starten)
Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange Google Cloud-Ressourcen für das Lab verfügbar sind.
In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.
Für dieses Lab benötigen Sie Folgendes:
- Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus (empfohlen), um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
- Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Verwenden Sie für dieses Lab nur das Teilnehmerkonto. Wenn Sie ein anderes Google Cloud-Konto verwenden, fallen dafür möglicherweise Kosten an.
Lab starten und bei der Google Cloud Console anmelden
-
Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Dialogfeld geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können.
Auf der linken Seite befindet sich der Bereich „Details zum Lab“ mit diesen Informationen:
- Schaltfläche „Google Cloud Console öffnen“
- Restzeit
- Temporäre Anmeldedaten für das Lab
- Ggf. weitere Informationen für dieses Lab
-
Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).
Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite „Anmelden“ geöffnet.
Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.
Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
-
Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.
{{{user_0.username | "Username"}}}
Sie finden den Nutzernamen auch im Bereich „Details zum Lab“.
-
Klicken Sie auf Weiter.
-
Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.
{{{user_0.password | "Password"}}}
Sie finden das Passwort auch im Bereich „Details zum Lab“.
-
Klicken Sie auf Weiter.
Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos.
Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
-
Klicken Sie sich durch die nachfolgenden Seiten:
- Akzeptieren Sie die Nutzungsbedingungen.
- Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
- Melden Sie sich nicht für kostenlose Testversionen an.
Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.
Hinweis: Wenn Sie auf Google Cloud-Produkte und ‑Dienste zugreifen möchten, klicken Sie auf das Navigationsmenü oder geben Sie den Namen des Produkts oder Dienstes in das Feld Suchen ein.
Cloud Shell aktivieren
Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.
-
Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren
.
-
Klicken Sie sich durch die folgenden Fenster:
- Fahren Sie mit dem Informationsfenster zu Cloud Shell fort.
- Autorisieren Sie Cloud Shell, Ihre Anmeldedaten für Google Cloud API-Aufrufe zu verwenden.
Wenn eine Verbindung besteht, sind Sie bereits authentifiziert und das Projekt ist auf Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:
Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}
gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.
- (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
- Klicken Sie auf Autorisieren.
Ausgabe:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
Um das aktive Konto festzulegen, führen Sie diesen Befehl aus:
$ gcloud config set account `ACCOUNT`
- (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project
Ausgabe:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.
Hinweis
- Legen Sie in der Cloud Shell Ihre Projekt-ID fest:
gcloud config list project
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
gcloud config set project $PROJECT_ID
Aufgabe 1: VPC‑Netzwerk erstellen
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um ein VPC-Netzwerk zu erstellen:
gcloud compute networks create {{{project_0.startup_script.network_name| Network Name}}} --subnet-mode custom
Created
NAME SUBNET_MODE BGP_ROUTING_MODE
{{{project_0.startup_script.network_name| Network Name}}} CUSTOM REGIONAL
Subnetz erstellen
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um ein Subnetz zu erstellen:
gcloud compute networks subnets create {{{project_0.startup_script.subnet_name| Subnet Name}}} \
--network {{{project_0.startup_script.network_name| Network Name}}} --range 10.0.0.0/24 --region {{{project_0.startup_script.region_1| Region}}}
Created
NAME REGION NETWORK RANGE
{{{project_0.startup_script.subnet_name| Subnet Name}}} {{{project_0.startup_script.region_1| Region}}} {{{project_0.startup_script.network_name| Network Name}}} 10.0.0.0/24
VPC-Firewallregeln erstellen
Nachdem Sie die VPC und das Subnetz erstellt haben, richten Sie einige Firewallregeln ein.
- Die erste Firewallregel mit dem Namen
allow-js-site ermöglicht allen IP-Adressen den Zugriff auf die externe IP-Adresse der Website der Testanwendung über Port 3000.
- Die zweite Firewallregel mit dem Namen
allow-health-check erlaubt Systemdiagnosen von der Quell-IP-Adresse der Load Balancer.
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um eine Firewallregel zu erstellen, die allen IP-Adressen den Zugriff auf die Anwendung erlaubt:
gcloud compute firewall-rules create {{{project_0.startup_script.firewall_rule| Firewall Name}}} --allow tcp:3000 --network {{{project_0.startup_script.network_name| Network Name}}}
Ausgabe:
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
{{{project_0.startup_script.firewall_rule| Firewall Name}}} {{{project_0.startup_script.network_name| Network Name}}} INGRESS 1000 tcp:3000 False
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um eine Firewallregel zu erstellen, die Systemdiagnosen aus den Google-Systemdiagnosebereichen zulässt:
gcloud compute firewall-rules create {{{project_0.startup_script.firewall_rule1| Firewall Name1}}} \
--network={{{project_0.startup_script.network_name| Network Name}}} \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-healthcheck \
--rules=tcp
Ausgabe:
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
{{{project_0.startup_script.firewall_rule1| Firewall_Name1}}} {{{project_0.startup_script.network_name| Network Name}}} INGRESS 1000 tcp False
Klicken Sie auf Fortschritt prüfen.
VPC‑Netzwerk erstellen
Aufgabe 2: Testanwendung einrichten
Erstellen Sie die Testanwendung, in diesem Fall den OWASP Juice Shop-Webserver.
Beim Erstellen der Compute-Instanz verwenden Sie ein Container-Image. So wird sichergestellt, dass der Server die entsprechenden Dienste hat. Sie stellen diesen Server in bereit. Er hat ein Netzwerk-Tag, das Systemdiagnosen zulässt.
OWASP Juice Shop-Anwendung erstellen
- Verwenden Sie die bekannte Open-Source-Anwendung OWASP Juice Shop als anfällige Anwendung. Mithilfe dieser Anwendung können Sie auch OWASP-Sicherheitsherausforderungen über die OWASP-Website bewältigen.
gcloud compute instances create-with-container {{{project_0.startup_script.vm_instance| vm_instance}}} --container-image bkimminich/juice-shop \
--network {{{project_0.startup_script.network_name| Network Name}}} \
--subnet {{{project_0.startup_script.subnet_name| Subnet Name}}} \
--private-network-ip=10.0.0.3 \
--machine-type n1-standard-2 \
--zone {{{project_0.startup_script.zone| Zone}}} \
--tags allow-healthcheck
Ausgabe:
NAME ZONE MACHINE_TYPE PREEMPTIBLE
{{{project_0.startup_script.vm_instance| vm_instance}}} {{{project_0.startup_script.zone| Zone}}} n1-standard-2
INTERNAL_IP EXTERNAL_IP STATUS
10.0.0.3 RUNNING
Klicken Sie auf Fortschritt prüfen.
Testanwendung einrichten
Cloud Load Balancer-Komponente einrichten: Instanzgruppe
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um die nicht verwaltete Instanzgruppe zu erstellen:
gcloud compute instance-groups unmanaged create {{{project_0.startup_script.vm_instance_group| Instance Group}}} \
--zone={{{project_0.startup_script.zone| Zone}}}
Ausgabe:
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES
{{{project_0.startup_script.vm_instance_group| Instance Group}}} {{{project_0.startup_script.zone| Zone}}} zone 0
- Fügen Sie die Juice Shop-Instanz der Google Compute Engine (GCE) der nicht verwalteten Instanzgruppe hinzu:
gcloud compute instance-groups unmanaged add-instances {{{project_0.startup_script.vm_instance_group| Instance Group}}} \
--zone={{{project_0.startup_script.zone| Zone}}} \
--instances={{{project_0.startup_script.vm_instance| VM Instance}}}
Ausgabe:
Updated [https://www.googleapis.com/compute/v1/projects//zones/{{{project_0.startup_script.zone| Zone}}}/instanceGroups/{{{project_0.startup_script.vm_instance_group| Instance_Group}}}].
- Geben Sie für den benannten Port den Port der Juice Shop-Anwendung an:
gcloud compute instance-groups unmanaged set-named-ports \
{{{project_0.startup_script.vm_instance_group| Instance Group}}} \
--named-ports=http:3000 \
--zone={{{project_0.startup_script.zone| Zone}}}
Ausgabe:
Updated [https://www.googleapis.com/compute/v1/projects//zones/{{{project_0.startup_script.zone| Zone}}}/instanceGroups/{{{project_0.startup_script.vm_instance_group| Instance Group}}}].
Klicken Sie auf Fortschritt prüfen.
Cloud Load Balancer-Komponente einrichten: Instanzgruppe
Cloud Load Balancer-Komponente einrichten: Systemdiagnose
Nachdem Sie die nicht verwaltete Instanzgruppe erstellt haben, erstellen Sie eine Systemdiagnose, einen Backend-Dienst, eine URL-Zuordnung, einen Ziel-Proxy und eine Weiterleitungsregel.
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um die Systemdiagnose für den Dienstport von Juice Shop zu erstellen:
gcloud compute health-checks create tcp tcp-port-3000 \
--port 3000
Ausgabe:
Created
NAME PROTOCOL
tcp-port-3000 TCP
Cloud Load Balancer-Komponente einrichten: Backend-Dienst
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um die Parameter für den Backend-Dienst zu erstellen:
gcloud compute backend-services create juice-shop-backend \
--protocol HTTP \
--port-name http \
--health-checks tcp-port-3000 \
--enable-logging \
--global
Ausgabe:
NAME BACKENDS PROTOCOL
juice-shop-backend HTTP
- Fügen Sie dem Backend-Dienst die Juice Shop-Instanzgruppe hinzu:
gcloud compute backend-services add-backend juice-shop-backend \
--instance-group={{{project_0.startup_script.vm_instance_group| Instance Group}}} \
--instance-group-zone={{{project_0.startup_script.zone| Zone}}} \
--global
Ausgabe:
Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].
Cloud Load Balancer-Komponente einrichten: URL-Zuordnung
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um die URL-Zuordnung zu erstellen, mit der eingehende Anfragen an das Backend gesendet werden:
gcloud compute url-maps create juice-shop-loadbalancer \
--default-service juice-shop-backend
Ausgabe:
NAME DEFAULT_SERVICE
juice-shop-loadbalancer backendServices/juice-shop-backend
Cloud Load Balancer-Komponente einrichten: Ziel-Proxy
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um den Ziel-Proxy zu erstellen, der eingehende Anfragen an die URL-Zuordnung weiterleitet:
gcloud compute target-http-proxies create juice-shop-proxy \
--url-map juice-shop-loadbalancer
Ausgabe:
NAME URL_MAP
juice-shop-proxy juice-shop-loadbalancer
Cloud Load Balancer-Komponente einrichten: Weiterleitungsregel
- Geben Sie in der Cloud Shell den folgenden Befehl ein, um die Weiterleitungsregel für den Load Balancer zu erstellen:
gcloud compute forwarding-rules create juice-shop-rule \
--global \
--target-http-proxy=juice-shop-proxy \
--ports=80
Ausgabe:
Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].
Prüfen, ob der Juice Shop-Dienst online ist
- In der Cloud Shell:
PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule --global --format="value(IPAddress)")"
echo $PUBLIC_SVC_IP
Ausgabe:
<öffentliche virtuelle IP-Adresse des Dienstes>
Warten Sie einige Minuten, bevor Sie fortfahren, da Sie sonst möglicherweise den Fehler HTTP/1.1 404 Nicht gefunden erhalten.
- In der Cloud Shell:
curl -Ii http://$PUBLIC_SVC_IP
Ausgabe:
HTTP/1.1 200 OK
<...>
Sie können Juice Shop auch im Browser aufrufen.

Sie können sich jetzt die Sicherheitslücken von Juice Shop ansehen und sich mit Cloud Armor-WAF-Regelsätzen vor ihnen schützen.
Klicken Sie auf Fortschritt prüfen.
Cloud Load Balancer-Komponente einrichten – Systemdiagnose
Aufgabe 3: Bekannte Sicherheitslücken demonstrieren
In diesem Lab demonstrieren Sie die Zustände vor und nach der Weitergabe der Cloud Armor-WAF-Regeln in grundlegenden Schritten.
LFI-Sicherheitslücke beobachten: Path Traversal
Bei der Local File Inclusion werden Dateien auf dem Server aufgerufen, indem die fehlende Eingabevalidierung in der Anfrage ausgenutzt wird. Dadurch werden möglicherweise sensible Daten offengelegt. Das folgende Beispiel zeigt, dass ein Path Traversal möglich ist. Sehen Sie sich in Ihrem Browser oder mit curl einen vorhandenen Pfad an, der von der Anwendung bereitgestellt wird.
- In der Cloud Shell:
curl -Ii http://$PUBLIC_SVC_IP/ftp
Ausgabe:
HTTP/1.1 200 OK
<...>
Sie werden feststellen, dass auch Path Traversal funktioniert.
- In der Cloud Shell:
curl -Ii http://$PUBLIC_SVC_IP/ftp/../
Ausgabe:
HTTP/1.1 200 OK
<...>
RCE-Sicherheitslücke beobachten
Die Remote-Codeausführung umfasst verschiedene UNIX- und Windows-Befehlseinschleusungsszenarien, mit denen Angreifende Betriebssystembefehle ausführen können, die normalerweise privilegierten Nutzerinnen und Nutzern vorbehalten sind. Das folgende Beispiel zeigt die Ausführung eines einfachen ls-Befehls, der übergeben wurde.
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Ausgabe:
HTTP/1.1 200 OK
<...>
Entfernen Sie die curl-Flags, um die vollständige Ausgabe zu sehen.
Zugriff eines bekannten Scanners beobachten
Es gibt sowohl kommerzielle als auch Open-Source-Scan-Anwendungen, die für verschiedene Zwecke genutzt werden, zum Beispiel, um Sicherheitslücken zu finden. Diese Tools verwenden bekannte User-Agent- und andere Header. Sie werden feststellen, dass „curl“ mit einem bekannten User-Agent-Header funktioniert.
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Ausgabe:
HTTP/1.1 200 OK
<...>
Protokollangriff beobachten: HTTP-Splitting
Einige Webanwendungen generieren Header in den Antworten anhand von Nutzereingaben. Wenn die Anwendung die Eingabe nicht richtig filtert, können Angreifende den Eingabeparameter mit der Sequenz %0d%0a manipulieren (die CRLF-Sequenz, mit der unterschiedliche Zeilen getrennt werden).
Die Antwort könnte dann von allem, was sie parst, wie einem zwischengeschalteten Proxyserver, als zwei Antworten interpretiert werden. Dadurch werden bei nachfolgenden Anfragen möglicherweise falsche Inhalte bereitgestellt. Fügen Sie die Sequenz %0d%0a in den Eingabeparameter ein. Dadurch wird unter Umständen eine irreführende Seite bereitgestellt.
curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"
Ausgabe:
HTTP/1.1 200 OK
<...>
Session Fixation beobachten
curl -Ii http://$PUBLIC_SVC_IP -H session_id=X
Ausgabe:
HTTP/1.1 200 OK
<...>
Aufgabe 4: Cloud Armor-WAF-Regeln definieren
- Listen Sie die vorkonfigurierten WAF-Regeln mit dem folgenden Befehl in der Cloud Shell auf:
gcloud compute security-policies list-preconfigured-expression-sets
EXPRESSION_SET
Sqli-canary
RULE_ID
owasp-crs-v030001-id942110-sqli
owasp-crs-v030001-id942120-sqli
<...>
- Erstellen Sie mit dem folgenden Befehl in der Cloud Shell die Cloud Armor-Sicherheitsrichtlinie:
gcloud compute security-policies create {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "Block with OWASP ModSecurity CRS"
- Aktualisieren Sie in der Cloud Shell die Standardregel der Sicherheitsrichtlinie.
Hinweis: Die Priorität der Standardregel hat den numerischen Wert 2147483647.
gcloud compute security-policies rules update 2147483647 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--action "deny-403"
- Da die Standardregel mit der Aktion „Ablehnen“ konfiguriert ist, müssen Sie den Zugriff von Ihrer IP-Adresse aus zulassen. Bestimmen Sie Ihre öffentliche IP-Adresse (curl, ipmonkey, whatismyip usw.):
MY_IP=$(curl ifconfig.me)
- Fügen Sie die erste Regel hinzu, um den Zugriff von Ihrer IP-Adresse aus zuzulassen (FÜGEN SIE IHRE IP-ADRESSE UNTEN EIN):
gcloud compute security-policies rules create 10000 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "allow traffic from my IP" \
--src-ip-ranges "$MY_IP/32" \
--action "allow"
- Aktualisieren Sie in der Cloud Shell die Sicherheitsrichtlinie, um LFI-Angriffe zu blockieren.
Wenden Sie das OWASP ModSecurity Core Rule Set an, das Path Traversal für Local File Inclusions verhindert.
gcloud compute security-policies rules create 9000 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "block local file inclusion" \
--expression "evaluatePreconfiguredExpr('lfi-stable')" \
--action deny-403
- Aktualisieren Sie in der Cloud Shell die Sicherheitsrichtlinie, um die Remote-Codeausführung (RCE) zu blockieren.
Wenden Sie gemäß dem OWASP ModSecurity Core Rule Set Regeln an, die nach RCE suchen, einschließlich Befehlsinjektion. Typische Betriebssystembefehle werden erkannt und blockiert.
gcloud compute security-policies rules create 9001 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "block rce attacks" \
--expression "evaluatePreconfiguredExpr('rce-stable')" \
--action deny-403
- Aktualisieren Sie die Sicherheitsrichtlinie, um Sicherheitsscanner zu blockieren.
Wenden Sie das OWASP ModSecurity Core Rule Set an, um bekannte Sicherheitsscanner, HTTP-Scripting-Clients und Web-Crawler zu blockieren.
gcloud compute security-policies rules create 9002 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "block scanners" \
--expression "evaluatePreconfiguredExpr('scannerdetection-stable')" \
--action deny-403
- Aktualisieren Sie in der Cloud Shell die Sicherheitsrichtlinie, um Protokollangriffe zu blockieren.
Wenden Sie gemäß dem OWASP ModSecurity Core Rule Set Regeln an, die nach Zeilenumbruchzeichen (%0d) und Zeilenvorschubzeichen (%0a) sowie anderen Arten von Protokollangriffen wie HTTP Request Smuggling suchen.
gcloud compute security-policies rules create 9003 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "block protocol attacks" \
--expression "evaluatePreconfiguredExpr('protocolattack-stable')" \
--action deny-403
- Aktualisieren Sie die Sicherheitsrichtlinie, damit Session Fixation verhindert wird.
Wenden Sie gemäß dem OWASP ModSecurity Core Rule Set die folgenden Regeln mithilfe der Cloud Shell an:
gcloud compute security-policies rules create 9004 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "block session fixation attacks" \
--expression "evaluatePreconfiguredExpr('sessionfixation-stable')" \
--action deny-403
- Hängen Sie die Sicherheitsrichtlinie an den Backend-Dienst an:
gcloud compute backend-services update juice-shop-backend \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--global
Es kann etwas dauern, bis die Regeln wirksam werden (maximal aber 10 Minuten).
- Wenn genügend Zeit vergangen ist, testen Sie im nächsten Schritt die zuvor demonstrierten Sicherheitslücken, um zu bestätigen, dass die Cloud Armor-WAF-Regel erzwungen wurde.
Klicken Sie auf Fortschritt prüfen.
Cloud Armor-Sicherheitsrichtlinie erstellen
Cloud Armor-Schutz mit OWASP ModSecurity Core Rule Set prüfen
- Prüfen Sie in der Cloud Shell, ob die LFI-Sicherheitslücke behoben wurde:
curl -Ii http://$PUBLIC_SVC_IP/?a=../
Ausgabe:
HTTP/1.1 403 Forbidden
<...>
- Prüfen Sie in der Cloud Shell, ob der RCE-Angriff abgewehrt wurde:
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Ausgabe:
HTTP/1.1 403 Forbidden
<..>
- Prüfen Sie in der Cloud Shell, ob bekannte Scanner erkannt wurden.
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Ausgabe:
HTTP/1.1 403 Forbidden
<..>
- Prüfen Sie in der Cloud Shell, ob ein Protokollangriff verhindert wurde.
Gemäß OWASP ModSecurity Core Rule Set Version 3.0.2 wird der Protokollangriff durch Folgendes abgewehrt:
curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"
Ausgabe:
HTTP/1.1 403 Forbidden
<..>
- Prüfen Sie in der Cloud Shell, ob Versuche zur Session Fixation blockiert werden:
curl -Ii http://$PUBLIC_SVC_IP/?session_id=a
Ausgabe:
HTTP/1.1 403 Forbidden
<..>
Aufgabe 5: Cloud Armor-Sicherheitsregeln prüfen
Nachdem Sie die Sicherheitsrichtlinie erstellt haben, sehen Sie sich die konfigurierten Regeln an.

Regeln werden nach Priorität bewertet: Niedrigere Zahlen werden zuerst bewertet. Sobald eine Regel ausgelöst wurde, wird die Verarbeitung für Regeln mit höheren Prioritätswerten nicht fortgesetzt.
- Priorität
9000: LFI blockieren (Local File Inclusion)
- Priorität
9001: RCE-Angriffe blockieren (Remote-Codeausführung/Befehlsinjektion)
- Priorität
9002: erkannte Scanner blockieren
- Priorität
9003: Protokollangriffe wie HTTP-Splitting und HTTP-Smuggling blockieren
- Priorität
9004: Session Fixation-Angriffen blockieren
- Priorität
10000: Ihrer IP-Adresse den Zugriff auf die Website gewähren
- Priorität
Standard: ablehnen.
Hinweis: Die Regel „Ihrer IP-Adresse den Zugriff auf die Website gewähren“ hat die höchste Prioritätsnummer, damit der Zugriff auf die Website ermöglicht wird, aber alle Angriffe blockiert werden.
Aufgabe 6: Logs von Cloud Armor-Sicherheitsrichtlinien beobachten
Rufen Sie auf der Cloud Armor-Konsolenseite die Details der Sicherheitsrichtlinie auf. Klicken Sie auf den Tab „Logs“ und dann auf den Link „Richtlinienlogs ansehen“, um zur Cloud Logging-Seite zu gelangen. Es wird automatisch nach der relevanten Sicherheitsrichtlinie gefiltert, zum Beispiel resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:. Sehen Sie sich die Antwortcodes des Fehlers 403 an und erweitern Sie die Logdetails, um den Namen der erzwungenen Sicherheitsrichtlinie, den übereinstimmenden Feldwert und weiter unten die vorkonfigurierten Ausdrucks-IDs (oder die Signatur-ID) zu sehen.
Es wird automatisch nach der relevanten Sicherheitsrichtlinie gefiltert, zum Beispiel resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:().
- Sehen Sie sich die Antwortcodes des Fehlers 403 an und erweitern Sie die Logdetails, um den Namen der erzwungenen Sicherheitsrichtlinie, den übereinstimmenden Feldwert und weiter unten die vorkonfigurierten Ausdrucks-IDs (oder die Signatur-ID) zu sehen.
Die folgenden Screenshots zeigen Beispiele für die Logs der erzwungenen Sicherheitsrichtlinien, die in diesem Lab konfiguriert wurden.
LFI-Log

RCE-Log

Scannererkennungslog

Protokollangriffslog

Session Fixation-Log

Glückwunsch!
Sie haben mithilfe von Google Cloud Armor-WAF-Regeln erfolgreich einige der häufigsten Sicherheitslücken behoben.
Anleitung zuletzt am 12. Mai 2025 aktualisiert
Lab zuletzt am 12. Mai 2025 getestet
© 2026 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.