Chapitre 4.4 - Playbooks de Durcissement, Conformite et Exercices Red/Blue Team
Module 4 : Ingenierie Defensive et Durcissement Chapitre Final - Capstone du Cours Prerequis : Tous les chapitres precedents. Ce chapitre synthetise les connaissances offensives (Module 3) avec l'architecture defensive (Module 4) en pratique operationnelle.
Table des matieres
- Philosophie du Durcissement - Benchmarks CIS et Defense en Profondeur
- Playbook de Durcissement Windows
- Playbook de Durcissement Linux
- Durcissement des Equipements Reseau et de l'Infrastructure
- Cadres de Conformite - NIST, CIS, SOC 2 et PCI-DSS
- Gestion des Vulnerabilites - Balayage, Priorisation et Remediation
- Operations Red Team - Planification, Regles d'Engagement et Rapport
- Validation des Detections Blue Team et Exercices Purple Team
- Metriques de Securite et Amelioration Continue
- Cartographie MITRE ATT&CK et Resume du Cours
1. Philosophie du Durcissement - Benchmarks CIS et Defense en Profondeur
Pourquoi le Durcissement Echoue en Pratique
La plupart des organisations appliquent les controles de durcissement de maniere incoherente - elles durcissent les nouveaux systemes au moment de la construction mais une derive survient au fil des mois alors que des correctifs sont manques, des exceptions sont accordees et des configurations sont modifiees par commodite. Le resultat est un environnement heterogene ou le durcissement est l'exception plutot que la regle.
Les trois modes d'echec :
| Mode d'echec | Cause profonde | Consequence |
|---|---|---|
| Derive de configuration | Pas de surveillance continue de la conformite | Durci a la construction ; vulnerable 6 mois plus tard |
| Proliferation des exceptions | Pas de processus de revue des exceptions | Chaque exception "temporaire" devient permanente |
| Lacunes de couverture | Durcissement applique aux serveurs mais pas aux postes de travail | Les attaquants pivotent via des endpoints non gouvernes |
Niveaux des Benchmarks CIS
Le Center for Internet Security (CIS) publie des benchmarks pour chaque OS majeur, plateforme cloud et application. Chaque benchmark a deux niveaux d'implementation :
- Niveau 1 : Reference minimale - controles essentiels avec faible impact operationnel. Chaque organisation devrait atteindre N1 sur tous les systemes.
- Niveau 2 : Durcissement strict - controles supplementaires pouvant impacter la fonctionnalite. Approprie pour les environnements haute securite (DMZ, serveurs traitant des IIP/PHI).
# CIS-CAT Lite -- outil d'evaluation de benchmark gratuit
# Telecharger depuis : https://www.cisecurity.org/cis-cat-lite
# Executer l'evaluation contre le systeme local (Linux)
./CIS-CAT.sh \\
-b benchmarks/CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0-xccdf.xml \\
-p xccdf_org.cisecurity.benchmarks_profile_Level_1_-_Server \\
-r /tmp/cis_assessment \\
-html # Rapport HTML en sortie
# OpenSCAP -- scanner de conformite open-source (Linux)
apt install openscap-scanner scap-security-guide
# Evaluer par rapport au profil CIS
oscap xccdf eval \\
--profile xccdf_org.ssgproject.content_profile_cis_server_l1 \\
--results /tmp/scan_results.xml \\
--report /tmp/scan_report.html \\
/usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
# Analyser les resultats : comptages reussite/echec
oscap xccdf generate report /tmp/scan_results.xml | \\
grep -E "pass|fail" | sort | uniq -c
Modele de Defense en Profondeur
Aucun controle unique n'arrete toutes les attaques. La defense en profondeur superpose des controles de sorte que contourner une couche necessite encore de vaincre plusieurs autres :
Couche 1 : Perimetre -> Pare-feu, IPS, WAF, passerelle email
Couche 2 : Reseau -> Segmentation, micro-segmentation, NAC, transport chiffre
Couche 3 : Endpoint -> EDR, AV, pare-feu hote, liste blanche d'applications
Couche 4 : Identite -> MFA, PAM, moindre privilege, postes de travail a acces privilegie
Couche 5 : Donnees -> Chiffrement au repos, DLP, gestion des droits
Couche 6 : Detection -> SIEM, SOAR, chasse aux menaces, analyse comportementale
Couche 7 : Reponse -> Plan IR, playbooks, sauvegardes, reprise apres sinistre
Les chapitres offensifs (Module 3) ont demontre que chaque couche individuelle peut etre contournee. La puissance de la defense en profondeur est que contourner toutes les couches simultanement est exponentiellement plus difficile.
2. Playbook de Durcissement Windows
Durcissement Windows de Base - PowerShell
# ==================================================
# PLAYBOOK DE DURCISSEMENT WINDOWS
# Base sur CIS Windows 10/11 Benchmark Niveau 1
# Executer en tant qu'Administrateur
# ==================================================
# -------------------------------------------------
# 1. POLITIQUE DE COMPTE
# -------------------------------------------------
# Politique de mot de passe
net accounts /minpwlen:14 # Minimum 14 caracteres
net accounts /maxpwage:90 # Age maximum du mot de passe : 90 jours
net accounts /minpwage:1 # Minimum 1 jour (empeche la reutilisation immediate)
net accounts /uniquepw:24 # Memoriser 24 mots de passe
# Politique de verrouillage
net accounts /lockoutthreshold:5 # Verrouiller apres 5 tentatives echouees
net accounts /lockoutduration:15 # Verrouiller pendant 15 minutes
net accounts /lockoutwindow:15 # Reinitialiser le compteur apres 15 minutes
# Desactiver les comptes Administrateur et Invites integres
Disable-LocalUser -Name "Administrator"
Disable-LocalUser -Name "Guest"
# Renommer l'Administrateur integre (couche d'obfuscation)
Rename-LocalUser -Name "Administrator" -NewName "LocalAdmin_Disabled"
# -------------------------------------------------
# 2. POLITIQUE D'AUDIT -- ACTIVER LA JOURNALISATION CRITIQUE
# -------------------------------------------------
# Creation de processus avec ligne de commande (alimente les detections SIEM)
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable
reg add "HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\Audit" `
/v ProcessCreationIncludeCmdLine_Enabled /t REG_DWORD /d 1 /f
# Evenements de connexion/deconnexion
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Logoff" /success:enable
auditpol /set /subcategory:"Account Lockout" /success:enable /failure:enable
# Utilisation des privileges
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable
# Acces aux objets (fichier/registre)
auditpol /set /subcategory:"File System" /success:enable /failure:enable
auditpol /set /subcategory:"Registry" /success:enable /failure:enable
# Gestion des comptes
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Security Group Management" /success:enable /failure:enable
# Journalisation PowerShell
reg add "HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\ScriptBlockLogging" `
/v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
reg add "HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\Transcription" `
/v EnableTranscripting /t REG_DWORD /d 1 /f
reg add "HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\Transcription" `
/v OutputDirectory /t REG_SZ /d "\\\\LOGSERVER\\\\PSTranscripts$" /f
# Augmenter la taille du journal d'evenements Securite (20 Mo par defaut est insuffisant)
wevtutil sl Security /ms:1073741824 # 1 Go
wevtutil sl System /ms:524288000 # 500 Mo
# -------------------------------------------------
# 3. DURCISSEMENT RESEAU
# -------------------------------------------------
# Desactiver SMBv1 (EternalBlue)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# Exiger la signature SMB (empeche le relai NTLM)
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
# Desactiver LLMNR (empeche les attaques Responder)
reg add "HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows NT\\\\DNSClient" `
/v EnableMulticast /t REG_DWORD /d 0 /f
# Desactiver NBT-NS (empeche les attaques Responder)
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled}
foreach ($adapter in $adapters) { $adapter.SetTcpipNetbios(2) }
# Desactiver WDigest (empeche le stockage en clair des mots de passe dans LSASS)
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\SecurityProviders\\\\WDigest" `
/v UseLogonCredential /t REG_DWORD /d 0 /f
# Activer Credential Guard (protege LSASS avec la virtualisation)
# Requiert : UEFI Secure Boot + materiel compatible Virtualization Based Security
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\DeviceGuard" `
/v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /f
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\DeviceGuard" `
/v RequirePlatformSecurityFeatures /t REG_DWORD /d 1 /f
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Lsa" `
/v LsaCfgFlags /t REG_DWORD /d 1 /f
# Desactiver NTLMv1 (forcer NTLMv2 au minimum)
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Lsa" `
/v LmCompatibilityLevel /t REG_DWORD /d 5 /f
# 5 = envoyer uniquement NTLMv2, refuser LM et NTLMv1
# -------------------------------------------------
# 4. REDUCTION DE LA SURFACE D'ATTAQUE (ASR)
# -------------------------------------------------
# Activer les regles ASR de Windows Defender
# Bloquer les applications Office de lancer des processus enfants
Add-MpPreference -AttackSurfaceReductionRules_Ids `
"d4f940ab-401b-4efc-aadc-ad5f3c50688a" `
-AttackSurfaceReductionRules_Actions Enabled
# Bloquer le vol d'identifiants depuis LSASS
Add-MpPreference -AttackSurfaceReductionRules_Ids `
"9e6c4e1f-7d60-472f-ba1a-a39ef669e4b3" `
-AttackSurfaceReductionRules_Actions Enabled
# Bloquer la creation de processus depuis PSExec et les commandes WMI
Add-MpPreference -AttackSurfaceReductionRules_Ids `
"d1e49aac-8f56-4280-b9ba-993a6d77406c" `
-AttackSurfaceReductionRules_Actions Enabled
# Bloquer Office d'injecter du code dans d'autres processus
Add-MpPreference -AttackSurfaceReductionRules_Ids `
"75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84" `
-AttackSurfaceReductionRules_Actions Enabled
# -------------------------------------------------
# 5. PROTECTION LSASS
# -------------------------------------------------
# Activer la protection LSA (RunAsPPL) -- empeche Mimikatz de lire LSASS
reg add "HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Lsa" `
/v RunAsPPL /t REG_DWORD /d 1 /f
# Necessite un redemarrage ; apres redemarrage, Mimikatz requiert un acces niveau noyau
# -------------------------------------------------
# 6. APPLOCKER / CONTROLE DES APPLICATIONS
# -------------------------------------------------
# Creer une politique AppLocker -- approche liste blanche
# Autoriser uniquement les executables signes depuis Program Files
$policy = @"
<AppLockerPolicy Version="1">
<RuleCollection Type="Exe" EnforcementMode="Enabled">
<FilePublisherRule Id="1" Name="Signe par Microsoft" Action="Allow"
UserOrGroupSid="S-1-1-0">
<Conditions><FilePublisherCondition PublisherName="O=MICROSOFT CORPORATION"
ProductName="*" BinaryName="*" VersionRange="*"/></Conditions>
</FilePublisherRule>
<FilePathRule Id="2" Name="Program Files" Action="Allow"
UserOrGroupSid="S-1-1-0">
<Conditions><FilePathCondition Path="%PROGRAMFILES%\\\\*"/></Conditions>
</FilePathRule>
<FilePathRule Id="3" Name="Windows" Action="Allow"
UserOrGroupSid="S-1-1-0">
<Conditions><FilePathCondition Path="%WINDIR%\\\\*"/></Conditions>
</FilePathRule>
<!-- REFUSER : execution depuis les emplacements inscriptibles par l'utilisateur -->
<FilePathRule Id="4" Name="Bloquer Temp" Action="Deny"
UserOrGroupSid="S-1-1-0">
<Conditions><FilePathCondition Path="%TEMP%\\\\*"/></Conditions>
</FilePathRule>
<FilePathRule Id="5" Name="Bloquer AppData" Action="Deny"
UserOrGroupSid="S-1-1-0">
<Conditions><FilePathCondition Path="%LOCALAPPDATA%\\\\*"/></Conditions>
</FilePathRule>
</RuleCollection>
</AppLockerPolicy>
"@
Set-AppLockerPolicy -XMLPolicy $policy
Valider le Durcissement Windows
# Verifier que les parametres critiques sont appliques
function Test-Hardening {
$results = @()
# SMBv1 desactive ?
$smb1 = (Get-SmbServerConfiguration).EnableSMB1Protocol
$results += [PSCustomObject]@{
Check="SMBv1 Desactive"; Pass=(-not $smb1); Value=$smb1}
# WDigest desactive ?
$wdigest = (Get-ItemProperty "HKLM:\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\SecurityProviders\\\\WDigest" `
-Name UseLogonCredential -EA SilentlyContinue).UseLogonCredential
$results += [PSCustomObject]@{
Check="WDigest Desactive"; Pass=($wdigest -eq 0); Value=$wdigest}
# LLMNR desactive ?
$llmnr = (Get-ItemProperty "HKLM:\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows NT\\\\DNSClient" `
-Name EnableMulticast -EA SilentlyContinue).EnableMulticast
$results += [PSCustomObject]@{
Check="LLMNR Desactive"; Pass=($llmnr -eq 0); Value=$llmnr}
# Signature SMB requise ?
$signing = (Get-SmbServerConfiguration).RequireSecuritySignature
$results += [PSCustomObject]@{
Check="Signature SMB Requise"; Pass=$signing; Value=$signing}
# Journalisation ScriptBlock PowerShell ?
$pslog = (Get-ItemProperty `
"HKLM:\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\ScriptBlockLogging" `
-Name EnableScriptBlockLogging -EA SilentlyContinue).EnableScriptBlockLogging
$results += [PSCustomObject]@{
Check="Journalisation PS ScriptBlock"; Pass=($pslog -eq 1); Value=$pslog}
$results | Format-Table -AutoSize
$pass = ($results | Where-Object {$_.Pass}).Count
Write-Host "$pass / $($results.Count) verifications reussies" -ForegroundColor $(
if ($pass -eq $results.Count) {'Green'} else {'Red'})
}
Test-Hardening
3. Playbook de Durcissement Linux
# ==================================================
# PLAYBOOK DE DURCISSEMENT LINUX
# Base sur CIS Ubuntu 22.04 LTS Benchmark Niveau 1
# ==================================================
# -------------------------------------------------
# 1. PARAMETRES DU NOYAU
# -------------------------------------------------
cat >> /etc/sysctl.d/99-hardening.conf << 'EOF'
# Durcissement reseau
net.ipv4.ip_forward = 0 # Desactiver le routage IP (non-routeur)
net.ipv4.conf.all.send_redirects = 0 # Ne pas envoyer de redirections ICMP
net.ipv4.conf.all.accept_redirects = 0 # Ne pas accepter les redirections ICMP
net.ipv4.conf.all.accept_source_route = 0 # Desactiver le routage par la source
net.ipv4.conf.all.log_martians = 1 # Journaliser les paquets aux adresses impossibles
net.ipv4.conf.all.rp_filter = 1 # Activer le filtrage par chemin inverse
net.ipv4.tcp_syncookies = 1 # Protection contre les inondations SYN
net.ipv6.conf.all.disable_ipv6 = 1 # Desactiver IPv6 si non necessaire
# Protection memoire
kernel.randomize_va_space = 2 # ASLR complet
kernel.exec-shield = 1 # Application du bit NX
kernel.dmesg_restrict = 1 # Restreindre dmesg (empeche les fuites d'infos)
kernel.kptr_restrict = 2 # Masquer les pointeurs noyau
kernel.perf_event_paranoid = 3 # Restreindre les evenements perf
kernel.yama.ptrace_scope = 1 # Restreindre ptrace (bloque certaines injections)
# Systeme de fichiers
fs.suid_dumpable = 0 # Desactiver les core dumps SUID
fs.protected_hardlinks = 1 # Empecher les attaques par liens physiques
fs.protected_symlinks = 1 # Empecher les attaques par liens symboliques
EOF
sysctl -p /etc/sysctl.d/99-hardening.conf
# -------------------------------------------------
# 2. DURCISSEMENT DU SYSTEME DE FICHIERS
# -------------------------------------------------
# Options de montage -- restreindre l'execution dans les emplacements inscriptibles
cat >> /etc/fstab << 'EOF'
# Durcir les systemes de fichiers temporaires
tmpfs /tmp tmpfs defaults,nodev,nosuid,noexec 0 0
tmpfs /var/tmp tmpfs defaults,nodev,nosuid,noexec 0 0
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0
EOF
mount -o remount /tmp
mount -o remount /var/tmp
mount -o remount /dev/shm
# Trouver et corriger les fichiers et repertoires inscriptibles par tous
find / -not \\\\( -path /proc -prune \\\\) -not \\\\( -path /sys -prune \\\\) \\
-perm -o+w -type f 2>/dev/null | \\
while read file; do
chmod o-w "$file"
echo "Corrige : $file"
done
# -------------------------------------------------
# 3. DURCISSEMENT DES UTILISATEURS ET COMPTES
# -------------------------------------------------
# Politique de mot de passe (PAM)
cat > /etc/security/pwquality.conf << 'EOF'
minlen = 14 # Minimum 14 caracteres
minclass = 4 # Les quatre classes de caracteres requises
maxrepeat = 2 # Max 2 caracteres consecutifs identiques
maxclassrepeat = 4 # Max 4 caracteres consecutifs de la meme classe
lcredit = -1 # Requiert au moins 1 minuscule
ucredit = -1 # Requiert au moins 1 majuscule
dcredit = -1 # Requiert au moins 1 chiffre
ocredit = -1 # Requiert au moins 1 caractere special
EOF
# Expiration des mots de passe
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/' /etc/login.defs
# Restreindre su au groupe wheel
echo "auth required pam_wheel.so use_uid" >> /etc/pam.d/su
# Verrouiller les comptes inactifs
useradd -D -f 30 # Verrouiller les comptes apres 30 jours d'inactivite
# Supprimer les utilisateurs avec des mots de passe vides
awk -F: '($2 == "" ) { print $1 }' /etc/shadow | \\
while read user; do
echo "Verrouillage du compte avec mot de passe vide : $user"
passwd -l "$user"
done
# -------------------------------------------------
# 4. DURCISSEMENT SSH
# -------------------------------------------------
cat > /etc/ssh/sshd_config.d/hardening.conf << 'EOF'
# Protocole et chiffrement
Protocol 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
# Authentification
PermitRootLogin no # Pas de SSH root direct
PasswordAuthentication no # Cles uniquement
PermitEmptyPasswords no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
MaxAuthTries 3 # Max 3 tentatives d'auth par connexion
LoginGraceTime 30 # 30s pour s'authentifier
MaxSessions 4 # Max 4 sessions par connexion
# Session
ClientAliveInterval 300 # Keepalive de 5 minutes
ClientAliveCountMax 2 # Deconnecter apres 2 keepalives manques
TCPKeepAlive no # Utiliser le keepalive SSH plutot que TCP
Compression no # Desactiver la compression (problemes passes similaires a CRIME)
# Controle d'acces
AllowGroups ssh-users # Seuls les utilisateurs du groupe ssh-users peuvent se connecter
DenyUsers root administrator
# Desactiver les fonctionnalites dangereuses
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no # Pas de tunneling SSH (sauf si necessaire)
GatewayPorts no
PermitUserEnvironment no
# Journalisation
LogLevel VERBOSE # Journaliser l'empreinte des cles utilisees
SyslogFacility AUTH
EOF
# Regenerer les cles hote (supprimer DSA/ECDSA faibles, garder uniquement Ed25519 et RSA-4096)
rm /etc/ssh/ssh_host_*
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
systemctl restart sshd
# -------------------------------------------------
# 5. AUDITD -- JOURNALISATION COMPLETE
# -------------------------------------------------
cat > /etc/audit/rules.d/99-hardening.rules << 'EOF'
# Supprimer les regles existantes et definir les valeurs par defaut
-D
-b 8192 # Taille du tampon
--backlog_wait_time 60000
# Immutable (verrouiller les regles -- necessite un redemarrage pour modifier)
# Activer en dernier, apres que toutes les regles sont definies :
# -e 2
# Changements d'identite
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# Escalade de privileges
-a always,exit -F arch=b64 -S setuid -S setgid -F a0=0 -k privilege_esc
-a always,exit -F arch=b64 -S setresuid -S setresgid -k privilege_esc
# Execution de commandes root
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid!=0 -k root_cmd
-a always,exit -F arch=b32 -S execve -F euid=0 -F auid!=0 -k root_cmd
# Chargement de modules (detection de rootkits)
-w /sbin/insmod -p x -k module_load
-w /sbin/rmmod -p x -k module_load
-w /sbin/modprobe -p x -k module_load
-a always,exit -F arch=b64 -S init_module -S delete_module -k module_load
# Changements de configuration reseau
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k network_change
-w /etc/hosts -p wa -k network_change
-w /etc/network/ -p wa -k network_change
# Modifications cron (persistance)
-w /etc/cron.allow -p wa -k cron
-w /etc/cron.deny -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
# Modifications des cles SSH (persistance)
-w /root/.ssh -p wa -k ssh_keys
-a always,exit -F dir=/home -F name=.ssh -p wa -k ssh_keys
# Connexions sortantes (detecter C2)
-a always,exit -F arch=b64 -S connect -k outbound_conn
# Rendre les regles immuables (activer apres le chargement de toutes les regles)
-e 2
EOF
service auditd restart
auditctl -l | wc -l # Verifier que les regles sont chargees
4. Durcissement des Equipements Reseau et de l'Infrastructure
# -------------------------------------------------
# DURCISSEMENT CISCO IOS (reference -- non executable en bash)
# -------------------------------------------------
# Durcissement des services -- desactiver les services non utilises
# no service finger
# no service tcp-small-servers
# no service udp-small-servers
# no ip http server ! Desactiver la gestion HTTP
# no ip http secure-server ! Utiliser HTTPS uniquement si necessaire
# no cdp run ! Desactiver CDP (divulgation d'informations)
# no ip source-route
# AAA -- authentification centralisee
# aaa new-model
# aaa authentication login default group tacacs+ local
# aaa authorization exec default group tacacs+ local
# aaa accounting exec default start-stop group tacacs+
# Durcissement des lignes console et VTY
# line console 0
# exec-timeout 5 0 ! Delai d'inactivite de 5 minutes
# logging synchronous
# line vty 0 4
# transport input ssh ! SSH uniquement, pas de Telnet
# exec-timeout 10 0
# access-class 10 in ! Restreindre par ACL 10
# SSH version 2 uniquement
# ip ssh version 2
# ip ssh time-out 30
# ip ssh authentication-retries 3
# -------------------------------------------------
# VALIDATION DU DURCISSEMENT RESEAU
# -------------------------------------------------
# Tester depuis l'exterieur -- verifier les services exposes
nmap -sV -p- --open VOTRE_IP_PERIMETRIQUE \\
--script=banner \\
-oG /tmp/perimeter_scan.txt
# Verifier les identifiants par defaut sur les services decouverts
nmap -sV VOTRE_IP_PERIMETRIQUE \\
--script default,auth \\
-p 22,23,80,443,161,8080,8443
# Tester les communautes SNMP
onesixtyone -c /usr/share/doc/onesixtyone/dict.txt \\
VOTRE_PLAGE_RESEAU # Forcer les communautes SNMP par force brute
# Verifier la configuration TLS de tous les endpoints HTTPS
testssl.sh --severity HIGH \\
--parallel \\
--csv /tmp/tls_results.csv \\
https://VOTRE_SERVEUR_WEB
# Verifie : versions de protocole, suites de chiffrement, validite des certificats,
# HSTS, HPKP, confidentialite persistante
5. Cadres de Conformite - NIST, CIS, SOC 2 et PCI-DSS
Comparaison des Cadres
| Cadre | Perimetre | Obligatoire ? | Axe principal | Evaluation |
|---|---|---|---|---|
| NIST CSF | Toute organisation | Non (volontaire) | Cycle de gestion des risques | Auto-evaluation |
| NIST SP 800-53 | Agences federales US | Oui (FedRAMP) | 20 familles de controles, 1000+ controles | Evaluation par tierce partie |
| CIS Controls v8 | Toute organisation | Non | 18 groupes de controles priorises | Auto/tierce partie |
| SOC 2 Type II | Fournisseurs SaaS/cloud | Non (a la demande client) | Criteres de services de confiance (securite, disponibilite, confidentialite) | Auditeur externe |
| PCI-DSS v4.0 | Gestionnaires de donnees de carte | Oui (contractuel) | 12 exigences pour la protection des donnees de carte | Evaluation QSA |
| ISO 27001 | Toute organisation | Non | SMSI (systeme de management de la securite de l'information) | Organisme de certification |
| HIPAA | Sante aux Etats-Unis | Oui (loi) | Protection des PHI | Enquete HHS/OCR |
PCI-DSS - Cartographie des Controles Techniques
PCI-DSS v4.0 comporte 12 exigences. Les exigences techniques correspondent directement aux controles couverts dans ce cours :
Req 1 : Installer et maintenir des controles de securite reseau
-> Chapitre 4.1 : Architecture pare-feu, segmentation, conception DMZ
Req 2 : Appliquer des configurations securisees
-> Chapitre 4.4 : Benchmarks CIS, playbooks de durcissement
Req 3 : Proteger les donnees de compte stockees
-> Chiffrement au repos, gestion des cles, masquage des donnees
Req 4 : Proteger les donnees de titulaires de carte en transit
-> Chapitre 2.4 : Inspection TLS, application des suites de chiffrement
Req 5 : Proteger contre les logiciels malveillants
-> Deploiement EDR, liste blanche d'applications (ce chapitre)
Req 6 : Developper et maintenir des systemes securises
-> Gestion des vulnerabilites (ce chapitre), securite SDLC
Req 7 : Restreindre l'acces selon le besoin metier
-> Moindre privilege, PAM, Chapitre 4.1 Zero Trust
Req 8 : Identifier les utilisateurs et authentifier les acces
-> MFA, Chapitre 1.4 Protocoles d'Authentification
Req 9 : Restreindre l'acces physique
-> Securite physique (hors perimetre pour ce cours reseau)
Req 10 : Journaliser et surveiller tous les acces
-> Chapitre 4.2 : SIEM, journalisation d'audit, retention des journaux
Req 11 : Tester la securite regulierement
-> Chapitre 4.4 : Tests d'intrusion, scan de vulnerabilites
Req 12 : Soutenir la securite de l'information avec des politiques organisationnelles
-> Politiques, procedures, formation
# PCI-DSS Req 11.3 -- Test d'intrusion interne (requis annuellement)
# Documenter le perimetre du test, la methodologie et les resultats
cat > /tmp/pentest_scope.txt << 'EOF'
Perimetre du Test d'Intrusion PCI-DSS
======================================
Perimetre : Environnement des Donnees de Titulaires de Carte (CDE) et tous les systemes
avec connectivite vers le CDE
Systemes dans le perimetre :
- Serveurs de traitement des paiements : 10.50.1.0/24
- Serveurs de bases de donnees : 10.50.2.0/24
- Application web : https://payments.corp.com
- Controles de segmentation reseau (pare-feu separant le CDE des autres reseaux)
Methodologie : PTES (Penetration Testing Execution Standard)
+ Guide de test OWASP pour les applications web
Tests requis :
- Couche reseau : scan de ports, enumeration des services, tentatives d'exploitation
- Couche applicative : evaluation OWASP Top 10
- Test de segmentation : verifier que le CDE n'est pas accessible depuis les reseaux hors perimetre
- Ingenierie sociale : simulation de hameconnage ciblant l'equipe de paiement
Frequence : Annuellement (minimum) ; apres des changements d'infrastructure significatifs
EOF
NIST CSF - Evaluation de Maturite
#!/usr/bin/env python3
# nist_csf_assessment.py -- evaluer la maturite par rapport aux fonctions NIST CSF 2.0
csf_functions = {
"GOUVERNER": {
"description": "Contexte organisationnel, strategie de gestion des risques, politiques",
"controls": [
("GV.OC-01", "Mission organisationnelle comprise et communiquee", False),
("GV.RM-01", "Politique de gestion des risques existante et approuvee", False),
("GV.PO-01", "Politique de cybersecurite existante et communiquee", False),
]
},
"IDENTIFIER": {
"description": "Gestion des actifs, evaluation des risques, amelioration",
"controls": [
("ID.AM-01", "Actifs materiels inventories", False),
("ID.AM-02", "Actifs logiciels inventories", False),
("ID.RA-01", "Vulnerabilites identifiees et documentees", False),
("ID.RA-05", "Menaces et vulnerabilites priorisees par risque", False),
]
},
"PROTEGER": {
"description": "Gestion des identites, controle d'acces, securite des donnees, durcissement",
"controls": [
("PR.AA-01", "Identites gerees pour les utilisateurs/services autorises", False),
("PR.AA-05", "Permissions d'acces appliquees selon le moindre privilege", False),
("PR.DS-01", "Donnees au repos protegees", False),
("PR.DS-02", "Donnees en transit protegees", False),
("PR.IR-01", "Reseaux segmentes", False),
]
},
"DETECTER": {
"description": "Surveillance continue, analyse des evenements adverses",
"controls": [
("DE.CM-01", "Reseaux surveilles pour les evenements adverses", False),
("DE.CM-03", "Activite du personnel surveillee pour les anomalies", False),
("DE.AE-02", "Evenements potentiellement adverses analyses", False),
("DE.AE-06", "Informations sur les evenements adverses fournies au personnel autorise", False),
]
},
"REPONDRE": {
"description": "Gestion des incidents, analyse, attenuation, communication",
"controls": [
("RS.MA-01", "Incidents investigues selon le plan IR", False),
("RS.MA-02", "Incidents tries et valides", False),
("RS.MI-01", "Incidents contenus", False),
("RS.CO-02", "Incidents signales conformement aux exigences legales/reglementaires", False),
]
},
"RECUPERER": {
"description": "Recuperation apres incident, communication, ameliorations",
"controls": [
("RC.RP-01", "Plan de recuperation execute pendant/apres les incidents", False),
("RC.CO-03", "Activites de recuperation communiquees aux parties prenantes", False),
]
}
}
# Evaluer votre organisation (definir True pour les controles implementes)
# Exemple : definir en fonction de l'evaluation reelle
csf_functions["PROTEGER"]["controls"][0] = ("PR.AA-01", "Identites gerees", True)
csf_functions["DETECTER"]["controls"][0] = ("DE.CM-01", "Reseaux surveilles", True)
total = sum(len(v["controls"]) for v in csf_functions.values())
implemented = sum(
sum(1 for c in v["controls"] if c[2])
for v in csf_functions.values()
)
print(f"\\nEvaluation de Maturite NIST CSF 2.0")
print(f"{'='*50}")
for func, data in csf_functions.items():
func_total = len(data["controls"])
func_impl = sum(1 for c in data["controls"] if c[2])
pct = (func_impl/func_total)*100
bar = "#" * int(pct/10) + "." * (10-int(pct/10))
print(f"\\n{func} -- {data['description']}")
print(f" [{bar}] {func_impl}/{func_total} ({pct:.0f}%)")
for ctrl_id, ctrl_name, impl in data["controls"]:
status = "[OK]" if impl else "[--]"
print(f" {status} {ctrl_id}: {ctrl_name}")
print(f"\\n{'='*50}")
print(f"Global : {implemented}/{total} ({implemented/total*100:.0f}%)")
6. Gestion des Vulnerabilites - Balayage, Priorisation et Remediation
Scan de Vulnerabilites avec OpenVAS/Nessus
# OpenVAS (scanner de vulnerabilites open-source)
# Installer via Greenbone Community Edition
apt install gvm
gvm-setup # Configuration initiale et telechargement des flux
# Demarrer les services
gvm-start
# Acceder a l'interface web : https://localhost:9392
# Scan en ligne de commande
gvm-cli --gmp-username admin --gmp-password PASSWORD \\
socket --xml \\
"<create_target><name>Scan Interne</name><hosts>10.0.0.0/24</hosts></create_target>"
# CLI Nessus (commercial -- le plus utilise)
# /opt/nessus/sbin/nessuscli scan --policy "Basic Network Scan" \\
# --targets "10.0.0.0/24" --output /tmp/scan_results.nessus
# Analyser les resultats Nessus pour les constatations critiques/eleves
python3 << 'EOF'
import xml.etree.ElementTree as ET
tree = ET.parse('/tmp/scan_results.nessus')
root = tree.getroot()
findings = []
for report_host in root.findall('.//ReportHost'):
hostname = report_host.get('name')
for item in report_host.findall('ReportItem'):
severity = int(item.get('severity', 0))
if severity >= 3: # Critique (4) ou Eleve (3)
findings.append({
'host': hostname,
'severity': ['Info','Faible','Moyen','Eleve','Critique'][severity],
'plugin': item.get('pluginName'),
'cve': item.findtext('cve', 'N/A'),
'cvss': item.findtext('cvss3_base_score', '0'),
'solution': item.findtext('solution', '')[:100],
})
findings.sort(key=lambda x: float(x['cvss'] or 0), reverse=True)
for f in findings[:20]:
print(f"[{f['severity']:8}] CVSS:{f['cvss']:4} | {f['host']:20} | "
f"{f['plugin'][:50]} | CVE: {f['cve']}")
EOF
Priorisation Basee sur CVSS avec EPSS
Tous les CVE ne sont pas egaux. Le score CVSS seul est un signal de priorisation mediocre - de nombreuses vulnerabilites a CVSS critique ne sont jamais exploitees dans la realite. EPSS (Exploit Prediction Scoring System) fournit une probabilite d'exploitation, ameliorant considerablement la priorisation :
#!/usr/bin/env python3
# vuln_prioritize.py -- prioriser les vulnerabilites en utilisant CVSS + EPSS + contexte
import requests
import json
def get_epss_scores(cve_list):
"""Recuperer les scores EPSS depuis l'API FIRST.org"""
cves = ",".join(cve_list)
resp = requests.get(
f"https://api.first.org/data/1.0/epss?cve={cves}",
timeout=10
)
scores = {}
for item in resp.json().get('data', []):
scores[item['cve']] = {
'epss': float(item['epss']), # Probabilite d'exploitation (0-1)
'percentile': float(item['percentile'])
}
return scores
def prioritize_vulns(vulnerabilities):
"""
Score de priorite :
Score de base CVSS (40%) + probabilite EPSS (40%) + multiplicateurs de contexte (20%)
Contexte : expose sur Internet, systeme privilegie, donnees IIP
"""
cve_ids = [v['cve'] for v in vulnerabilities if v.get('cve')]
epss = get_epss_scores(cve_ids)
for vuln in vulnerabilities:
cve = vuln.get('cve', '')
cvss = float(vuln.get('cvss', 0))
epss_score = epss.get(cve, {}).get('epss', 0.0)
# Multiplicateurs de contexte
context_mult = 1.0
if vuln.get('internet_facing'): context_mult *= 1.5
if vuln.get('privileged_system'): context_mult *= 1.3
if vuln.get('pii_data'): context_mult *= 1.4
priority = ((cvss/10 * 0.4) + (epss_score * 0.4)) * context_mult * 100
vuln['priority_score'] = round(priority, 1)
vuln['epss'] = epss_score
return sorted(vulnerabilities, key=lambda x: x['priority_score'], reverse=True)
# Exemple d'utilisation
vulns = [
{'cve':'CVE-2021-44228', 'cvss': 10.0, 'host':'webserver01',
'internet_facing': True, 'pii_data': True, 'privileged_system': False},
{'cve':'CVE-2017-0144', 'cvss': 9.3, 'host':'fileserver02',
'internet_facing': False, 'pii_data': False, 'privileged_system': True},
{'cve':'CVE-2022-1292', 'cvss': 9.8, 'host':'vpn01',
'internet_facing': True, 'pii_data': False, 'privileged_system': False},
]
results = prioritize_vulns(vulns)
for v in results:
print(f"Priorite: {v['priority_score']:5.1f} | EPSS: {v['epss']:.3f} | "
f"CVSS: {v['cvss']} | {v['cve']} sur {v['host']}")
7. Operations Red Team - Planification, Regles d'Engagement et Rapport
Red Team vs Test d'Intrusion
| Dimension | Test d'Intrusion | Operation Red Team |
|---|---|---|
| Objectif | Trouver toutes les vulnerabilites | Simuler un adversaire specifique, tester la detection |
| Perimetre | Liste definie de systemes | Oriente objectifs (ex. "atteindre le controleur de domaine") |
| Duree | Jours a semaines | Semaines a mois |
| Furtivite | Non requise | Exigence explicite |
| Notification | Equipe IT notifiee | Blue team NON notifiee (teste la detection reelle) |
| Resultat | Liste de vulnerabilites + remediation | Narration de l'attaquant, lacunes de detection, TTPs utilises |
| Cout | Plus faible | Plus eleve |
Document de Regles d'Engagement
# RED TEAM ENGAGEMENT -- REGLES D'ENGAGEMENT
## Mission : Red Team Corp 2024-Q1
## Client : Target Corporation
## Dates : 2024-01-15 au 2024-02-15
### AUTORISATION
Ce document autorise [Firme Red Team] a mener des activites de simulation d'adversaire
contre l'infrastructure de [Target Corporation].
Autorise par : [Nom RSSI, Titre, Signature]
Revue par le conseil juridique : [Date]
### PERIMETRE
**Dans le perimetre :**
- Plages IP externes : [LISTE]
- Reseau interne (apres acces initial) : 10.0.0.0/8
- Domaine Active Directory : corp.local
- Applications web : [LISTE DES URLs]
**Explicitement Hors Perimetre (NE PAS TESTER) :**
- Systemes de traitement des paiements en production : 10.50.0.0/24
- Systemes hospitaliers/medicaux : 10.60.0.0/24
- Appareils personnels des employes
- Locaux physiques (pas de test physique autorise)
- Attaques par deni de service de quelque nature que ce soit
### OBJECTIFS (CLASSES PAR PRIORITE)
1. Obtenir des identifiants Administrateur de domaine
2. Acceder aux systemes de reporting financier
3. Exfiltrer un document exemple du partage Finance
4. Maintenir une persistance pendant 72 heures sans detection
### CONTRAINTES
- Pas d'actions destructives (pas de simulation de ransomware, pas de suppression de donnees)
- Pas d'ingenierie sociale envers le personnel non-IT
- Pas d'exploitation de systemes tiers (fournisseurs cloud, SaaS)
- Toute l'infrastructure de l'attaquant doit etre decommissionnee dans les 48h suivant la fin de l'engagement
### CONTACT D'URGENCE
Si une vulnerabilite vraiment critique est trouvee posant un risque immediat,
suspendre l'engagement et notifier :
- Principal : [RSSI] [telephone]
- Secondaire : [Directeur IT] [telephone]
- Phrase de deconfliction : "DRAGONSFIRE"
### GESTION DES DONNEES
Toutes les donnees client accessibles pendant les tests doivent etre :
- Documentees (nom de fichier, emplacement, horodatage)
- Non exfiltrees vers l'infrastructure du red team
- Signalees dans les constatations avec des preuves en capture d'ecran uniquement
Structure du Rapport Red Team
# RAPPORT D'EVALUATION RED TEAM
## Resume Executif (1 page -- pour la direction)
- Dates de l'engagement, resume du perimetre
- Objectifs atteints (ex. "Administrateur de domaine obtenu en 8 heures")
- Evaluation du risque critique avec impact metier
- Top 3 des recommandations
## Narration de l'Attaque (pour l'equipe IR/Securite)
### Acces Initial
- Technique : Hameconnage cible (T1566.001)
- Cible : helpdesk@corp.com
- Resultat : Shell Meterpreter en tant que helpdesk01\\\\jsmith
- Heure : Jour 1, 14:32 EST
### Escalade de Privileges
- Technique : Kerberoasting (T1558.003)
- SPN decouvert : MSSQLSvc/dbserver01:1433 (compte svc-mssql)
- Craque en : 4 heures (mot de passe : "Welcome1!")
- Pivot vers : Serveur DB avec les identifiants svc-mssql
[Continuer pour chaque phase...]
## Constatations Techniques (detaillees)
### Constatation 001 : Hameconnage Conduisant a l'Execution de Code
**Severite :** Critique
**MITRE ATT&CK :** T1566.001, T1059.001
**Preuve :** [capture d'ecran]
**Etapes de reproduction :** [detaillees]
**Remediation :** Formation a la sensibilisation a la securite + controles de passerelle email
## Lacunes de Detection
- Acces initial : Non detecte (email de hameconnage a bypasse la passerelle)
- Kerberoasting : Detecte via l'Evenement 4769 mais alerte non traitee pendant 6 heures
- DCSync : Non detecte (politique d'audit Evenement 4662 non configuree sur le DC)
## Recommandations (priorisees par risque)
1. Appliquer MFA sur tous les acces distants -- bloque le vecteur d'acces initial
2. Configurer la politique d'audit Evenement 4662 sur les DC -- active la detection DCSync
3. Implementer gMSA pour svc-mssql -- contrarie le Kerberoasting
8. Validation des Detections Blue Team et Exercices Purple Team
Cadre d'Exercice Purple Team
Les exercices Purple Team combinent les conclusions du red team avec les detections du blue team - plutot qu'une simulation d'adversaire couverte, les deux equipes travaillent ensemble pour valider et ameliorer les detections en temps reel.
# Workflow d'exercice Purple Team :
# 1. Le red team annonce : "Je vais executer la technique T1003.001 (dump LSASS)"
# 2. Le blue team confirme : "Nous avons une detection pour ca -- surveillance du SIEM"
# 3. Le red team execute la technique
# 4. Les deux equipes evaluent : la detection s'est-elle declenchee ? Etait-elle precise ?
# 5. Si la detection a rate : analyse des causes racines + amelioration de la regle
# 6. Si la detection s'est declenchee : valider la precision, verifier le potentiel de faux positif
# Atomic Red Team -- tests granulaires de TTP
# Installer
Install-Module -Name invoke-atomicredteam -Scope CurrentUser -Force
Import-Module invoke-atomicredteam
# Executer des tests ATT&CK specifiques et valider la detection
$tests = @(
@{Technique="T1003.001"; Name="Dump Memoire LSASS"},
@{Technique="T1059.001"; Name="Commande Encodee PowerShell"},
@{Technique="T1547.001"; Name="Persistance via Cle de Registre Run"},
@{Technique="T1053.005"; Name="Creation de Tache Planifiee"},
@{Technique="T1558.003"; Name="Kerberoasting"}
)
foreach ($test in $tests) {
Write-Host "`n[*] Test : $($test.Name) ($($test.Technique))"
Write-Host " Notifier le blue team : surveillance de $($test.Technique)"
Read-Host " Appuyer sur Entree quand le blue team est pret"
# Executer le test
Invoke-AtomicTest $test.Technique -TestNumbers 1 -Confirm:$false
Write-Host " Test execute a $(Get-Date -Format 'HH:mm:ss')"
$detected = Read-Host " L'alerte s'est-elle declenchee dans le SIEM ? (O/N)"
if ($detected -eq "O") {
Write-Host " [DETECTE]" -ForegroundColor Green
} else {
Write-Host " [RATE] - investigation requise" -ForegroundColor Red
}
# Nettoyage
Invoke-AtomicTest $test.Technique -TestNumbers 1 -Cleanup -Confirm:$false
Start-Sleep 5
}
Analyse des Lacunes de Detection depuis les Constatations Red Team
#!/usr/bin/env python3
# gap_analysis.py -- cartographier les constatations red team a la couverture de detection
red_team_findings = [
{"technique": "T1566.001", "name": "Hameconnage cible",
"detected": False, "detection_time_minutes": None},
{"technique": "T1059.001", "name": "Cradle PowerShell",
"detected": True, "detection_time_minutes": 180}, # 3 heures -- trop lent
{"technique": "T1558.003", "name": "Kerberoasting",
"detected": True, "detection_time_minutes": 360}, # 6 heures -- inacceptable
{"technique": "T1003.006", "name": "DCSync",
"detected": False, "detection_time_minutes": None},
{"technique": "T1021.002", "name": "Mouvement lateral SMB",
"detected": False, "detection_time_minutes": None},
{"technique": "T1547.001", "name": "Persistance par registre",
"detected": False, "detection_time_minutes": None},
]
print("CONSTATATIONS RED TEAM -- ANALYSE DES LACUNES DE DETECTION")
print("="*65)
detected = [f for f in red_team_findings if f["detected"]]
not_detected = [f for f in red_team_findings if not f["detected"]]
print(f"\\n[DETECTE] ({len(detected)}/{len(red_team_findings)}) :")
for f in detected:
t = f["detection_time_minutes"]
sla = "[OK] Dans les SLA" if t and t <= 60 else f"[WARN] {t}min (depasse le SLA de 60min)"
print(f" {f['technique']} {f['name']:30} -> {sla}")
print(f"\\n[RATE] ({len(not_detected)}/{len(red_team_findings)}) :")
for f in not_detected:
print(f" {f['technique']} {f['name']:30} -> LACUNE DE COUVERTURE -- regle requise")
detection_rate = len(detected) / len(red_team_findings) * 100
print(f"\\nTaux de Detection : {detection_rate:.0f}%")
print(f"Temps Moyen de Detection (detecte uniquement) : "
f"{sum(f['detection_time_minutes'] for f in detected if f['detection_time_minutes']) / max(len(detected),1):.0f} minutes")
9. Metriques de Securite et Amelioration Continue
Metriques de Securite Cles
#!/usr/bin/env python3
# security_metrics.py -- calculer et suivre les KPI de securite operationnelle
from datetime import datetime, timedelta
import statistics
# Ces donnees seraient extraites du SIEM/ticketing en production
sample_data = {
# Temps Moyen de Detection (MTTD) -- jours de la violation a la detection
"mttd_days": [1, 3, 0.5, 7, 2, 1, 0.25, 4],
# Temps Moyen de Reponse (MTTR) -- heures de la detection au confinement
"mttr_hours": [2, 8, 1, 24, 4, 2, 0.5, 12],
# Conformite SLA des correctifs -- % de vulnerabilites critiques corrigees dans les SLA (30 jours)
"patch_sla": [True, True, False, True, True, False, True, True, True, True],
# Ratio alerte-vers-actionnable -- % d'alertes devenant des investigations
"alert_dispositions": ["TP","FP","FP","TP","FP","FP","FP","TP","FP","FP",
"TP","FP","TP","FP","FP","FP","FP","TP","FP","FP"],
# Taux de clic simulation de hameconnage
"phishing_clicked": [True,False,False,True,False,False,False,True,False,False,
False,False,True,False,False,False,False,False,False,False],
}
print("TABLEAU DE BORD DES METRIQUES DES OPERATIONS DE SECURITE")
print("="*55)
mttd = sample_data["mttd_days"]
print(f"\\nTemps Moyen de Detection (MTTD)")
print(f" Moyenne : {statistics.mean(mttd):.1f} jours")
print(f" Mediane : {statistics.median(mttd):.1f} jours")
print(f" Cible : < 1 jour {'[OK]' if statistics.mean(mttd) < 1 else '[ECHEC]'}")
mttr = sample_data["mttr_hours"]
print(f"\\nTemps Moyen de Reponse (MTTR)")
print(f" Moyenne : {statistics.mean(mttr):.1f} heures")
print(f" Mediane : {statistics.median(mttr):.1f} heures")
print(f" Cible : < 4 heures {'[OK]' if statistics.mean(mttr) < 4 else '[ECHEC]'}")
patch = sample_data["patch_sla"]
patch_rate = sum(patch)/len(patch)*100
print(f"\\nConformite SLA des Correctifs (Critique, 30 jours)")
print(f" Taux : {patch_rate:.0f}%")
print(f" Cible : > 95% {'[OK]' if patch_rate > 95 else '[ECHEC]'}")
disp = sample_data["alert_dispositions"]
tp_rate = disp.count("TP")/len(disp)*100
print(f"\\nFidelite des Alertes (Taux de Vrais Positifs)")
print(f" Taux TP : {tp_rate:.0f}%")
print(f" Taux FP : {100-tp_rate:.0f}%")
print(f" Cible : > 20% TP {'[OK]' if tp_rate > 20 else '[ECHEC]'}")
phish = sample_data["phishing_clicked"]
click_rate = sum(phish)/len(phish)*100
print(f"\\nTaux de Clic Simulation de Hameconnage")
print(f" Taux : {click_rate:.0f}%")
print(f" Cible : < 5% {'[OK]' if click_rate < 5 else '[ECHEC]'}")
10. Cartographie MITRE ATT&CK et Resume du Cours
Couverture ATT&CK Complete du Cours
Ce cours a couvert la detection et/ou l'exploitation des techniques ATT&CK suivantes dans les 16 chapitres :
| Tactique | Techniques Cles Couvertes | Chapitre Principal |
|---|---|---|
| Reconnaissance | T1595, T1590, T1596, T1593 | 3.1 |
| Acces Initial | T1190, T1566, T1078, T1465 | 3.2, 3.4 |
| Execution | T1059, T1047, T1053, T1204 | 3.2, 3.3 |
| Persistance | T1547, T1543, T1546, T1053 | 3.2, 3.3, 4.3 |
| Escalade de Privileges | T1548, T1068, T1134 | 3.2, 3.3 |
| Evasion Defensive | T1070, T1027, T1218, T1562 | 3.2, 4.3 |
| Acces aux Identifiants | T1003, T1558, T1040, T1552 | 2.4, 3.3, 4.3 |
| Decouverte | T1046, T1082, T1590 | 3.1 |
| Mouvement Lateral | T1021, T1550, T1557 | 3.3 |
| Collecte | T1114, T1041, T1560 | 3.3, 4.3 |
| C2 | T1071, T1573, T1090, T1095 | 2.4, 3.2 |
| Exfiltration | T1041, T1048, T1052 | 2.4, 3.4 |
| Impact | T1485, T1486, T1489 | 4.3 (recuperation) |
Completion du Cours - Points Cles a Retenir
Chaque chapitre de ce cours a ete redige autour d'un principe unificateur :
Vous ne pouvez pas defendre ce que vous ne comprenez pas, et vous ne pouvez pas comprendre ce que vous n'avez pas vu des deux cotes.
Les chapitres offensifs (Module 3) n'etaient pas la pour enseigner les attaques - ils etaient la pour donner aux defenseurs le modele mental d'un attaquant. Quand vous comprenez que le Kerberoasting necessite des requetes TGS chiffrees RC4, vous savez exactement quel champ de l'Evenement 4769 filtrer. Quand vous comprenez comment fonctionne l'empoisonnement LLMNR, vous savez pourquoi la desactivation de LLMNR est un controle du premier jour plutot qu'une mesure de durcissement avancee.
Les chapitres defensifs (Module 4) traduisent cette comprehension en controles durables : architecture pare-feu qui empeche structurellement le mouvement lateral, regles de detection qui se declenchent sur le comportement de l'attaquant plutot que sur les signatures, playbooks IR qui sequencent correctement la collecte de preuves, et bases de durcissement qui suppriment la surface d'attaque avant qu'elle puisse etre exploitee.
La securite n'est pas un produit - c'est un processus continu de comprehension de la menace, de reduction de la surface d'attaque, de detection de ce qui passe a travers, et d'amelioration apres chaque test et chaque incident.
Fin du Chapitre 4.4 - Playbooks de Durcissement, Conformite et Exercices Red/Blue Team
Fin du Module 4 - Ingenierie Defensive et Durcissement
Cours Complet
Securite Reseau - Les 16 Chapitres
Module 1 : Fondamentaux et Paysage des Menaces
- 1.1 Architecture Reseau et Surfaces d'Attaque
- 1.2 Renseignement sur les Menaces et Taxonomie des Attaques
- 1.3 Cryptographie dans la Securite Reseau
- 1.4 Protocoles d'Authentification et Attaques sur les Identites
Module 2 : Analyse du Trafic et Detection des Intrusions
- 2.1 Analyse de Paquets et Dissection de Protocoles
- 2.2 IDS/IPS - Signatures, Detection d'Anomalies et Evasion
- 2.3 Forensique Reseau et Analyse des Journaux
- 2.4 Analyse du Trafic Chiffre et Inspection TLS
Module 3 : Securite Offensive et Exploitation
- 3.1 Reconnaissance, Balayage et Enumeration
- 3.2 Techniques d'Exploitation - De la Couche Reseau a la Couche Application
- 3.3 Homme du Milieu, Usurpation et Mouvement Lateral
- 3.4 Techniques d'Attaque Wireless et VPN
Module 4 : Ingenierie Defensive et Durcissement
- 4.1 Architecture Pare-feu, Segmentation et Zero Trust
- 4.2 SIEM, SOAR et Ingenierie de Detection
- 4.3 Reponse aux Incidents et Forensique Numerique
- 4.4 Playbooks de Durcissement, Conformite et Exercices Red/Blue Team