GSP879

Présentation
Google Cloud Armor est la solution de sécurité réseau en périphérie pour les entreprises de Google. Elle offre une protection contre les attaques DDoS, l'application de règles WAF et des capacités de gestion adaptative à grande échelle.
Cloud Armor a étendu les ensembles de règles WAF préconfigurés pour atténuer les failles de sécurité des applications Web figurant dans le Top 10 de l'OWASP. Les ensembles de règles sont basés sur l'ensemble des règles de base OWASP Modsecurity version 3.0.2 pour protéger contre certains des risques de sécurité les plus courants concernant les applications Web : les inclusions de fichiers locaux (LFI), les inclusions de fichiers distants (RFI), les exécutions de code à distance (RCE) et bien d'autres.
Dans cet atelier, vous allez apprendre à atténuer certaines des failles courantes à l'aide des règles du WAF Google Cloud Armor.
Points abordés
Dans cet atelier, vous allez apprendre à :
- Configurer un groupe d'instances et un équilibreur de charge mondial pour prendre en charge un service
- Configurer des règles de sécurité Cloud Armor avec des règles WAF préconfigurées pour protéger contre les attaques LFI, les exécutions RCE, les scanners, les attaques de protocole et la fixation de session
- Valider que Cloud Armor a atténué une attaque en observant les journaux

