AWS - CloudWatch Enum

Reading time: 19 minutes

tip

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) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

CloudWatch

CloudWatch colleziona dati di monitoraggio e operativi sotto forma di log/metriche/eventi, fornendo una visione unificata delle risorse AWS, delle applicazioni e dei servizi.
CloudWatch Log Event ha una limitazione di dimensione di 256KB per ogni riga di log.
Può impostare allarmi ad alta risoluzione, visualizzare log e metriche affiancati, intraprendere azioni automatiche, risolvere problemi e scoprire informazioni per ottimizzare le applicazioni.

Puoi monitorare, ad esempio, i log di CloudTrail. Gli eventi monitorati includono:

Concetti chiave

Namespaces

Un namespace è un contenitore per le metriche di CloudWatch. Aiuta a categorizzare e isolare le metriche, rendendo più facile gestirle e analizzarle.

  • Esempi: AWS/EC2 per metriche relative a EC2, AWS/RDS per metriche RDS.

Metriche

Le metriche sono punti dati raccolti nel tempo che rappresentano le prestazioni o l'utilizzo delle risorse AWS. Le metriche possono essere raccolte dai servizi AWS, da applicazioni personalizzate o da integrazioni di terze parti.

  • Esempio: CPUUtilization, NetworkIn, DiskReadOps.

Dimensioni

Le dimensioni sono coppie chiave-valore che fanno parte delle metriche. Aiutano a identificare univocamente una metrica e forniscono contesto aggiuntivo, essendo 30 il numero massimo di dimensioni che possono essere associate a una metrica. Le dimensioni consentono anche di filtrare e aggregare le metriche in base a specifici attributi.

  • Esempio: Per le istanze EC2, le dimensioni potrebbero includere InstanceId, InstanceType e AvailabilityZone.

Statistiche

Le statistiche sono calcoli matematici eseguiti sui dati delle metriche per riassumerli nel tempo. Le statistiche comuni includono Media, Somma, Minimo, Massimo e ConteggioCampioni.

  • Esempio: Calcolare la media dell'utilizzo della CPU su un periodo di un'ora.

Unità

Le unità sono il tipo di misura associato a una metrica. Le unità aiutano a fornire contesto e significato ai dati metrici. Le unità comuni includono Percentuale, Byte, Secondi, Conteggio.

  • Esempio: CPUUtilization potrebbe essere misurata in Percentuale, mentre NetworkIn potrebbe essere misurata in Byte.

Caratteristiche di CloudWatch

Dashboard

CloudWatch Dashboards forniscono viste personalizzabili delle metriche di AWS CloudWatch. È possibile creare e configurare dashboard per visualizzare i dati e monitorare le risorse in un'unica vista, combinando diverse metriche da vari servizi AWS.

Caratteristiche chiave:

  • Widget: Blocchi di costruzione delle dashboard, inclusi grafici, testo, allarmi e altro.
  • Personalizzazione: Layout e contenuto possono essere personalizzati per soddisfare esigenze di monitoraggio specifiche.

Esempio di caso d'uso:

  • Un'unica dashboard che mostra metriche chiave per l'intero ambiente AWS, incluse le istanze EC2, i database RDS e i bucket S3.

Metric Stream e Dati Metrici

Metric Streams in AWS CloudWatch ti consentono di trasmettere continuamente le metriche di CloudWatch a una destinazione a tua scelta in tempo quasi reale. Questo è particolarmente utile per il monitoraggio avanzato, l'analisi e dashboard personalizzati utilizzando strumenti al di fuori di AWS.

Dati Metrici all'interno dei Metric Streams si riferiscono alle misurazioni effettive o ai punti dati che vengono trasmessi. Questi punti dati rappresentano varie metriche come l'utilizzo della CPU, l'uso della memoria, ecc., per le risorse AWS.

Esempio di caso d'uso:

  • Inviare metriche in tempo reale a un servizio di monitoraggio di terze parti per un'analisi avanzata.
  • Archiviare metriche in un bucket Amazon S3 per la conservazione a lungo termine e la conformità.

Allarme

CloudWatch Alarms monitorano le tue metriche e intraprendono azioni basate su soglie predefinite. Quando una metrica supera una soglia, l'allarme può eseguire una o più azioni come inviare notifiche tramite SNS, attivare una politica di auto-scaling o eseguire una funzione AWS Lambda.

Componenti chiave:

  • Soglia: Il valore al quale l'allarme si attiva.
  • Periodi di valutazione: Il numero di periodi su cui i dati vengono valutati.
  • Punti dati per allarme: Il numero di periodi con una soglia raggiunta necessaria per attivare l'allarme.
  • Azioni: Cosa succede quando viene attivato uno stato di allarme (ad es., notificare tramite SNS).

