AWS - CloudTrail Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 una traccia di audit delle modifiche e delle azioni, aiutando nell'analisi della sicurezza, nella verifica della conformità e nel monitoraggio delle modifiche alle 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 root dell'account
lambda.amazonaws.com - AWS Lambda
I parametri della richiesta: requestParameters
Gli elementi della risposta: responseElements
Gli eventi vengono scritti in un nuovo file di log circa ogni 5 minuti in un file JSON, sono conservati 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 tuoi 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. Un hash sha-256 dei nuovi log viene creato ogni ora. Quando si crea un Trail, i selettori degli eventi ti permetteranno di indicare il trail da registrare: eventi di gestione, dati o approfondimenti.
I log vengono salvati in un bucket S3. Per impostazione predefinita, viene utilizzata la crittografia lato server (SSE-S3), quindi AWS decripterà il contenuto per le persone che hanno accesso, ma per ulteriore sicurezza puoi utilizzare SSE con KMS e le tue 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 ogni cartella, ogni log avrà un nome che segue 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:
Crea un Trail nell'account AWS in cui desideri che i file di log vengano consegnati
Applica permessi al bucket S3 di destinazione consentendo l'accesso cross-account per CloudTrail e consenti a ciascun account AWS che necessita di accesso
Crea un nuovo Trail negli altri account AWS e seleziona di utilizzare il bucket creato nel passaggio 1
Tuttavia, anche se puoi salvare tutti i log nello stesso bucket S3, non puoi 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 di CloudTrail abilitati che memorizzano gli stessi (o diversi) log in bucket diversi.
Quando crei un CloudTrail, è possibile indicare di attivare CloudTrail per tutti gli account nell'organizzazione e ottenere i log in un solo bucket:
In questo modo puoi facilmente configurare CloudTrail in tutte le regioni di tutti gli account e centralizzare i log in 1 account (che dovresti proteggere).
Puoi controllare che i log non siano stati alterati eseguendo
CloudTrail può inviare automaticamente i log a CloudWatch in modo da poter impostare avvisi che ti avvertono quando vengono eseguite attività sospette. Nota che per consentire a CloudTrail di inviare i log a CloudWatch è necessario creare un ruolo che consenta tale azione. Se possibile, si consiglia di 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 log di CloudTrail al flusso di log di CloudWatch Logs
La Cronologia Eventi di CloudTrail ti consente di ispezionare in una tabella i log che sono stati registrati:
CloudTrail Insights analizza automaticamente gli eventi di gestione scritti dai trail di CloudTrail e ti avverte di attività insolite. Ad esempio, se c'è un aumento degli eventi TerminateInstance
che differisce dalle baseline stabilite, lo vedrai come un evento Insight. Questi eventi rendono più facile che mai trovare e rispondere a attività API insolite.
Le informazioni sono memorizzate nello stesso bucket dei log di CloudTrail in: BucketName/AWSLogs/AccountID/CloudTrail-Insight
Integrità del file di log di CloudTrail
Valida se i log 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
Ci vogliono 1 ora per creare un file di digest (eseguito all'ora ogni ora)
Ferma accessi non autorizzati
Utilizza politiche IAM e politiche del bucket S3
team di sicurezza —> accesso admin
auditori —> accesso in sola lettura
Utilizza SSE-S3/SSE-KMS per crittografare i log
Previeni l'eliminazione dei file di log
Limita l'accesso all'eliminazione con IAM e politiche del bucket
Configura l'eliminazione MFA di S3
Valida con la Validazione del file di log
AWS Access Advisor si basa sugli ultimi 400 giorni di log di AWS CloudTrail per raccogliere le sue informazioni. CloudTrail cattura una cronologia delle chiamate API AWS e degli eventi correlati effettuati in un account AWS. Access Advisor utilizza questi dati per mostrare quando i servizi sono stati ultimi accessi. Analizzando i log di CloudTrail, Access Advisor può determinare quali servizi AWS un utente o un ruolo IAM ha accesso e quando è avvenuto tale accesso. Questo aiuta gli amministratori AWS a prendere decisioni informate su come affinare le autorizzazioni, poiché possono identificare i servizi che non sono stati accessi per periodi prolungati e potenzialmente ridurre autorizzazioni eccessivamente ampie basate su modelli di utilizzo reali.
Pertanto, Access Advisor informa sulle autorizzazioni non necessarie concesse agli utenti in modo che l'amministratore possa rimuoverle
È possibile eseguire un'iniezione CVS 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 Trail errato contenente il payload:
Per ulteriori informazioni sulle Iniezioni CSV controlla la pagina:
Per ulteriori informazioni su questa specifica tecnica controlla https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
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, i Honeytokens come quelli creati da Canarytokens, SpaceCrab, SpaceSiren utilizzano un nome account riconoscibile o utilizzano lo stesso ID account AWS per tutti i loro clienti. Pertanto, se riesci a ottenere il nome dell'account e/o l'ID dell'account senza far creare alcun log a Cloudtrail, potresti sapere se la chiave è un honeytoken o meno.
Pacu ha alcune regole per rilevare se una chiave appartiene a Canarytokens, SpaceCrab, SpaceSiren:
Se canarytokens.org
appare nel nome del ruolo o l'ID account 534261010715
appare nel messaggio di errore.
Testandoli più recentemente, stanno usando 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.
Puoi ottenere l'ID Account dall'encoded all'interno della chiave di accesso come spiegato qui e controllare l'ID account con la tua lista di account Honeytokens AWS:
Controlla ulteriori informazioni nella ricerca originale.
La tecnica più efficace per questo è in realtà una semplice. Basta utilizzare la chiave che hai appena trovato per accedere a qualche servizio all'interno del tuo account di attaccante. Questo farà sì che CloudTrail generi un log all'interno del TUO account AWS e non all'interno di quello delle vittime.
Il fatto è che l'output mostrerà un errore che indica l'ID dell'account e il nome dell'account, quindi sarai in grado di vedere se è un Honeytoken.
In passato c'erano alcuni servizi AWS che non inviano log a CloudTrail (trova un elenco qui). Alcuni di questi servizi risponderanno con un errore contenente l'ARN del ruolo della chiave se qualcuno non autorizzato (la chiave honeytoken) prova ad accedervi.
In questo modo, un attaccante può ottenere l'ARN della chiave senza attivare alcun log. Nell'ARN l'attaccante può vedere l'ID dell'account AWS e il nome, è facile conoscere l'ID e i nomi degli account delle aziende HoneyToken, quindi in questo modo un attaccante può identificare se il token è un HoneyToken.
Nota che tutte le API pubbliche scoperte per non creare log di CloudTrail sono ora state corrette, quindi potresti dover trovare le tue...
Per ulteriori informazioni controlla la ricerca originale.
Alcuni servizi AWS genereranno un'infrastruttura come Database o cluster Kubernetes (EKS). Un utente che parla direttamente a quei servizi (come l'API di Kubernetes) non utilizzerà l'API AWS, quindi CloudTrail non sarà in grado di vedere questa comunicazione.
Pertanto, un utente con accesso a EKS che ha scoperto l'URL dell'API EKS potrebbe generare un token localmente e parlare direttamente con il servizio API senza essere rilevato da Cloudtrail.
Ulteriori informazioni in:
Nel primo esempio, un singolo selettore di eventi è fornito come un array JSON con un singolo oggetto. Il "ReadWriteType": "ReadOnly"
indica che il selettore di eventi dovrebbe catturare solo eventi di sola lettura (quindi gli insight di CloudTrail non controlleranno eventi di scrittura, per esempio).
Puoi personalizzare il selettore di eventi in base alle tue esigenze specifiche.
Elimina il bucket S3
Cambia 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
Puoi generare una chiave asimmetrica e far crittografare i dati da CloudTrail con quella chiave e eliminare la chiave privata in modo che i contenuti di CloudTrail non possano essere recuperati. Questo è fondamentalmente un ransomware S3-KMS spiegato in:
Ransomware KMS
Questo è un modo più semplice per eseguire l'attacco precedente con requisiti di autorizzazione diversi:
Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)