L'application OWASP Juice Shop est utile pour la sensibilisation et la formation à la sécurité, car elle contient des instances de chacune des failles de sécurité du Top 10 de l'OWASP, de par sa conception. Un pirate informatique peut l'exploiter à des fins de test. Dans cet atelier, vous allez l'utiliser pour montrer l'existence de certaines attaques d'application, puis protéger l'application à l'aide de règles WAF Cloud Armor. L'application se trouve derrière un équilibreur de charge Google Cloud, auquel les règles et la stratégie de sécurité Cloud Armor sont appliquées. Mise en service sur l'Internet public, elle est donc accessible depuis presque n'importe où. Elle est protégée à l'aide de Cloud Armor et de règles de pare-feu VPC.
Préparation
Avant de cliquer sur le bouton "Démarrer l'atelier"
Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.
Cet atelier pratique vous permet de suivre les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.
Pour réaliser cet atelier :
- Vous devez avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome).
Remarque : Ouvrez une fenêtre de navigateur en mode incognito (recommandé) ou de navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
- Vous disposez d'un temps limité. N'oubliez pas qu'une fois l'atelier commencé, vous ne pouvez pas le mettre en pause.
Remarque : Utilisez uniquement le compte de participant pour cet atelier. Si vous utilisez un autre compte Google Cloud, des frais peuvent être facturés à ce compte.
Démarrer l'atelier et se connecter à la console Google Cloud
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, une boîte de dialogue s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la gauche, vous trouverez le panneau "Détails concernant l'atelier", qui contient les éléments suivants :
- Le bouton "Ouvrir la console Google Cloud"
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
L'atelier lance les ressources, puis ouvre la page "Se connecter" dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau "Détails concernant l'atelier".
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau "Détails concernant l'atelier".
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. Ne saisissez pas ceux de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour accéder aux produits et services Google Cloud, cliquez sur le menu de navigation ou saisissez le nom du service ou du produit dans le champ Recherche.
Activer Cloud Shell
Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.
-
Cliquez sur Activer Cloud Shell
en haut de la console Google Cloud.
-
Passez les fenêtres suivantes :
- Accédez à la fenêtre d'informations de Cloud Shell.
- Autorisez Cloud Shell à utiliser vos identifiants pour effectuer des appels d'API Google Cloud.
Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET : . Le résultat contient une ligne qui déclare l'ID_PROJET pour cette session :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- (Facultatif) Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
- Cliquez sur Autoriser.
Résultat :
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (Facultatif) Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Remarque : Pour consulter la documentation complète sur gcloud
, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.
Avant de commencer
- Dans Cloud Shell, configurez votre ID de projet :
gcloud config list project
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
gcloud config set project $PROJECT_ID
Tâche 1 : Créer le réseau VPC
- Dans Cloud Shell, saisissez la commande suivante pour créer un réseau VPC :
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
Créer un sous-réseau
- Dans Cloud Shell, saisissez la commande suivante pour créer un sous-réseau :
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
Créer des règles de pare-feu VPC
Après avoir créé le VPC et le sous-réseau, configurez quelques règles de pare-feu.
- La première règle de pare-feu nommée
allow-js-site
autorise toutes les adresses IP à accéder à l'adresse IP externe du site Web de l'application de test sur le port 3000
.
- La deuxième règle de pare-feu nommée
allow-health-check
autorise les vérifications d'état à partir de l'adresse IP source des équilibreurs de charge.
- Dans Cloud Shell, saisissez la commande suivante pour créer une règle de pare-feu qui autorise tous les adresses IP à accéder à l'application :
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}}}
Résultat :
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
- Dans Cloud Shell, saisissez la commande suivante pour créer une règle de pare-feu qui autorise les vérifications d'état à partir des plages utilisées par Google pour ces vérifications :
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
Résultat :
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
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer le réseau VPC
Tâche 2 : Configurer l'application de test
Créez l'application de test, en l'occurrence le serveur Web OWASP Juice Shop.
Lorsque vous créez l'instance de calcul, vous utilisez une image de conteneur pour vous assurer que le serveur dispose des services appropriés. Vous déployez ce serveur dans et il possède un tag réseau qui autorise les vérifications de l'état.
Créer l'application OWASP Juice Shop
- Utilisez l'application Open Source OWASP Juice Shop bien connue qui servira d'application vulnérable. Vous pouvez également utiliser cette application pour relever des défis de sécurité OWASP sur le site Web de l'OWASP.
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
Résultat :
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
Cliquez sur Vérifier ma progression pour valider l'objectif.
Configurer l'application de test
Configurer le composant d'équilibreur de charge Cloud : groupe d'instances
- Dans Cloud Shell, saisissez la commande suivante pour créer le groupe d'instances non géré :
gcloud compute instance-groups unmanaged create {{{project_0.startup_script.vm_instance_group| Instance Group}}} \
--zone={{{project_0.startup_script.zone| Zone}}}
Résultat :
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES
{{{project_0.startup_script.vm_instance_group| Instance Group}}} {{{project_0.startup_script.zone| Zone}}} zone 0
- Ajoutez l'instance Juice Shop Google Compute Engine (GCE) au groupe d'instances non géré :
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}}}
Résultat :
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}}}].
- Définissez le port nommé sur celui de l'application Juice Shop :
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}}}
Résultat :
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}}}].
Cliquez sur Vérifier ma progression pour valider l'objectif.
Configurer le composant d'équilibreur de charge Cloud : groupe d'instances
Configurer le composant d'équilibreur de charge Cloud : vérification de l'état
Maintenant que vous avez créé le groupe d'instances non géré, créez une vérification de l'état, un service de backend, un mappage d'URL, un proxy cible et une règle de transfert.
- Dans Cloud Shell, saisissez la commande suivante pour créer la vérification de l'état du port de service Juice Shop :
gcloud compute health-checks create tcp tcp-port-3000 \
--port 3000
Résultat :
Created
NAME PROTOCOL
tcp-port-3000 TCP
Configurer le composant d'équilibreur de charge Cloud : service de backend
- Dans Cloud Shell, saisissez la commande suivante pour créer les paramètres du service de backend :
gcloud compute backend-services create juice-shop-backend \
--protocol HTTP \
--port-name http \
--health-checks tcp-port-3000 \
--enable-logging \
--global
Résultat :
NAME BACKENDS PROTOCOL
juice-shop-backend HTTP
- Ajoutez le groupe d'instances Juice Shop au service de backend :
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
Résultat :
Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].
Configurer le composant d'équilibreur de charge Cloud : mappage d'URL
- Dans Cloud Shell, saisissez la commande suivante pour créer le mappage d'URL qui enverra les requêtes entrantes au backend :
gcloud compute url-maps create juice-shop-loadbalancer \
--default-service juice-shop-backend
Résultat :
NAME DEFAULT_SERVICE
juice-shop-loadbalancer backendServices/juice-shop-backend
Configurer le composant d'équilibreur de charge Cloud : proxy cible
- Dans Cloud Shell, saisissez la commande suivante pour créer le proxy cible qui acheminera les requêtes entrantes vers le mappage d'URL :
gcloud compute target-http-proxies create juice-shop-proxy \
--url-map juice-shop-loadbalancer
Résultat :
NAME URL_MAP
juice-shop-proxy juice-shop-loadbalancer
Configurer le composant d'équilibreur de charge Cloud : règle de transfert
- Dans Cloud Shell, saisissez la commande suivante pour créer la règle de transfert pour l'équilibreur de charge :
gcloud compute forwarding-rules create juice-shop-rule \
--global \
--target-http-proxy=juice-shop-proxy \
--ports=80
Résultat :
Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].
Vérifier que le service Juice Shop est en ligne
- Depuis Cloud Shell :
PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule --global --format="value(IPAddress)")"
echo $PUBLIC_SVC_IP
Résultat :
<public VIP of service>
Patientez quelques minutes avant de continuer, sinon vous risquez de recevoir une réponse HTTP/1.1 404 Not Found.
- Depuis Cloud Shell :
curl -Ii http://$PUBLIC_SVC_IP
Résultat :
HTTP/1.1 200 OK
<...>
Vous pouvez également accéder au navigateur pour afficher Juice Shop.