Esempio di caso d'uso:

  • Monitorare l'utilizzo della CPU delle istanze EC2 e inviare una notifica tramite SNS se supera l'80% per 5 minuti consecutivi.

Rilevatori di anomalie

Rilevatori di anomalie utilizzano l'apprendimento automatico per rilevare automaticamente anomalie nelle tue metriche. Puoi applicare il rilevamento delle anomalie a qualsiasi metrica di CloudWatch per identificare deviazioni dai modelli normali che potrebbero indicare problemi.

Componenti chiave:

  • Addestramento del modello: CloudWatch utilizza dati storici per addestrare un modello e stabilire quale comportamento è normale.
  • Banda di rilevamento delle anomalie: Una rappresentazione visiva dell'intervallo di valori attesi per una metrica.

Esempio di caso d'uso:

  • Rilevare modelli di utilizzo della CPU insoliti in un'istanza EC2 che potrebbero indicare una violazione della sicurezza o un problema dell'applicazione.

Regole di Insight e Regole di Insight Gestite

Regole di Insight ti consentono di identificare tendenze, rilevare picchi o altri modelli di interesse nei tuoi dati metrici utilizzando espressioni matematiche potenti per definire le condizioni sotto le quali devono essere intraprese azioni. Queste regole possono aiutarti a identificare anomalie o comportamenti insoliti nelle prestazioni e nell'utilizzo delle tue risorse.

Regole di Insight Gestite sono regole di insight preconfigurate fornite da AWS. Sono progettate per monitorare servizi AWS specifici o casi d'uso comuni e possono essere attivate senza necessità di configurazione dettagliata.

Esempio di caso d'uso:

  • Monitorare le prestazioni di RDS: Abilitare una regola di insight gestita per Amazon RDS che monitora indicatori chiave di prestazione come l'utilizzo della CPU, l'uso della memoria e l'I/O del disco. Se una di queste metriche supera soglie operative sicure, la regola può attivare un avviso o un'azione di mitigazione automatizzata.

CloudWatch Logs

Consente di aggregare e monitorare i log delle applicazioni e dei sistemi dai servizi AWS (incluso CloudTrail) e da app/sistemi (CloudWatch Agent può essere installato su un host). I log possono essere archiviati indefinitamente (a seconda delle impostazioni del Log Group) e possono essere esportati.

Elementi:

TermDefinizione
Log GroupUna collezione di log stream che condividono le stesse impostazioni di retention, monitoraggio e controllo degli accessi
Log StreamUna sequenza di eventi di log che condividono la stessa fonte
Subscription FiltersDefiniscono un modello di filtro che corrisponde agli eventi in un particolare log group, inviandoli a un flusso Kinesis Data Firehose, a un flusso Kinesis o a una funzione Lambda

Monitoraggio e Eventi di CloudWatch

CloudWatch base aggrega i dati ogni 5 minuti (quella dettagliata lo fa ogni 1 minuto). Dopo l'aggregazione, controlla le soglie degli allarmi nel caso debba attivarne uno.
In tal caso, CloudWatch può essere preparato a inviare un evento e intraprendere alcune azioni automatiche (funzioni AWS lambda, argomenti SNS, code SQS, flussi Kinesis)

Installazione dell'Agente

Puoi installare agenti all'interno delle tue macchine/contenitori per inviare automaticamente i log a CloudWatch.

  • Crea un ruolo e allega ad esso l'istanza con permessi che consentono a CloudWatch di raccogliere dati dalle istanze oltre a interagire con AWS Systems Manager SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)
  • Scarica e installa l'agente sull'istanza EC2 (https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip). Puoi scaricarlo dall'interno dell'EC2 o installarlo automaticamente utilizzando AWS Systems Manager selezionando il pacchetto AWS-ConfigureAWSPackage
  • Configura e avvia il CloudWatch Agent

Un log group ha molti stream. Uno stream ha molti eventi. E all'interno di ogni stream, gli eventi sono garantiti in ordine.

Enumerazione

bash
# Dashboards #

## Returns a list of the dashboards of your account
aws cloudwatch list-dashboards

## Retrieves the details of the specified dashboard
aws cloudwatch get-dashboard --dashboard-name <value>

# Metrics #

## Returns a list of the specified metric
aws cloudwatch list-metrics [--namespace <value>] [--metric-name <value>] [--dimensions <value>] [--include-linked-accounts | --no-include-linked-accounts]

