# AWS - GuardDuty Enum

{{#include ../../../../banners/hacktricks-training.md}}

## GuardDuty

Selon les [**docs**](https://aws.amazon.com/guardduty/features/) : GuardDuty combine **l'apprentissage automatique, la détection d'anomalies, la surveillance du réseau et la découverte de fichiers malveillants**, en utilisant à la fois AWS et des sources tierces de premier plan pour aider à protéger les charges de travail et les données sur AWS. GuardDuty est capable d'analyser des dizaines de milliards d'événements à travers plusieurs sources de données AWS, telles que les journaux d'événements AWS CloudTrail, les journaux de flux Amazon Virtual Private Cloud (VPC), les journaux d'audit et de système d'Amazon Elastic Kubernetes Service (EKS), et les journaux de requêtes DNS.

Amazon GuardDuty **identifie les activités inhabituelles au sein de vos comptes**, analyse la **pertinence de la sécurité** de l'activité et fournit le **contexte** dans lequel elle a été invoquée. Cela permet à un intervenant de déterminer s'il doit consacrer du temps à une enquête plus approfondie.

Les alertes **apparaissent dans la console GuardDuty (90 jours)** et dans les événements CloudWatch.

> [!WARNING]
> Lorsqu'un utilisateur **désactive GuardDuty**, il cessera de surveiller votre environnement AWS et ne générera aucune nouvelle découverte, et les **découvertes existantes seront perdues**.\
> Si vous l'arrêtez simplement, les découvertes existantes resteront.

### Exemples de Découvertes

- **Reconnaissance** : Activité suggérant une reconnaissance par un attaquant, telle que **une activité API inhabituelle**, des tentatives de **connexion** à une base de données suspectes, un **scan de port** intra-VPC, des modèles de requêtes de connexion échouées inhabituels, ou un sondage de port non bloqué à partir d'une IP connue comme malveillante.
- **Compromission d'instance** : Activité indiquant une compromission d'instance, telle que **minage de cryptomonnaie, activité de commande et de contrôle (C\&C)** par porte dérobée, malware utilisant des algorithmes de génération de domaine (DGA), activité de déni de service sortant, volume de trafic **réseau** anormalement **élevé**, protocoles réseau inhabituels, communication d'instance sortante avec une IP malveillante connue, et des identifiants Amazon EC2 temporaires utilisés par une adresse IP externe, ainsi que l'exfiltration de données utilisant DNS.
- **Compromission de compte** : Les modèles courants indicatifs de compromission de compte incluent des appels API provenant d'une géolocalisation inhabituelle ou d'un proxy anonymisant, des tentatives de désactiver la journalisation AWS CloudTrail, des changements qui affaiblissent la politique de mot de passe du compte, des lancements d'instances ou d'infrastructures inhabituels, des déploiements d'infrastructure dans une région inhabituelle, le vol d'identifiants, une activité de connexion à la base de données suspecte, et des appels API provenant d'adresses IP malveillantes connues.
- **Compromission de bucket** : Activité indiquant une compromission de bucket, telle que des modèles d'accès aux données suspects indiquant un usage abusif des identifiants, une activité API Amazon S3 inhabituelle provenant d'un hôte distant, un accès S3 non autorisé à partir d'adresses IP malveillantes connues, et des appels API pour récupérer des données dans des buckets S3 d'un utilisateur sans historique préalable d'accès au bucket ou invoqués depuis un emplacement inhabituel. Amazon GuardDuty surveille et analyse en continu les événements de données S3 d'AWS CloudTrail (par exemple, GetObject, ListObjects, DeleteObject) pour détecter des activités suspectes à travers tous vos buckets Amazon S3.

<details>

<summary>Informations sur les Découvertes</summary>

Résumé des découvertes :

- Type de découverte
- Gravité : 7-8.9 Élevé, 4-6.9 Moyen, 01-3.9 Faible
- Région
- ID de compte
- ID de ressource
- Heure de détection
- Quelle liste de menaces a été utilisée

Le corps contient ces informations :

- Ressource affectée
- Action
- Acteur : Adresse IP, port et domaine
- Informations supplémentaires

</details>

### Toutes les Découvertes

Accédez à une liste de toutes les découvertes GuardDuty sur : [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html)

### Comptes Multiples

#### Par Invitation

Vous pouvez **inviter d'autres comptes** à un compte AWS GuardDuty différent afin que **chaque compte soit surveillé depuis le même GuardDuty**. Le compte principal doit inviter les comptes membres et ensuite le représentant du compte membre doit accepter l'invitation.

#### Via Organisation

Vous pouvez désigner n'importe quel compte au sein de l'organisation comme **administrateur délégué GuardDuty**. Seul le compte de gestion de l'organisation peut désigner un administrateur délégué.

Un compte désigné comme administrateur délégué devient un compte administrateur GuardDuty, a GuardDuty activé automatiquement dans la région AWS désignée, et a également **le droit d'activer et de gérer GuardDuty pour tous les comptes de l'organisation dans cette région**. Les autres comptes de l'organisation peuvent être visualisés et ajoutés en tant que comptes membres GuardDuty associés à ce compte administrateur délégué.

## Énumération
```bash
# Get Org config
aws guardduty list-organization-admin-accounts #Get Delegated Administrator
aws guardduty describe-organization-configuration --detector-id <id>

# Check external invitations
aws guardduty list-invitations
aws guardduty get-invitations-count

# Detector Information
aws guardduty list-detectors # 1 detector per account with GuardDuty
aws guardduty get-detector --detector-id <id> # Get detector info
aws guardduty get-master-account --detector-id <id>

# Get filters
aws guardduty list-filters --detector-id <id> # Check filters
aws guardduty get-filter --detector-id <id> --filter-name <name>

# Findings
aws guardduty list-findings --detector-id <id> # List findings
aws guardduty get-findings --detector-id <id> --finding-ids <id> # Get details about the finding
aws guardduty get-findings-statistics --detector-id <id> --finding-statistic-types <types>

# Get trusted IP addresses
aws guardduty list-ip-sets --detector-id <id>
aws guardduty get-ip-set --detector-id <id>

# Member accounts of the current AWS GuardDuty master account
aws guardduty list-members --detector-id <id>
aws guardduty get-members --detector-id <id> --account-ids <id>
aws guardduty get-member-detectors --detector-id <id> --account-ids <id>

# Continuously export its findings to an Amazon S3 bucket
aws guardduty list-publishing-destinations --detector-id <id>

# Intelligence sets that you have uploaded to GuardDuty
aws guardduty list-threat-intel-sets --detector-id <id>
aws guardduty get-threat-intel-set --detector-id <id> --threat-intel-set-id <id>
```
## Contournement de GuardDuty

### Conseils généraux

Essayez de découvrir autant que possible sur le comportement des identifiants que vous allez utiliser :

- Heures d'utilisation
- Lieux
- Agents utilisateurs / Services (Cela pourrait être utilisé depuis awscli, webconsole, lambda...)
- Permissions régulièrement utilisées

Avec ces informations, recréez autant que possible le même scénario pour utiliser l'accès :

- Si c'est un **utilisateur ou un rôle accédé par un utilisateur**, essayez de l'utiliser aux mêmes heures, depuis la même géolocalisation (même le même FAI et IP si possible)
- Si c'est un **rôle utilisé par un service**, créez le même service dans la même région et utilisez-le depuis là dans les mêmes plages horaires
- Essayez toujours d'utiliser les **mêmes permissions** que ce principal a utilisées
- Si vous devez **utiliser d'autres permissions ou abuser d'une permission** (par exemple, télécharger 1.000.000 de fichiers journaux cloudtrail), faites-le **lentement** et avec le **minimum d'interactions** avec AWS (awscli appelle parfois plusieurs API de lecture avant celle d'écriture)

### Contournement de GuardDuty

#### `guardduty:UpdateDetector`

Avec cette permission, vous pourriez désactiver GuardDuty pour éviter de déclencher des alertes.
```bash
aws guardduty update-detector --detector-id <detector-id> --no-enable
aws guardduty update-detector --detector-id <detector-id> --data-sources S3Logs={Enable=false}
```
#### `guardduty:CreateFilter`

Les attaquants disposant de cette autorisation ont la capacité de **utiliser des filtres pour l'archivage automatique** des résultats :
```bash
aws guardduty create-filter  --detector-id <detector-id> --name <filter-name> --finding-criteria file:///tmp/criteria.json --action ARCHIVE
```
#### `iam:PutRolePolicy`, (`guardduty:CreateIPSet`|`guardduty:UpdateIPSet`)

Les attaquants disposant des privilèges précédents pourraient modifier la [**liste IP de confiance**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) de GuardDuty en y ajoutant leur adresse IP et éviter de générer des alertes.
```bash
aws guardduty update-ip-set --detector-id <detector-id> --activate --ip-set-id <ip-set-id> --location https://some-bucket.s3-eu-west-1.amazonaws.com/attacker.csv
```
#### `guardduty:DeletePublishingDestination`

Les attaquants pourraient supprimer la destination pour empêcher les alertes :
```bash
aws guardduty delete-publishing-destination --detector-id <detector-id> --destination-id <dest-id>
```
> [!CAUTION]
> La suppression de cette destination de publication **n'affectera pas la génération ou la visibilité des résultats dans la console GuardDuty**. GuardDuty continuera à analyser les événements dans votre environnement AWS, à identifier les comportements suspects ou inattendus, et à générer des résultats.

### Exemples spécifiques de contournement des résultats

Notez qu'il existe des dizaines de résultats GuardDuty, cependant, **en tant que Red Teamer, tous ne vous affecteront pas**, et ce qui est mieux, vous avez la **documentation complète de chacun d'eux** dans [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html), alors jetez un œil avant de faire quoi que ce soit pour ne pas vous faire prendre.

Voici quelques exemples de contournement de résultats spécifiques de GuardDuty :

#### [PenTest:IAMUser/KaliLinux](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) <a href="#pentest-iam-kalilinux" id="pentest-iam-kalilinux"></a>

GuardDuty détecte les requêtes API AWS provenant d'outils de test de pénétration courants et déclenche un [PenTest Finding](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux).\
C'est détecté par le **nom de l'agent utilisateur** qui est passé dans la requête API.\
Par conséquent, **modifier l'agent utilisateur** permet d'empêcher GuardDuty de détecter l'attaque.

Pour éviter cela, vous pouvez rechercher dans le script `session.py` dans le package `botocore` et modifier l'agent utilisateur, ou définir Burp Suite comme proxy AWS CLI et changer l'agent utilisateur avec le MitM ou simplement utiliser un OS comme Ubuntu, Mac ou Windows pour empêcher cette alerte de se déclencher.

#### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration

L'extraction des identifiants EC2 du service de métadonnées et **leur utilisation à l'extérieur** de l'environnement AWS active l'alerte [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws). En revanche, l'utilisation de ces identifiants depuis votre instance EC2 déclenche l'alerte [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws). Pourtant, **l'utilisation des identifiants sur une autre instance EC2 compromise au sein du même compte passe inaperçue**, ne déclenchant aucune alerte.

> [!TIP]
> Par conséquent, **utilisez les identifiants exfiltrés depuis l'intérieur de la machine** où vous les avez trouvés pour ne pas déclencher cette alerte.

## Références

- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html)
- [https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html](https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html)
- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html)
- [https://docs.aws.amazon.com/cli/latest/reference/guardduty/delete-publishing-destination.html](https://docs.aws.amazon.com/cli/latest/reference/guardduty/delete-publishing-destination.html)
- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-ec2.html#unauthorizedaccess-ec2-torclient](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-ec2.html#unauthorizedaccess-ec2-torclient)
- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws)
- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws)
- [https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html)

{{#include ../../../../banners/hacktricks-training.md}}