Vous êtes maintenant prêt à explorer les failles de Juice Shop et à vous en protéger à l'aide des ensembles de règles WAF Cloud Armor.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Configurer le composant d'équilibreur de charge Cloud : vérification de l'état
Tâche 3 : Montrer l'existence de failles connues
Dans cet atelier, vous allez suivre des étapes condensées pour montrer les états avant et après la propagation des règles WAF Cloud Armor.
Observer une faille LFI : traversée de répertoire
L'inclusion de fichiers locaux consiste à observer les fichiers présents sur le serveur en exploitant l'absence de validation des entrées dans la requête afin d'exposer potentiellement des données sensibles. La requête suivante montre qu'il est possible d'effectuer une traversée de chemin. Dans votre navigateur ou avec curl, observez un chemin d'accès existant géré par l'application.
- Depuis Cloud Shell :
curl -Ii http://$PUBLIC_SVC_IP/ftp
Résultat :
HTTP/1.1 200 OK
<...>
Notez que la traversée de répertoire fonctionne également.
- Depuis Cloud Shell :
curl -Ii http://$PUBLIC_SVC_IP/ftp/../
Résultat :
HTTP/1.1 200 OK
<...>
Observer une faille RCE
L'exécution de code à distance inclut divers scénarios d'injection de commandes UNIX et Windows permettant aux pirates informatiques d'exécuter des commandes OS généralement réservées aux utilisateurs disposant de privilèges. Voici un exemple d'exécution de la commande ls
transmise.
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Résultat :
HTTP/1.1 200 OK
<...>
Supprimez les options curl pour observer le résultat complet.
Observer l'accès d'un scanner connu
Les applications d'analyse, qu'elles soient commerciales ou Open Source, servent à diverses fins, y compris à détecter des failles. Ces outils utilisent des en-têtes User-Agent et d'autres en-têtes connus. Observez le fonctionnement de curl avec un en-tête User-Agent connu.
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Résultat :
HTTP/1.1 200 OK
<...>
Observer une attaque de protocole : séparation de réponse HTTP
Certaines applications Web utilisent les entrées de l'utilisateur pour générer les en-têtes dans les réponses. Si l'application ne filtre pas correctement l'entrée, un pirate informatique peut potentiellement empoisonner le paramètre d'entrée avec la séquence %0d%0a
(la séquence CRLF utilisée pour séparer différentes lignes).
La réponse peut alors être interprétée comme deux réponses par tout élément qui l'analyse, comme un serveur proxy intermédiaire, et diffuser potentiellement du contenu erroné dans les requêtes suivantes. Insérez la séquence %0d%0a
dans le paramètre d'entrée, ce qui peut entraîner l'affichage d'une page trompeuse.
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>"
Résultat :
HTTP/1.1 200 OK
<...>
Observer la fixation de session
curl -Ii http://$PUBLIC_SVC_IP -H session_id=X
Résultat :
HTTP/1.1 200 OK
<...>
Tâche 4 : Définir des règles WAF Cloud Armor
- Affichez la liste des règles WAF préconfigurées à l'aide de la commande suivante dans Cloud Shell :
gcloud compute security-policies list-preconfigured-expression-sets
EXPRESSION_SET
Sqli-canary
RULE_ID
owasp-crs-v030001-id942110-sqli
owasp-crs-v030001-id942120-sqli
<...>
- Créez la stratégie de sécurité Cloud Armor à l'aide de la commande suivante dans Cloud Shell :
gcloud compute security-policies create {{{project_0.startup_script.policy_name| Policy Name}}} \
--description "Block with OWASP ModSecurity CRS"
- Dans Cloud Shell, mettez à jour la règle par défaut pour la stratégie de sécurité.
Remarque : La priorité de la règle par défaut a une valeur numérique de 2147483647.
gcloud compute security-policies rules update 2147483647 \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--action "deny-403"
- Comme la règle par défaut est configurée avec l'action "Refuser", vous devez autoriser l'accès à partir de votre adresse IP. Veuillez trouver votre adresse IP publique (curl, ipmonkey, whatismyip, etc.) :
MY_IP=$(curl ifconfig.me)
- Ajoutez la première règle pour autoriser l'accès à partir de votre adresse IP (INSÉREZ VOTRE ADRESSE IP CI-DESSOUS) :
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"
- Dans Cloud Shell, mettez à jour la stratégie de sécurité pour bloquer les attaques LFI.
Appliquez l'ensemble des règles de base OWASP Modsecurity qui empêche la traversée de répertoire pour les inclusions de fichiers locaux.
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
- Dans Cloud Shell, mettez à jour la stratégie de sécurité pour bloquer l'exécution de code à distance (RCE, Remote Code Execution).
Conformément à l'ensemble des règles de base OWASP Modsecurity, appliquez des règles qui recherchent les exécutions de code à distance, y compris les injections de commandes. Les commandes OS classiques sont détectées et bloquées.
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
- Mettez à jour la stratégie de sécurité pour bloquer les scanners de sécurité.
Appliquez l'ensemble des règles de base OWASP Modsecurity pour bloquer les scanners de sécurité, les clients HTTP de script et les robots d'exploration Web connus.
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
- Dans Cloud Shell, mettez à jour la stratégie de sécurité pour bloquer les attaques de protocole.
Conformément à l'ensemble des règles de base OWASP Modsecurity, appliquez des règles qui recherchent les caractères de retour chariot (CR) %0d
et de saut de ligne (LF) %0a
, ainsi que d'autres types d'attaques de protocole comme le trafic de requêtes HTTP.
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
- Mettez à jour la stratégie de sécurité pour bloquer la fixation de session.
Conformément à l'ensemble des règles de base OWASP Modsecurity, appliquez les règles suivantes à l'aide de Cloud Shell :
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
- Associez la stratégie de sécurité au service de backend :
gcloud compute backend-services update juice-shop-backend \
--security-policy {{{project_0.startup_script.policy_name| Policy Name}}} \
--global
L'application des règles peut prendre un certain temps (mais pas plus de 10 minutes).
- Après avoir suffisamment attendu, testez les failles dont vous avez précédemment montré l'existence pour confirmer l'application des règles WAF Cloud Armor à l'étape suivante.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer la stratégie de sécurité Cloud Armor
Observer la protection Cloud Armor avec l'ensemble des règles de base OWASP Modsecurity
- Dans Cloud Shell, vérifiez que la faille LFI est atténuée :
curl -Ii http://$PUBLIC_SVC_IP/?a=../
Résultat :
HTTP/1.1 403 Forbidden
<...>
- Dans Cloud Shell, vérifiez que l'attaque RCE est atténuée :
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Résultat :
HTTP/1.1 403 Forbidden
<..>
- Dans Cloud Shell, confirmez la détection du scanner connu.
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Résultat :
HTTP/1.1 403 Forbidden
<..>
- Dans Cloud Shell, vérifiez qu'une attaque de protocole est atténuée.
Selon ensemble des règles de base OWASP Modsecurity version 3.0.2, l'attaque de protocole est atténuée par :
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>"
Résultat :
HTTP/1.1 403 Forbidden
<..>
- Dans Cloud Shell, vérifiez que les tentatives de fixation de session sont bloquées :
curl -Ii http://$PUBLIC_SVC_IP/?session_id=a
Résultat :
HTTP/1.1 403 Forbidden
<..>
Tâche 5 : Examiner les règles de sécurité Cloud Armor
Maintenant que vous avez créé la stratégie de sécurité, examinez les règles qui ont été configurées.

