# AWS - GuardDuty Enum

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

## GuardDuty

Secondo la [**documentazione**](https://aws.amazon.com/guardduty/features/): GuardDuty combina **apprendimento automatico, rilevamento di anomalie, monitoraggio della rete e scoperta di file dannosi**, utilizzando sia AWS che fonti di terze parti leader del settore per aiutare a proteggere i carichi di lavoro e i dati su AWS. GuardDuty è in grado di analizzare decine di miliardi di eventi provenienti da più fonti di dati AWS, come i log degli eventi di AWS CloudTrail, i log di flusso di Amazon Virtual Private Cloud (VPC), i log di audit e di sistema di Amazon Elastic Kubernetes Service (EKS) e i log delle query DNS.

Amazon GuardDuty **identifica attività insolite all'interno dei tuoi account**, analizza la **rilevanza della sicurezza** dell'attività e fornisce il **contesto** in cui è stata invocata. Questo consente a un risponditore di determinare se deve dedicare tempo a ulteriori indagini.

Gli avvisi **appaiono nella console di GuardDuty (90 giorni)** e negli eventi di CloudWatch.

> [!WARNING]
> Quando un utente **disabilita GuardDuty**, smetterà di monitorare il tuo ambiente AWS e non genererà più alcun nuovo riscontro, e i **riscontri esistenti andranno persi**.\
> Se lo fermi semplicemente, i riscontri esistenti rimarranno.

### Esempio di Riscontri

- **Riconoscimento**: Attività che suggerisce riconoscimento da parte di un attaccante, come **attività API insolite**, tentativi di **accesso** al database sospetti, **scansione delle porte** intra-VPC, modelli insoliti di richieste di accesso fallite o probing di porte non bloccate da un IP noto come malevolo.
- **Compromissione dell'istanza**: Attività che indica una compromissione dell'istanza, come **mining di criptovalute, attività di comando e controllo (C\&C) di backdoor**, malware che utilizza algoritmi di generazione di domini (DGA), attività di negazione del servizio in uscita, volume di traffico di rete **insolitamente alto**, protocolli di rete insoliti, comunicazione dell'istanza in uscita con un IP malevolo noto, credenziali temporanee di Amazon EC2 utilizzate da un indirizzo IP esterno e esfiltrazione di dati tramite DNS.
- **Compromissione dell'account**: Modelli comuni indicativi di compromissione dell'account includono chiamate API da una geolocalizzazione insolita o proxy di anonimizzazione, tentativi di disabilitare il logging di AWS CloudTrail, modifiche che indeboliscono la politica della password dell'account, lanci di istanze o infrastrutture insolite, distribuzioni di infrastruttura in una regione insolita, furto di credenziali, attività di accesso al database sospette e chiamate API da indirizzi IP malevoli noti.
- **Compromissione del bucket**: Attività che indica una compromissione del bucket, come modelli di accesso ai dati sospetti che indicano un uso improprio delle credenziali, attività API di Amazon S3 insolite da un host remoto, accesso S3 non autorizzato da indirizzi IP malevoli noti e chiamate API per recuperare dati nei bucket S3 da un utente senza una storia precedente di accesso al bucket o invocato da una posizione insolita. Amazon GuardDuty monitora e analizza continuamente gli eventi di dati S3 di AWS CloudTrail (ad es. GetObject, ListObjects, DeleteObject) per rilevare attività sospette in tutti i tuoi bucket Amazon S3.

<details>

<summary>Informazioni sui Riscontri</summary>

Riepilogo del riscontro:

- Tipo di riscontro
- Gravità: 7-8.9 Alta, 4-6.9 Media, 01-3.9 Bassa
- Regione
- ID account
- ID risorsa
- Tempo di rilevamento
- Quale lista di minacce è stata utilizzata

Il corpo contiene queste informazioni:

- Risorsa interessata
- Azione
- Attore: Indirizzo IP, porta e dominio
- Informazioni aggiuntive

</details>

### Tutti i Riscontri

Accedi a un elenco di tutti i riscontri di GuardDuty in: [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)

### Multi Account

#### Su Invito

Puoi **invitare altri account** a un diverso account AWS GuardDuty in modo che **ogni account sia monitorato dallo stesso GuardDuty**. L'account master deve invitare gli account membri e poi il rappresentante dell'account membro deve accettare l'invito.

#### Via Organizzazione

Puoi designare qualsiasi account all'interno dell'organizzazione come **amministratore delegato di GuardDuty**. Solo l'account di gestione dell'organizzazione può designare un amministratore delegato.

Un account che viene designato come amministratore delegato diventa un account amministratore di GuardDuty, ha GuardDuty abilitato automaticamente nella regione AWS designata e ha anche **il permesso di abilitare e gestire GuardDuty per tutti gli account nell'organizzazione all'interno di quella regione**. Gli altri account nell'organizzazione possono essere visualizzati e aggiunti come account membri di GuardDuty associati a questo account amministratore delegato.

## Enumerazione
```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>
```
## GuardDuty Bypass

### General Guidance

Cerca di scoprire il maggior numero possibile di informazioni sul comportamento delle credenziali che intendi utilizzare:

- Orari in cui vengono utilizzate
- Località
- User Agents / Servizi (Potrebbe essere utilizzato da awscli, webconsole, lambda...)
- Permessi utilizzati regolarmente

Con queste informazioni, ricrea il più possibile lo stesso scenario per utilizzare l'accesso:

- Se si tratta di un **utente o di un ruolo accessibile da un utente**, cerca di utilizzarlo nelle stesse ore, dalla stessa geolocalizzazione (anche lo stesso ISP e IP se possibile)
- Se si tratta di un **ruolo utilizzato da un servizio**, crea lo stesso servizio nella stessa regione e utilizzalo da lì negli stessi intervalli di tempo
- Cerca sempre di utilizzare gli **stessi permessi** che questo principale ha utilizzato
- Se hai bisogno di **utilizzare altri permessi o abusare di un permesso** (ad esempio, scaricare 1.000.000 di file di log di cloudtrail) fallo **lentamente** e con il **minimo numero di interazioni** con AWS (awscli a volte chiama diverse API di lettura prima di quella di scrittura)

### Breaking GuardDuty

#### `guardduty:UpdateDetector`

Con questo permesso potresti disabilitare GuardDuty per evitare di attivare avvisi.
```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`

Gli attaccanti con questo permesso hanno la capacità di **utilizzare filtri per l'archiviazione automatica** dei risultati:
```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`)

