🛡️ Sécurité proactive · Cours théorique 2h
| Formation | BTS SIO 2e année — IRIS Mediaschool |
|---|---|
| Bloc | B3 — Cybersécurité des services informatiques |
| Option | Transversal SISR + SLAM (cours commun) |
| Objet | Synthèse du B3 : panorama des attaques, shift-left, detect-early |
| Durée | 2h (10 min intro + 40 min attaques + 20 min parade + 30 min Semgrep + 20 min Suricata + 20 min synthèse) |
| Prérequis | M3.1 à M3.4 traités (RGPD, identités, durcissement, pare-feu) |
Objectifs pédagogiques
- Identifier les 10 familles d'attaques les plus exploitées en 2025-2026.
- Comprendre la logique shift-left (dev) et detect-early (réseau).
- Positionner les outils SAST (Semgrep) et IDS/IPS (Suricata) dans la chaîne de défense.
- Préparer les TP : audit automatisé de code + sonde réseau avec alerting.
0. Mise en bouche (10 min)
Le coût d'une faille exploitée
Un même bug vu à deux moments. Ordres de grandeur rapportés par l'étude annuelle IBM Cost of a Data Breach :
| Moment de détection | Coût relatif | Qui paye ? |
|---|---|---|
| Pendant le code (dev, SAST) | 1× | Le dev, 10 min |
| Revue de code | 5× | L'équipe |
| Tests QA | 10× | Le sprint |
| Production sans incident | 30× | L'astreinte |
| Production avec incident (fuite, ransomware) | 100× à 1000× | L'entreprise, parfois le métier |
Plus la détection est tardive, plus la remédiation coûte cher. Deux angles complémentaires aujourd'hui :
- SLAM / développeurs — attraper le bug dans l'IDE ou à la Pull Request (SAST).
- SISR / réseau — si la faille passe en prod, la sonde doit la voir exploser (IDS/IPS + alerte).
La règle de Swiss Cheese (James Reason, 2000)
Chaque couche a des trous. L'attaquant traverse quand les trous s'alignent. On ne compte pas sur une couche parfaite — on empile les couches imparfaites. C'est la défense en profondeur.
1. Panorama des attaques (40 min)
1.1 — OWASP Top 10:2025 (applications web)
Classement maintenu par la fondation OWASP, version publiée décembre 2025. Les 10 catégories de risques les plus observées sur les applications web en 2025.
| Rang | Catégorie | Sens concret |
|---|---|---|
| A01 | Broken Access Control | IDOR, tokens manipulés, rôles contournés. 100 % des applis testées ont au moins un cas (source OWASP 2025). |
| A02 | Security Misconfiguration | Config par défaut, headers absents, buckets cloud publics. |
| A03 | Software Supply Chain Failures | Dépendance npm/pip vérolée, SBOM absente, CI compromise (nouvelle position 2025). |
| A04 | Cryptographic Failures | MD5, hash sans sel, TLS obsolète, secrets en clair. |
| A05 | Injection | SQLi, NoSQLi, OS command, LDAP, XPath, SSRF. |
| A06 | Insecure Design | Design cassé — ajouter de la crypto ne sauvera pas. |
| A07 | Authentication Failures | Mots de passe faibles, absence de MFA, session fixée. |
| A08 | Software or Data Integrity Failures | CI/CD sans signature, deserialization non sûre. |
| A09 | Security Logging and Alerting Failures | On ne voit rien passer — dwell time élevés rapportés par Mandiant M-Trends. |
| A10 | Mishandling of Exceptional Conditions | Nouvelle catégorie 2025. Fail-open au lieu de fail-safe : un try/catch qui avale une exception d'auth. |
Source officielle : owasp.org/Top10/2025
1.2 — MITRE ATT&CK® (réseau et système)
La matrice de référence des Tactiques, Techniques et Procédures (TTP) adverses, basée sur des observations réelles. Les 14 tactiques dans l'ordre d'une kill chain :
- Reconnaissance (TA0043) — scan Nmap, Shodan, OSINT
- Resource Development (TA0042) — comptes fantômes pour supply chain
- Initial Access (TA0001) — spearphishing, serveur exposé
- Execution (TA0002) — PowerShell, Bash, binaire déposé
- Persistence (TA0003) — cron, service, clé SSH ajoutée
- Privilege Escalation (TA0004) — sudo misconfig, kernel exploit
- Defense Evasion (TA0005) — log tampering, living-off-the-land
- Credential Access (TA0006) — dump LSASS, vol de tickets Kerberos
- Discovery (TA0007) — énumération AD, scan interne
- Lateral Movement (TA0008) — RDP, pass-the-hash, WMI
- Collection (TA0009) — screenshots, keylog
- Command and Control (TA0011) — C2 sur HTTPS, DNS tunneling
- Exfiltration (TA0010) — upload vers cloud public, DNS tunneling
- Impact (TA0040) — ransomware, wipe, defacement
Un IDS/IPS bien réglé couvre au minimum 6 de ces étapes (3, 4, 10, 11, 12, 13). Sans sonde, on manque la plupart des signaux faibles de compromission. Les rapports Mandiant M-Trends et ANSSI Panorama de la menace rapportent des dwell times (délai entre compromission et détection) qui se comptent en semaines ou mois selon les secteurs.
Source officielle : attack.mitre.org/matrices/enterprise
1.3 — Attaques centrées humain
- Phishing ciblé (spearphishing) — TA0001. Reste un vecteur majeur d'accès initial selon les rapports ANSSI et Verizon DBIR.
- Ingénierie sociale téléphonique (vishing) — en hausse, y compris avec voix synthétique.
- Compromission de compte partenaire — supply chain humaine, un prestataire piraté sert de rampe.
Outil de détection : logs + corrélation (SIEM), hors scope aujourd'hui.
2. La parade : shift-left + detect-early (20 min)
2.1 — Deux moments pour agir
Code → Build → Test → Deploy → Run
│ │ │ │ │
│ │ │ │ └─► IDS/IPS, SIEM, EDR (DETECT-EARLY)
│ │ │ └─────────► Scan conteneur, secrets in CI
│ │ └─────────────────► DAST (scan black-box)
│ └─────────────────────────► SCA (dépendances), SBOM
└────────────────────────────────► SAST (Semgrep), pre-commit (SHIFT-LEFT)
- Shift-left — on pousse la détection le plus à gauche possible du pipeline : moins cher, moins d'incidents.
- Detect-early — on suppose qu'une faille passe en prod et on prépare la sonde qui crie.
Les deux sont complémentaires, pas concurrents. Un bon SI fait les deux.
2.2 — Taxonomie des outils de sécurité logicielle
| Acronyme | Nom | Quand ? | Exemple open source |
|---|---|---|---|
| SAST | Static Application Security Testing | Pendant le dev, sur le code source | Semgrep, CodeQL |
| DAST | Dynamic Application Security Testing | L'appli tourne, scan black-box | OWASP ZAP, Nuclei |
| SCA | Software Composition Analysis | Sur les dépendances (lockfiles) | OSV-Scanner, Trivy |
| IDS | Intrusion Detection System | Sur le réseau/host, passif | Suricata, Snort, Zeek |
| IPS | Intrusion Prevention System | Sur le réseau, inline, bloque | Suricata (mode IPS) |
| SIEM | Security Information and Event Mgmt | Corrélation logs multi-sources | Wazuh, ELK + ElastAlert |
| EDR | Endpoint Detection and Response | Sur les postes/serveurs | Wazuh agent, OSSEC |
3. SAST dans la vraie vie : Semgrep (30 min)
Principe
Semgrep analyse du code source sans l'exécuter et cherche des patterns qui correspondent à des règles. C'est l'équivalent de grep qui comprend la syntaxe du langage (AST-based). Supporte 30+ langages : Python, JavaScript, Java, Go, C#, PHP, Ruby, Rust, Terraform, Bash, Dockerfile.
Structure d'une règle
Exemple : détecter une concaténation SQL en Python.
rules:
- id: python-sqli-concat
pattern: |
$CURSOR.execute("..." + $VAR + "...")
message: |
Concaténation SQL détectée — utilise des paramètres liés.
languages: [python]
severity: ERROR
metadata:
owasp: A05:2025-Injection
cwe: CWE-89
Modes de règle en CI (Monitor / Comment / Block)
- Monitor — log la finding, la PR passe.
- Comment — post un commentaire PR, la PR passe.
- Block — fait échouer le job CI. La PR ne peut plus être mergée si la branche est protégée.
Source officielle : semgrep.dev/docs/semgrep-ci/configuring-blocking-and-errors-in-ci
Pipeline cible (TP SLAM)
Dev pousse sa branche
│
▼
GitHub reçoit le push
│
▼
Déclenche workflow .github/workflows/security.yml
│
▼
Job tourne sur runner AUTO-HÉBERGÉ (server IRIS)
│
▼
semgrep ci --sarif --output=audit.sarif
│
├── SARIF → onglet GitHub Security
├── Markdown audit → artefact téléchargeable
└── Si ERROR trouvé → exit code ≠ 0 → PR BLOQUÉE
4. IDS/IPS dans la vraie vie : Suricata (20 min)
IDS vs IPS : la différence à bien distinguer
| IDS | IPS | |
|---|---|---|
| Position | Hors chemin (SPAN/TAP) | Sur le chemin (inline) |
| Action | Alerte uniquement | Alerte + bloque (drop, reject) |
| Risque si faux positif | Bruit | Coupure de service |
| Risque si défaillance | Aveugle | Rupture réseau |
| Usage typique | Tout le SI | Périmètre sensible (DMZ, VLAN critiques) |
Suricata fait les deux selon la configuration (stream.inline: yes + NFQUEUE en mode IPS). Bonne pratique PME : IDS d'abord, IPS en second temps sur les segments critiques, une fois les règles stabilisées.
Format d'une règle Suricata (compat Snort)
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 \
(msg:"ET SCAN SSH brute force attempt"; \
flow:to_server; threshold: type both, track by_src, count 5, seconds 60; \
classtype:attempted-admin; sid:2001219; rev:5;)
Rulesets communautaires
- ET Open (Emerging Threats Open) — ruleset gratuit, mis à jour quotidiennement en semaine. Installé via
suricata-update. - ET Pro — version commerciale (Proofpoint), règles plus récentes.
- Custom — tes propres règles dans
/etc/suricata/rules/local.rules.
Sortie : EVE JSON (format qu'on parse)
{
"timestamp": "2026-04-23T14:22:10.123456+0200",
"event_type": "alert",
"src_ip": "203.0.113.42",
"dest_ip": "10.0.0.15",
"dest_port": 22,
"proto": "TCP",
"alert": {
"signature_id": 2001219,
"signature": "ET SCAN SSH brute force attempt",
"category": "Attempted Administrator Privilege Gain",
"severity": 1
}
}
alert.severity : 1 = critique, 2 = majeur, 3 = mineur. Source : docs.suricata.io EVE JSON Format. C'est le champ qu'on utilise dans le TP SISR pour trier les alertes avant d'envoyer un mail.
5. Défense en profondeur — synthèse (10 min)
Internet
│
▼
┌─────────────────────────┐
│ Pare-feu périmétrique │ ← Filtrage L3/L4 (M3.4 C3.4.1)
└──────────┬──────────────┘
│
┌───────┴───────┐
│ SURICATA │ ← IDS/IPS L7 (AUJOURD'HUI)
└───────┬───────┘
│
┌──────────┴──────────┐
│ DMZ / LAN │
│ │
│ App Web ← ── ── ── │ ← Code scanné par SEMGREP (AUJOURD'HUI)
│ │ en amont, à la CI/CD
└─────────────────────┘
│
▼
Veille CVE + correctifs (M3.4 C3.4.2)
PCA/PRA en cas de crise (M3.4 C3.4.3)
On boucle le B3 : chaque module apporte une couche de fromage. Aujourd'hui on ferme le bord droit (détection) et le bord gauche (prévention dev).
6. Ce qu'il faut retenir
- OWASP Top 10:2025 : A01 Broken Access Control reste n°1. A03 Supply Chain remonte. A10 Mishandling of Exceptional Conditions arrive.
- Shift-left + detect-early : les deux sont nécessaires, pas l'un à la place de l'autre.
- Semgrep = SAST AST-based, règles YAML, intégrable en CI avec mode Block.
- Suricata = IDS/IPS, règles Snort-compat, sortie EVE JSON avec
severity1-3. - Règle d'or : sans log, sans alerte, sans review — on est aveugle.
🎮 Quiz — Testez vos connaissances
4 QCM · 1 Vrai/Faux · 1 Question ouverte
QCM 1 — Top 10 OWASP 2025
Quelle catégorie occupe la première position du OWASP Top 10:2025 ?
- Injection
- Broken Access Control
- Cryptographic Failures
- Security Misconfiguration
📋 Correction
B — Broken Access Control. A01 maintient sa position de 2021. Selon les données contribuées à OWASP 2025, 100 % des applications testées présentent au moins une faiblesse de cette catégorie (CWE-284, CWE-285, CWE-639, etc.). Source : owasp.org.
QCM 2 — SAST vs DAST
Quelle est la bonne définition de SAST ?
- Tests de pénétration manuels sur une appli en production
- Analyse du code source sans exécution, basée sur des patterns AST
- Scan black-box d'une application en cours d'exécution
- Scan des dépendances tierces (lockfiles)
📋 Correction
B. SAST = Static Application Security Testing — analyse statique du code source sans l'exécuter. A correspond à du pentest manuel, C à DAST (Dynamic), D à SCA (Software Composition Analysis).
QCM 3 — Suricata severity
Dans le format EVE JSON de Suricata, quelle valeur du champ alert.severity représente le niveau le plus critique ?
- 1
- 3
- 5
- 10
📋 Correction
A — severity=1. Suricata utilise une échelle 1-3 où 1 est le plus critique et 3 le moins. Dans le TP SISR, on mappe : severity 1 → CRITICAL (mail immédiat), severity 2 → HIGH, severity 3 → MEDIUM (agrégé horaire). Source : docs.suricata.io.
QCM 4 — Mode de règle Semgrep qui bloque une PR
Quel mode de règle Semgrep fait échouer le job CI et bloque le merge ?
- Monitor
- Comment
- Block
- Audit
📋 Correction
C — Block. Monitor log la finding mais laisse passer. Comment poste un commentaire PR mais laisse passer. Block fait exit code ≠ 0 → job CI échoue → la branche protégée refuse le merge.
Vrai / Faux
⬜ Un IPS placé en inline est toujours préférable à un IDS placé en SPAN, car il bloque les attaques.
📋 Correction
FAUX. Un IPS inline introduit deux risques : 1) un faux positif coupe un service légitime ; 2) une défaillance du boîtier rompt la connectivité réseau. La bonne pratique est IDS d'abord (passif, observation), tuner les règles pour réduire les faux positifs, puis basculer progressivement en IPS sur les segments critiques une fois la confiance acquise. L'ANSSI recommande cette approche par étapes dans ses guides architecture.
Question ouverte
Expliquez en 5 lignes pourquoi la catégorie A10:2025 Mishandling of Exceptional Conditions a été ajoutée au Top 10 OWASP en 2025. Donnez un exemple concret.
📋 Éléments de réponse
A10 regroupe 24 CWE liés à un mauvais traitement des conditions exceptionnelles : try/catch qui avalent silencieusement l'erreur, fail-open au lieu de fail-safe, logique de gestion d'exceptions qui court-circuite les contrôles. Exemple type : un middleware d'authentification qui lève une exception sur un token malformé ; si le catch englobe tout et renvoie la requête au handler, l'utilisateur passe sans auth. Cette nouvelle catégorie a été promue grâce à l'enquête communauté 2025 — c'est un angle mort historiquement sous-estimé. Source : owasp.org/Top10/2025/Introduction.
Sources officielles (à consulter)
- OWASP Top 10:2025 — owasp.org/Top10/2025
- MITRE ATT&CK Enterprise — attack.mitre.org/matrices/enterprise
- ANSSI — Les essentiels DevSecOps — messervices.cyber.gouv.fr
- Semgrep docs — semgrep.dev/docs
- Suricata docs — docs.suricata.io
- IBM Cost of a Data Breach — ibm.com/reports/data-breach
- Mandiant M-Trends — mandiant.com/m-trends
