🛡️ Sécurité proactive · Cours théorique 2h

Bloc B3 Synthèse transversale SISR + SLAM 2h
🎬 Mode présentation (slides) 📄 Export PDF
FormationBTS SIO 2e année — IRIS Mediaschool
BlocB3 — Cybersécurité des services informatiques
OptionTransversal SISR + SLAM (cours commun)
ObjetSynthèse du B3 : panorama des attaques, shift-left, detect-early
Durée2h (10 min intro + 40 min attaques + 20 min parade + 30 min Semgrep + 20 min Suricata + 20 min synthèse)
PrérequisM3.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étectionCoût relatifQui paye ?
Pendant le code (dev, SAST)Le dev, 10 min
Revue de codeL'équipe
Tests QA10×Le sprint
Production sans incident30×L'astreinte
Production avec incident (fuite, ransomware)100× à 1000×L'entreprise, parfois le métier
💡 Idée directrice

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.

RangCatégorieSens concret
A01Broken Access ControlIDOR, tokens manipulés, rôles contournés. 100 % des applis testées ont au moins un cas (source OWASP 2025).
A02Security MisconfigurationConfig par défaut, headers absents, buckets cloud publics.
A03Software Supply Chain FailuresDépendance npm/pip vérolée, SBOM absente, CI compromise (nouvelle position 2025).
A04Cryptographic FailuresMD5, hash sans sel, TLS obsolète, secrets en clair.
A05InjectionSQLi, NoSQLi, OS command, LDAP, XPath, SSRF.
A06Insecure DesignDesign cassé — ajouter de la crypto ne sauvera pas.
A07Authentication FailuresMots de passe faibles, absence de MFA, session fixée.
A08Software or Data Integrity FailuresCI/CD sans signature, deserialization non sûre.
A09Security Logging and Alerting FailuresOn ne voit rien passer — dwell time élevés rapportés par Mandiant M-Trends.
A10Mishandling of Exceptional ConditionsNouvelle 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 :

  1. Reconnaissance (TA0043) — scan Nmap, Shodan, OSINT
  2. Resource Development (TA0042) — comptes fantômes pour supply chain
  3. Initial Access (TA0001) — spearphishing, serveur exposé
  4. Execution (TA0002) — PowerShell, Bash, binaire déposé
  5. Persistence (TA0003) — cron, service, clé SSH ajoutée
  6. Privilege Escalation (TA0004) — sudo misconfig, kernel exploit
  7. Defense Evasion (TA0005) — log tampering, living-off-the-land
  8. Credential Access (TA0006) — dump LSASS, vol de tickets Kerberos
  9. Discovery (TA0007) — énumération AD, scan interne
  10. Lateral Movement (TA0008) — RDP, pass-the-hash, WMI
  11. Collection (TA0009) — screenshots, keylog
  12. Command and Control (TA0011) — C2 sur HTTPS, DNS tunneling
  13. Exfiltration (TA0010) — upload vers cloud public, DNS tunneling
  14. Impact (TA0040) — ransomware, wipe, defacement
💡 À retenir

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

AcronymeNomQuand ?Exemple open source
SASTStatic Application Security TestingPendant le dev, sur le code sourceSemgrep, CodeQL
DASTDynamic Application Security TestingL'appli tourne, scan black-boxOWASP ZAP, Nuclei
SCASoftware Composition AnalysisSur les dépendances (lockfiles)OSV-Scanner, Trivy
IDSIntrusion Detection SystemSur le réseau/host, passifSuricata, Snort, Zeek
IPSIntrusion Prevention SystemSur le réseau, inline, bloqueSuricata (mode IPS)
SIEMSecurity Information and Event MgmtCorrélation logs multi-sourcesWazuh, ELK + ElastAlert
EDREndpoint Detection and ResponseSur les postes/serveursWazuh 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

IDSIPS
PositionHors chemin (SPAN/TAP)Sur le chemin (inline)
ActionAlerte uniquementAlerte + bloque (drop, reject)
Risque si faux positifBruitCoupure de service
Risque si défaillanceAveugleRupture réseau
Usage typiqueTout le SIPé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
  }
}
💡 Clé importante

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

  1. OWASP Top 10:2025 : A01 Broken Access Control reste n°1. A03 Supply Chain remonte. A10 Mishandling of Exceptional Conditions arrive.
  2. Shift-left + detect-early : les deux sont nécessaires, pas l'un à la place de l'autre.
  3. Semgrep = SAST AST-based, règles YAML, intégrable en CI avec mode Block.
  4. Suricata = IDS/IPS, règles Snort-compat, sortie EVE JSON avec severity 1-3.
  5. 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 ?

  1. Injection
  2. Broken Access Control
  3. Cryptographic Failures
  4. 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 ?

  1. Tests de pénétration manuels sur une appli en production
  2. Analyse du code source sans exécution, basée sur des patterns AST
  3. Scan black-box d'une application en cours d'exécution
  4. 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. 1
  2. 3
  3. 5
  4. 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 ?

  1. Monitor
  2. Comment
  3. Block
  4. 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)