Gli attaccanti con i privilegi precedenti potrebbero modificare la [**lista IP fidati**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) di GuardDuty aggiungendo il proprio indirizzo IP e evitando di generare avvisi.
```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`

Gli attaccanti potrebbero rimuovere la destinazione per prevenire gli avvisi:
```bash
aws guardduty delete-publishing-destination --detector-id <detector-id> --destination-id <dest-id>
```
> [!CAUTION]
> Eliminare questa destinazione di pubblicazione **non influenzerà la generazione o la visibilità dei risultati all'interno della console di GuardDuty**. GuardDuty continuerà ad analizzare gli eventi nel tuo ambiente AWS, identificare comportamenti sospetti o inaspettati e generare risultati.

### Esempi specifici di bypass dei risultati

Nota che ci sono decine di risultati di GuardDuty, tuttavia, **come Red Teamer non tutti influenzeranno te**, e ciò che è meglio, hai la **documentazione completa di ciascuno di essi** in [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) quindi dai un'occhiata prima di intraprendere qualsiasi azione per non essere scoperto.

Ecco un paio di esempi di bypass specifici dei risultati di 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 rileva le richieste API di AWS da strumenti comuni di penetration testing e attiva un [PenTest Finding](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux).\
È rilevato dal **nome dell'agente utente** che viene passato nella richiesta API.\
Pertanto, **modificando l'agente utente** è possibile impedire a GuardDuty di rilevare l'attacco.

Per prevenire questo puoi cercare nello script `session.py` nel pacchetto `botocore` e modificare l'agente utente, oppure impostare Burp Suite come proxy AWS CLI e cambiare l'agente utente con il MitM o semplicemente utilizzare un OS come Ubuntu, Mac o Windows per prevenire l'attivazione di questo avviso.

#### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration

Estrarre le credenziali EC2 dal servizio di metadata e **utilizzarle al di fuori** dell'ambiente AWS attiva l'allerta [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws). Al contrario, utilizzare queste credenziali dalla tua istanza EC2 attiva l'allerta [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws). Tuttavia, **utilizzare le credenziali su un'altra istanza EC2 compromessa all'interno dello stesso account rimane non rilevato**, senza attivare alcun avviso.

> [!TIP]
> Pertanto, **usa le credenziali esfiltrate dall'interno della macchina** in cui le hai trovate per non attivare questo avviso.

## Riferimenti

- [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}}