Les règles sont évaluées selon leur priorité : les nombres inférieurs sont évalués en premier et, une fois qu'une règle est déclenchée, le traitement ne se poursuit pas pour les règles dont la valeur de priorité est supérieure.
- Priorité
9000
: bloquer les inclusions de fichiers locaux (LFI)
- Priorité
9001
: bloquer l'exécution de code à distance/l'injection de commandes (RCE, remote code execution)
- Priorité
9002
: bloquer la détection de scanners
- Priorité
9003
: bloquer les attaques de protocole telles que la séparation de réponse HTTP et le trafic de requêtes HTTP
- Priorité
9004
: bloquer les attaques de fixation de session
- Priorité
10000
: autoriser votre adresse IP à accéder au site Web
- Priorité
Par défaut
: refuser
Remarque : Notez que la règle "autoriser votre adresse IP" est configurée avec le numéro de priorité le plus élevé pour autoriser l'accès au site, tout en bloquant toute attaque.
Tâche 6 : Observer les journaux de la stratégie de sécurité Cloud Armor
Sur la page de la console Cloud Armor, affichez les détails de la stratégie de sécurité, puis cliquez sur l'onglet "Journaux" et sur le lien "Afficher les journaux de stratégie" pour accéder à la page Cloud Logging. Elle filtre automatiquement les journaux en fonction de la stratégie de sécurité qui vous intéresse, par exemple resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:. Observez les codes de réponse d'erreur 403 et développez les détails du journal pour observer le nom de la stratégie de sécurité appliquée, la valeur du champ correspondant et, plus bas, les ID d'expression préconfigurés (ou l'ID de signature).
Elle filtre automatiquement les résultats en fonction de la stratégie de sécurité qui vous intéresse, par exemple resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:().
- Observez les codes de réponse d'erreur 403 et développez les détails du journal pour observer le nom de la stratégie de sécurité appliquée, la valeur du champ correspondant et, plus bas, les ID d'expression préconfigurés (ou l'ID de signature).
Les captures d'écran suivantes montrent des exemples de journaux pour les stratégies de sécurité appliquées qui on été configurées dans cet atelier.
Journal LFI

Journal RCE

Journal de détection de scanner

Journal des attaques de protocole

Journal de fixation de session

Félicitations !
Vous avez réussi à atténuer certaines des failles courantes à l'aide des règles WAF Google Cloud Armor.
Dernière mise à jour du manuel : 12 mai 2025
Dernier test de l'atelier : 12 mai 2025
Copyright 2025 Google LLC. Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.