## Retrieves metric data (this operation can include a CloudWatch Metrics Insights query, and one or more metric math functions)
aws cloudwatch get-metric-data --metric-data-queries <value> --start-time <value> --end-time <value>

## Retrieves statistics for the specified metric and namespace over a range of time
aws cloudwatch get-metric-statistics --namespace <value> --metric-name <value> [--dimensions <value>] --start-time <value> --end-time <value> --period <value>

## Returns a list of the metric streams of your account
aws cloudwatch list-metric-streams

## Retrieves information about the specified metric stream
aws cloudwatch get-metric-stream --name <value>

## Retrieve snapshots of the specified metric widgets
aws cloudwatch get-metric-widget-image --metric-widget <value>

# Alarms #

## Retrieves the specified alarm
aws cloudwatch describe-alarms [--alarm-names <value>] [--alarm-name-prefix <value>] [--alarm-types <value>] [--state-value <value>]

## Retrieves the alarms history, even for deleted alarms
aws cloudwatch describe-alarm-history [--alarm-name <value>] [--alarm-types <value>] [--history-item-type <ConfigurationUpdate | StateUpdate | Action>] [--start-date <value>] [--end-date <value>]

## Retrieves standard alarms based on the specified metric
aws cloudwatch escribe-alarms-for-metric --metric-name <value> --namespace <value> [--dimensions <value>]

# Anomaly Detections #

## Lists the anomaly detection models that you have created in your account
aws cloudwatch describe-anomaly-detectors [--namespace <value>] [--metric-name <value>] [--dimensions <value>]

## Lists all the Contributor Insight rules in your account
aws cloudwatch describe-insight-rules

## Retrieves the data collected over a time range for a given Contributor Insight rule
aws cloudwatch get-insight-rule-report --rule-name <value> --start-time <value> --end-time <value> --period <value>

## Lists managed Contributor Insights rules in your account for a specified resource
aws cloudwatch list-managed-insight-rules --resource-arn <value>

# Tags #

## Lists the tags associated with the specified CloudWatch resources
aws cloudwatch list-tags-for-resource --resource-arn <value>

# CloudWatch Logs #
aws logs tail "<log_group_name>" --followaws logs get-log-events --log-group-name "<log_group_name>" --log-stream-name "<log_stream_name>" --output text > <output_file>

# CloudWatch Events #
aws events list-rules
aws events describe-rule --name <name>aws events list-targets-by-rule --rule <name>aws events list-archives
aws events describe-archive --archive-name <name>aws events list-connections
aws events describe-connection --name <name>aws events list-endpoints
aws events describe-endpoint --name <name>aws events list-event-sources
aws events describe-event-source --name <name>aws events list-replays
aws events list-api-destinations
aws events list-event-buses

Post-Exploitation / Bypass

cloudwatch:DeleteAlarms,cloudwatch:PutMetricAlarm , cloudwatch:PutCompositeAlarm

Un attaccante con questi permessi potrebbe compromettere significativamente l'infrastruttura di monitoraggio e allerta di un'organizzazione. Cancellando allarmi esistenti, un attaccante potrebbe disabilitare avvisi cruciali che notificano gli amministratori di problemi di prestazioni critici, violazioni della sicurezza o guasti operativi. Inoltre, creando o modificando allarmi metrici, l'attaccante potrebbe anche fuorviare gli amministratori con falsi avvisi o silenziare allarmi legittimi, mascherando efficacemente attività malevole e impedendo risposte tempestive a incidenti reali.

Inoltre, con il permesso cloudwatch:PutCompositeAlarm, un attaccante sarebbe in grado di creare un ciclo di allarmi compositi, dove l'allarme composito A dipende dall'allarme composito B, e l'allarme composito B dipende anche dall'allarme composito A. In questo scenario, non è possibile eliminare alcun allarme composito che fa parte del ciclo perché c'è sempre un allarme composito che dipende da quell'allarme che si desidera eliminare.

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>
aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--no-actions-enabled | --actions-enabled [--alarm-actions <value>] [--insufficient-data-actions <value>] [--ok-actions <value>] ]

L'esempio seguente mostra come rendere inefficace un allarme metrico:

  • Questo allarme metrico monitora l'utilizzo medio della CPU di una specifica istanza EC2, valuta la metrica ogni 300 secondi e richiede 6 periodi di valutazione (30 minuti in totale). Se l'utilizzo medio della CPU supera il 60% per almeno 4 di questi periodi, l'allarme si attiverà e invierà una notifica al topic SNS specificato.
  • Modificando la soglia per essere superiore al 99%, impostando il periodo a 10 secondi, i periodi di valutazione a 8640 (poiché 8640 periodi di 10 secondi equivalgono a 1 giorno) e i punti dati per l'allarme a 8640, sarebbe necessario che l'utilizzo della CPU fosse superiore al 99% ogni 10 secondi per l'intero periodo di 24 ore per attivare un allarme.
