On se met dans la peau d'un utilisateur. On va faire des erreurs/actions volontaires qui auront des répercussions par la suite.
- Lancer le lab
- Montrer l'access key et la clé SSH à télécharger
- Rappel IAM et lien avec ce qu'on a vu (on ne peut pas le faire sur Learner Lab)
- Mais expliquer : création user/group + policies (qu'est-ce que je peux faire ?)
- Création manuelle d'une instance EC2 Ubuntu avec la clé
vockey - Cocher SSH / HTTP / HTTPS dans les règles de sécurité
- Montrer les Security Groups dans la console AWS
- Expliquer les règles Inbound / Outbound
- Montrer que SSH, HTTP et HTTPS sont autorisés (cochés à l'étape 3)
- Faire le lien avec le scan Nmap qui viendra plus tard
chmod 400 vockey.pem
ssh -i vockey.pem ubuntu@<IP_VM2>
# S'assurer que ça marche avant d'aller plus loin┌─────────────────┐ SSH ┌─────────────────┐
│ VM1 (Control) │ ──────────────────> │ VM2 (Managed) │
│ - Ansible │ avec vockey.pem │ - Target │
│ - Terraform │ │ - Nginx │
└─────────────────┘ └─────────────────┘
sudo apt update
sudo apt install python3 python3-pip git
sudo pip3 install ansible --break-system-packages[servers]
ma-vm2 ansible_host=44.201.65.186 ansible_user=ubuntuAvant de lancer le playbook, tester la connexion :
ansible ma-vm2 -i hosts -m ping --private-key=./vockey.pem --ssh-common-args='-o StrictHostKeyChecking=no'---
- name: Mise à jour des paquets avec apt
hosts: ma-vm2
become: yes
tasks:
- name: Mettre à jour le cache apt
apt:
update_cache: yes
cache_valid_time: 3600
- name: Mettre à jour tous les paquets
apt:
upgrade: dist
autoremove: yes
autoclean: yesansible-playbook playbook.yml -i hosts --private-key=./vockey.pem --ssh-common-args='-o StrictHostKeyChecking=no'git clone https://github.com/CISOfy/lynis
cd lynis && ./lynis audit system- Choisir 2 points à durcir et les corriger manuellement
- Relancer le scan pour vérifier
- Ce processus est correct pour 1 VM, mais fastidieux si on en a plusieurs
- Écrire un playbook pour durcir 2 autres points
- Lancer le playbook, puis se connecter à la VM2 et relancer le scan pour vérifier
Discussion : moins d'intervention humaine = moins d'erreurs possibles
| Protocole | Port | Service | Source |
|---|---|---|---|
| TCP | 22 | SSH | 0.0.0.0/0 |
| TCP | 80 | HTTP | 0.0.0.0/0 |
| TCP | 443 | HTTPS | 0.0.0.0/0 |
| TCP | 25 | SMTP | 0.0.0.0/0 |
| TCP | 993 | IMAPS | 0.0.0.0/0 |
| TCP | 445 | SMB | 0.0.0.0/0 |
| ICMP | All | ICMP IPv4 | 0.0.0.0/0 |
| Protocole | Port | Service | Source |
|---|---|---|---|
| UDP | 53 | DNS | 0.0.0.0/0 |
| TCP | 53 | DNS | 0.0.0.0/0 |
| Protocole | Port | Service | Source |
|---|---|---|---|
| TCP | 9142 | Cassandra/CQLSH | 0.0.0.0/0 |
| Protocole | Port | Usage | Source |
|---|---|---|---|
| TCP | 60011 | Custom | 0.0.0.0/0 |
| TCP | 7645 | Custom | 0.0.0.0/0 |
| TCP | 4576 | Custom | 0.0.0.0/0 |
| UDP | 7712 | Custom | 0.0.0.0/0 |
| UDP | 5555 | Custom | 0.0.0.0/0 |
| UDP | 59879 | Custom | 0.0.0.0/0 |
Note de securite : toutes les regles autorisent le trafic depuis n'importe quelle IP (0.0.0.0/0). Pensez a restreindre l'acces aux IPs necessaires pour ameliorer la securite.
sudo nmap -sS -sU -p- <IP_CIBLE>- Détecter le type d'OS
- Réponse au ping ou pas ? Justifié ou pas ? Sécurisé ou pas ?
- Scan des ports
- Produire un petit compte-rendu
sudo apt install nginx
sudo systemctl start nginx- Retourner sur VM1, relancer le scan et observer le port 80 ouvert
- Tester l'accès à l'IP de la VM2 depuis un navigateur web
- Constat : problème de sécurité, le serveur web est exposé
Message cle : "Automatiser = Securiser"
snap install terraform --classicVoir le dossier dédié.
Outil pour le test de sécurité web.
docker run -d --name dvwa -p 80:80 vulnerables/web-dvwasudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy# Scanner le répertoire de l'application web
trivy fs /var/www/html
# Scanner les dépendances (Python, Node.js, etc.)
trivy fs --scanners vuln,misconfig /chemin/vers/projet
# Scanner le système entier
trivy rootfs /
# Scanner le système entier avec rapport HTML
wget https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/html.tpl
trivy rootfs --format template --template "@html.tpl" -o report.html /sudo apt update && sudo apt install nginx -y && sudo systemctl enable nginx && sudo systemctl start nginx
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt \
-subj "/C=FR/ST=State/L=City/O=Organization/CN=127.0.0.1"
sudo chmod 600 /etc/nginx/ssl/server.key
sudo chmod 644 /etc/nginx/ssl/server.crt# Bloc HTTP - Redirection vers HTTPS
server {
listen 80; # Écoute sur le port 80 (HTTP) en IPv4
listen [::]:80; # Écoute sur le port 80 (HTTP) en IPv6
server_name votredomaine.com; # Nom de domaine ou IP du serveur
return 301 https://$host$request_uri; # Redirige tout le trafic HTTP vers HTTPS
}
# Bloc HTTPS - Configuration principale
server {
listen 443 ssl; # Écoute sur le port 443 (HTTPS) en IPv4 avec SSL
listen [::]:443 ssl; # Écoute sur le port 443 (HTTPS) en IPv6 avec SSL
server_name votredomaine.com; # Nom de domaine ou IP du serveur
# Certificats SSL
ssl_certificate /etc/nginx/ssl/server.crt; # Certificat SSL public
ssl_certificate_key /etc/nginx/ssl/server.key; # Clé privée SSL
# Paramètres SSL recommandés
ssl_protocols TLSv1.2 TLSv1.3; # Protocoles autorisés (TLS 1.2 et 1.3 uniquement)
ssl_ciphers HIGH:!aNULL:!MD5; # Chiffrements forts, exclut les faibles (aNULL, MD5)
ssl_prefer_server_ciphers on; # Le serveur choisit le cipher, pas le client
# En-têtes de sécurité
add_header Strict-Transport-Security "max-age=31536000" always; # Force HTTPS pendant 1 an (HSTS)
add_header X-Frame-Options "SAMEORIGIN" always; # Anti-clickjacking
add_header X-Content-Type-Options "nosniff" always; # Empêche le MIME sniffing
# Racine du site
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
# Si vous avez ModSecurity (WAF)
# modsecurity on;
# modsecurity_rules_file /etc/nginx/modsec/main.conf;
}sudo nginx -t
sudo systemctl restart nginx| Section | Rôle |
|---|---|
| Bloc port 80 | Redirige HTTP vers HTTPS |
| Bloc port 443 | Sert le site en HTTPS sécurisé |
| ssl_* | Configuration du chiffrement TLS |
| add_header | Protection contre les attaques web courantes |
| location / | Gestion des requêtes et fichiers statiques |
sudo apt install ssh-audit
ssh-audit <IP_CIBLE>Objectifs :
- Scanner avec ssh-audit + Lynis + référentiel ANSSI
- Proposer un fichier de configuration
sshd_configconforme aux recommandations - Le faire manuellement, et si possible avec Ansible
Référence : Guide ANSSI - Configuration Linux