json
{
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-01234567890123456"
}
],
"AlarmActions": ["arn:aws:sns:us-east-1:123456789012:example_sns"],
"ComparisonOperator": "GreaterThanThreshold",
"DatapointsToAlarm": 4,
"EvaluationPeriods": 6,
"Period": 300,
"Statistic": "Average",
"Threshold": 60,
"AlarmDescription": "CPU Utilization of i-01234567890123456 over 60%",
"AlarmName": "EC2 instance i-01234567890123456 CPU Utilization"
}

Impatto Potenziale: Mancanza di notifiche per eventi critici, potenziali problemi non rilevati, falsi allerta, soppressione di allerta genuine e potenzialmente rilevamenti mancati di incidenti reali.

cloudwatch:DeleteAlarmActions, cloudwatch:EnableAlarmActions, cloudwatch:SetAlarmState

Eliminando le azioni di allerta, l'attaccante potrebbe impedire che vengano attivati avvisi critici e risposte automatiche quando viene raggiunto uno stato di allerta, come notificare gli amministratori o attivare attività di auto-scaling. Abilitare o riabilitare in modo inappropriato le azioni di allerta potrebbe anche portare a comportamenti imprevisti, sia riattivando azioni precedentemente disabilitate sia modificando quali azioni vengono attivate, causando potenzialmente confusione e deviazione nella risposta agli incidenti.

Inoltre, un attaccante con il permesso potrebbe manipolare gli stati di allerta, essendo in grado di creare falsi allarmi per distrarre e confondere gli amministratori, o silenziare allarmi genuini per nascondere attività malevole in corso o gravi guasti di sistema.

  • Se utilizzi SetAlarmState su un allarme composito, l'allarme composito non è garantito a tornare al suo stato effettivo. Torna al suo stato effettivo solo una volta che uno dei suoi allarmi figli cambia stato. Viene anche rivalutato se aggiorni la sua configurazione.
bash
aws cloudwatch disable-alarm-actions --alarm-names <value>
aws cloudwatch enable-alarm-actions --alarm-names <value>
aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM | INSUFFICIENT_DATA> --state-reason <value> [--state-reason-data <value>]

Impatto Potenziale: Mancanza di notifiche per eventi critici, potenziali problemi non rilevati, falsi allerta, soppressione di allerta genuine e potenzialmente rilevamenti mancati di incidenti reali.

cloudwatch:DeleteAnomalyDetector, cloudwatch:PutAnomalyDetector

Un attaccante sarebbe in grado di compromettere la capacità di rilevare e rispondere a schemi o anomalie insolite nei dati delle metriche. Cancellando i rilevatori di anomalie esistenti, un attaccante potrebbe disabilitare meccanismi di allerta critici; e creando o modificandoli, sarebbe in grado di misconfigurare o creare falsi positivi per distrarre o sopraffare il monitoraggio.

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>]

L'esempio seguente mostra come rendere inefficace un rilevatore di anomalie metriche. Questo rilevatore di anomalie metriche monitora l'utilizzo medio della CPU di un'istanza EC2 specifica, e basta aggiungere il parametro “ExcludedTimeRanges” con l'intervallo di tempo desiderato per garantire che il rilevatore di anomalie non analizzi né avvisi su dati rilevanti durante quel periodo.

json
{
"SingleMetricAnomalyDetector": {
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Stat": "Average",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-0123456789abcdefg"
}
]
}
}

Impatto Potenziale: Effetto diretto nella rilevazione di schemi insoliti o minacce alla sicurezza.

cloudwatch:DeleteDashboards, cloudwatch:PutDashboard

Un attaccante potrebbe compromettere le capacità di monitoraggio e visualizzazione di un'organizzazione creando, modificando o eliminando i suoi dashboard. Queste autorizzazioni potrebbero essere sfruttate per rimuovere la visibilità critica sulle prestazioni e sulla salute dei sistemi, alterare i dashboard per visualizzare dati errati o nascondere attività malevole.

bash
aws cloudwatch delete-dashboards --dashboard-names <value>
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>

Impatto Potenziale: Perdita di visibilità di monitoraggio e informazioni fuorvianti.

cloudwatch:DeleteInsightRules, cloudwatch:PutInsightRule, cloudwatch:PutManagedInsightRule

Le regole di insight vengono utilizzate per rilevare anomalie, ottimizzare le prestazioni e gestire le risorse in modo efficace. Eliminando le regole di insight esistenti, un attaccante potrebbe rimuovere capacità di monitoraggio critiche, lasciando il sistema cieco a problemi di prestazioni e minacce alla sicurezza. Inoltre, un attaccante potrebbe creare o modificare regole di insight per generare dati fuorvianti o nascondere attività dannose, portando a diagnosi errate e risposte inappropriate da parte del team operativo.

bash
aws cloudwatch delete-insight-rules --rule-names <value>
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
aws cloudwatch put-managed-insight-rules --managed-rules <value>

Impatto Potenziale: Difficoltà nel rilevare e rispondere a problemi di prestazioni e anomalie, decisioni errate e potenzialmente nascondere attività malevole o guasti di sistema.

cloudwatch:DisableInsightRules, cloudwatch:EnableInsightRules

Disabilitando regole di insight critiche, un attaccante potrebbe effettivamente accecare l'organizzazione rispetto a metriche chiave di prestazioni e sicurezza. Al contrario, abilitando o configurando regole fuorvianti, potrebbe essere possibile generare dati falsi, creare rumore o nascondere attività malevole.

bash
aws cloudwatch disable-insight-rules --rule-names <value>
aws cloudwatch enable-insight-rules --rule-names <value>

Impatto Potenziale: Confusione tra il team operativo, portando a risposte ritardate a problemi reali e azioni non necessarie basate su falsi allarmi.

cloudwatch:DeleteMetricStream , cloudwatch:PutMetricStream , cloudwatch:PutMetricData

Un attaccante con i permessi cloudwatch:DeleteMetricStream , cloudwatch:PutMetricStream sarebbe in grado di creare e cancellare flussi di dati metrici, compromettendo la sicurezza, il monitoraggio e l'integrità dei dati:

  • Creare flussi malevoli: Creare flussi metrici per inviare dati sensibili a destinazioni non autorizzate.
  • Manipolazione delle risorse: La creazione di nuovi flussi metrici con dati eccessivi potrebbe produrre molto rumore, causando allarmi errati e mascherando problemi reali.
  • Interruzione del monitoraggio: Cancellando i flussi metrici, gli attaccanti interromperebbero il flusso continuo di dati di monitoraggio. In questo modo, le loro attività malevole sarebbero efficacemente nascoste.

Allo stesso modo, con il permesso cloudwatch:PutMetricData, sarebbe possibile aggiungere dati a un flusso metrico. Questo potrebbe portare a un DoS a causa della quantità di dati impropri aggiunti, rendendolo completamente 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>
aws cloudwatch put-metric-data --namespace <value> [--metric-data <value>] [--metric-name <value>] [--timestamp <value>] [--unit <value>] [--value <value>] [--dimensions <value>]

Esempio di aggiunta di dati corrispondenti al 70% di utilizzo della CPU su una determinata istanza EC2:

bash
aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg"

Impatto Potenziale: Interruzione nel flusso dei dati di monitoraggio, che influisce sulla rilevazione di anomalie e incidenti, manipolazione delle risorse e aumento dei costi a causa della creazione di flussi di metriche eccessivi.

cloudwatch:StopMetricStreams, cloudwatch:StartMetricStreams

Un attaccante controllerebbe il flusso dei flussi di dati metrici interessati (ogni flusso di dati se non ci sono restrizioni sulle risorse). Con il permesso cloudwatch:StopMetricStreams, gli attaccanti potrebbero nascondere le loro attività malevole fermando flussi di metriche critiche.

bash
aws cloudwatch stop-metric-streams --names <value>
aws cloudwatch start-metric-streams --names <value>

Impatto Potenziale: Interruzione nel flusso dei dati di monitoraggio, influenzando la rilevazione di anomalie e incidenti.

cloudwatch:TagResource, cloudwatch:UntagResource

Un attaccante sarebbe in grado di aggiungere, modificare o rimuovere tag dalle risorse di CloudWatch (attualmente solo allarmi e regole di Contributor Insights). Questo potrebbe interrompere le politiche di controllo degli accessi della tua organizzazione basate sui tag.

bash
aws cloudwatch tag-resource --resource-arn <value> --tags <value>
aws cloudwatch untag-resource --resource-arn <value> --tag-keys <value>

Impatto Potenziale: Interruzione delle politiche di controllo accessi basate su tag.

Riferimenti

tip

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) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks