AWS - CloudWatch Enum

Support HackTricks

CloudWatch

CloudWatch coleta dados de monitoramento e operação na forma de logs/métricas/eventos, fornecendo uma visão unificada dos recursos AWS, aplicações e serviços. O evento de log do CloudWatch tem uma limitação de tamanho de 256KB em cada linha de log. Ele pode definir alarmas de alta resolução, visualizar logs e métricas lado a lado, tomar ações automatizadas, solucionar problemas e descobrir insights para otimizar aplicações.

Você pode monitorar, por exemplo, logs do CloudTrail. Eventos que são monitorados:

Key concepts

Namespaces

Um namespace é um contêiner para métricas do CloudWatch. Ele ajuda a categorizar e isolar métricas, facilitando a gestão e análise delas.

  • Exemplos: AWS/EC2 para métricas relacionadas ao EC2, AWS/RDS para métricas do RDS.

Metrics

Métricas são pontos de dados coletados ao longo do tempo que representam o desempenho ou utilização dos recursos AWS. Métricas podem ser coletadas de serviços AWS, aplicações personalizadas ou integrações de terceiros.

  • Exemplo: CPUUtilization, NetworkIn, DiskReadOps.

Dimensions

Dimensões são pares chave-valor que fazem parte das métricas. Elas ajudam a identificar de forma única uma métrica e fornecem contexto adicional, sendo 30 o número máximo de dimensões que podem ser associadas a uma métrica. Dimensões também permitem filtrar e agregar métricas com base em atributos específicos.

  • Exemplo: Para instâncias EC2, as dimensões podem incluir InstanceId, InstanceType e AvailabilityZone.

Statistics

Estatísticas são cálculos matemáticos realizados sobre dados de métricas para resumi-los ao longo do tempo. Estatísticas comuns incluem Média, Soma, Mínimo, Máximo e Contagem de Amostras.

  • Exemplo: Calcular a média de utilização da CPU ao longo de um período de uma hora.

Units

Unidades são o tipo de medida associado a uma métrica. Unidades ajudam a fornecer contexto e significado aos dados da métrica. Unidades comuns incluem Percent, Bytes, Seconds, Count.

  • Exemplo: CPUUtilization pode ser medido em Percent, enquanto NetworkIn pode ser medido em Bytes.

CloudWatch Features

Dashboard

CloudWatch Dashboards fornecem visões personalizáveis das suas métricas do AWS CloudWatch. É possível criar e configurar dashboards para visualizar dados e monitorar recursos em uma única visão, combinando diferentes métricas de vários serviços AWS.

Principais Recursos:

  • Widgets: Blocos de construção de dashboards, incluindo gráficos, texto, alarmes e mais.

  • Personalização: Layout e conteúdo podem ser personalizados para atender a necessidades específicas de monitoramento.

Exemplo de Caso de Uso:

  • Um único dashboard mostrando métricas chave para todo o seu ambiente AWS, incluindo instâncias EC2, bancos de dados RDS e buckets S3.

Metric Stream and Metric Data

Metric Streams no AWS CloudWatch permitem que você transmita continuamente métricas do CloudWatch para um destino de sua escolha em quase tempo real. Isso é particularmente útil para monitoramento avançado, análises e dashboards personalizados usando ferramentas fora da AWS.

Metric Data dentro dos Metric Streams refere-se às medições reais ou pontos de dados que estão sendo transmitidos. Esses pontos de dados representam várias métricas como utilização da CPU, uso de memória, etc., para recursos AWS.

Exemplo de Caso de Uso:

  • Enviando métricas em tempo real para um serviço de monitoramento de terceiros para análise avançada.

  • Arquivando métricas em um bucket Amazon S3 para armazenamento a longo prazo e conformidade.

Alarm

CloudWatch Alarms monitoram suas métricas e realizam ações com base em limites predefinidos. Quando uma métrica ultrapassa um limite, o alarme pode realizar uma ou mais ações, como enviar notificações via SNS, acionar uma política de autoescalonamento ou executar uma função AWS Lambda.

Componentes Principais:

  • Limite: O valor em que o alarme é acionado.

  • Períodos de Avaliação: O número de períodos sobre os quais os dados são avaliados.

  • Pontos de Dados para Alarme: O número de períodos com um limite alcançado necessário para acionar o alarme.

  • Ações: O que acontece quando um estado de alarme é acionado (por exemplo, notificar via SNS).

Exemplo de Caso de Uso:

  • Monitorando a utilização da CPU da instância EC2 e enviando uma notificação via SNS se exceder 80% por 5 minutos consecutivos.

Anomaly Detectors

Anomaly Detectors usam aprendizado de máquina para detectar automaticamente anomalias em suas métricas. Você pode aplicar a detecção de anomalias a qualquer métrica do CloudWatch para identificar desvios de padrões normais que podem indicar problemas.

Componentes Principais:

  • Treinamento de Modelo: O CloudWatch usa dados históricos para treinar um modelo e estabelecer como é o comportamento normal.

  • Banda de Detecção de Anomalias: Uma representação visual da faixa esperada de valores para uma métrica.

Exemplo de Caso de Uso:

  • Detectando padrões incomuns de utilização da CPU em uma instância EC2 que podem indicar uma violação de segurança ou problema de aplicação.

Insight Rules and Managed Insight Rules

Insight Rules permitem que você identifique tendências, detecte picos ou outros padrões de interesse em seus dados de métricas usando expressões matemáticas poderosas para definir as condições sob as quais ações devem ser tomadas. Essas regras podem ajudá-lo a identificar anomalias ou comportamentos incomuns no desempenho e utilização de seus recursos.

Managed Insight Rules são regras de insight pré-configuradas fornecidas pela AWS. Elas são projetadas para monitorar serviços AWS específicos ou casos de uso comuns e podem ser ativadas sem a necessidade de configuração detalhada.

Exemplo de Caso de Uso:

  • Monitorando o Desempenho do RDS: Ativar uma regra de insight gerenciada para o Amazon RDS que monitora indicadores-chave de desempenho, como utilização da CPU, uso de memória e I/O de disco. Se qualquer uma dessas métricas exceder limites operacionais seguros, a regra pode acionar um alerta ou ação de mitigação automatizada.

CloudWatch Logs

Permite agregar e monitorar logs de aplicações e sistemas de serviços AWS (incluindo CloudTrail) e de apps/sistemas (CloudWatch Agent pode ser instalado em um host). Logs podem ser armazenados indefinidamente (dependendo das configurações do Log Group) e podem ser exportados.

Elementos:

Log Group

Uma coleção de streams de log que compartilham as mesmas configurações de retenção, monitoramento e controle de acesso

Log Stream

Uma sequência de eventos de log que compartilham a mesma fonte

Subscription Filters

Define um padrão de filtro que corresponde a eventos em um grupo de log específico, enviando-os para o stream do Kinesis Data Firehose, stream do Kinesis ou uma função Lambda

CloudWatch Monitoring & Events

CloudWatch básico agrega dados a cada 5min (o detalhado faz isso a cada 1 min). Após a agregação, ele verifica os limites dos alarmes caso precise acionar um. Nesse caso, o CloudWatch pode estar preparado para enviar um evento e realizar algumas ações automáticas (funções AWS lambda, tópicos SNS, filas SQS, Kinesis Streams)

Agent Installation

Você pode instalar agentes dentro de suas máquinas/containers para enviar automaticamente os logs de volta ao CloudWatch.

  • Crie um papel e anexe-o à instância com permissões que permitam ao CloudWatch coletar dados das instâncias, além de interagir com o AWS Systems Manager SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)

  • Baixe e instale o agente na instância EC2 (https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip). Você pode baixá-lo de dentro da EC2 ou instalá-lo automaticamente usando o AWS Systems Manager selecionando o pacote AWS-ConfigureAWSPackage

  • Configure e inicie o CloudWatch Agent

Um grupo de logs tem muitos streams. Um stream tem muitos eventos. E dentro de cada stream, os eventos são garantidos para estarem em ordem.

Enumeration

# 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

Um atacante com essas permissões poderia comprometer significativamente a infraestrutura de monitoramento e alerta de uma organização. Ao deletar alarmes existentes, um atacante poderia desativar alertas cruciais que notificam os administradores sobre problemas críticos de desempenho, violações de segurança ou falhas operacionais. Além disso, ao criar ou modificar alarmes de métrica, o atacante também poderia enganar os administradores com alertas falsos ou silenciar alarmes legítimos, efetivamente mascarando atividades maliciosas e impedindo respostas rápidas a incidentes reais.

Além disso, com a permissão cloudwatch:PutCompositeAlarm, um atacante seria capaz de criar um loop ou ciclo de alarmes compostos, onde o alarme composto A depende do alarme composto B, e o alarme composto B também depende do alarme composto A. Nesse cenário, não é possível deletar qualquer alarme composto que faça parte do ciclo, pois sempre haverá um alarme composto que depende daquele alarme que você deseja deletar.

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

O seguinte exemplo mostra como tornar um alarme de métrica ineficaz:

  • Este alarme de métrica monitora a utilização média da CPU de uma instância EC2 específica, avalia a métrica a cada 300 segundos e requer 6 períodos de avaliação (30 minutos no total). Se a utilização média da CPU exceder 60% por pelo menos 4 desses períodos, o alarme será acionado e enviará uma notificação para o tópico SNS especificado.

  • Ao modificar o Limite para ser mais de 99%, definir o Período para 10 segundos, os Períodos de Avaliação para 8640 (já que 8640 períodos de 10 segundos equivalem a 1 dia), e os Pontos de Dados para Alarme para 8640 também, seria necessário que a utilização da CPU estivesse acima de 99% a cada 10 segundos durante todo o período de 24 horas para acionar um alarme.

{
"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"
}

Impacto Potencial: Falta de notificações para eventos críticos, problemas potenciais não detectados, alertas falsos, supressão de alertas genuínos e potencialmente detecções perdidas de incidentes reais.

cloudwatch:DeleteAlarmActions, cloudwatch:EnableAlarmActions, cloudwatch:SetAlarmState

Ao deletar ações de alarme, o atacante poderia impedir que alertas críticos e respostas automatizadas fossem acionados quando um estado de alarme é alcançado, como notificar administradores ou acionar atividades de autoescalonamento. Habilitar ou reabilitar ações de alarme de forma inadequada também poderia levar a comportamentos inesperados, seja reativando ações previamente desativadas ou modificando quais ações são acionadas, potencialmente causando confusão e desvio na resposta a incidentes.

Além disso, um atacante com a permissão poderia manipular estados de alarme, sendo capaz de criar alarmes falsos para distrair e confundir administradores, ou silenciar alarmes genuínos para ocultar atividades maliciosas em andamento ou falhas críticas do sistema.

  • Se você usar SetAlarmState em um alarme composto, o alarme composto não garante retornar ao seu estado real. Ele retorna ao seu estado real apenas uma vez que qualquer um de seus alarmes filhos muda de estado. Ele também é reavaliado se você atualizar sua configuração.

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

Impacto Potencial: Falta de notificações para eventos críticos, problemas potenciais não detectados, alertas falsos, suprimir alertas genuínos e potencialmente detecções perdidas de incidentes reais.

cloudwatch:DeleteAnomalyDetector, cloudwatch:PutAnomalyDetector

Um atacante seria capaz de comprometer a capacidade de detectar e responder a padrões ou anomalias incomuns em dados de métricas. Ao deletar detectores de anomalias existentes, um atacante poderia desativar mecanismos críticos de alerta; e ao criar ou modificar esses detectores, poderia desconfigurá-los ou criar falsos positivos para distrair ou sobrecarregar a monitoração.

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

O seguinte exemplo mostra como tornar um detector de anomalias de métricas ineficaz. Este detector de anomalias de métricas monitora a utilização média da CPU de uma instância EC2 específica, e apenas adicionando o parâmetro “ExcludedTimeRanges” com o intervalo de tempo desejado, seria suficiente para garantir que o detector de anomalias não analise ou alerte sobre dados relevantes durante esse período.

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

Impacto Potencial: Efeito direto na detecção de padrões incomuns ou ameaças à segurança.

cloudwatch:DeleteDashboards, cloudwatch:PutDashboard

Um atacante poderia comprometer as capacidades de monitoramento e visualização de uma organização ao criar, modificar ou excluir seus painéis. Essas permissões poderiam ser utilizadas para remover a visibilidade crítica sobre o desempenho e a saúde dos sistemas, alterar painéis para exibir dados incorretos ou ocultar atividades maliciosas.

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

Impacto Potencial: Perda de visibilidade de monitoramento e informações enganosas.

cloudwatch:DeleteInsightRules, cloudwatch:PutInsightRule, cloudwatch:PutManagedInsightRule

As regras de insight são usadas para detectar anomalias, otimizar o desempenho e gerenciar recursos de forma eficaz. Ao excluir regras de insight existentes, um atacante poderia remover capacidades críticas de monitoramento, deixando o sistema cego para problemas de desempenho e ameaças à segurança. Além disso, um atacante poderia criar ou modificar regras de insight para gerar dados enganosos ou ocultar atividades maliciosas, levando a diagnósticos incorretos e respostas inadequadas da equipe de operações.

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>

Impacto Potencial: Dificuldade em detectar e responder a problemas de desempenho e anomalias, tomada de decisões mal informadas e potencialmente ocultando atividades maliciosas ou falhas no sistema.

cloudwatch:DisableInsightRules, cloudwatch:EnableInsightRules

Ao desabilitar regras de insight críticas, um atacante poderia efetivamente cegar a organização em relação a métricas chave de desempenho e segurança. Por outro lado, ao habilitar ou configurar regras enganosas, poderia ser possível gerar dados falsos, criar ruído ou ocultar atividades maliciosas.

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

Impacto Potencial: Confusão entre a equipe de operações, levando a respostas atrasadas a problemas reais e ações desnecessárias com base em alertas falsos.

cloudwatch:DeleteMetricStream , cloudwatch:PutMetricStream , cloudwatch:PutMetricData

Um atacante com as permissões cloudwatch:DeleteMetricStream , cloudwatch:PutMetricStream seria capaz de criar e excluir fluxos de dados de métricas, comprometendo a segurança, monitoramento e integridade dos dados:

  • Criar fluxos maliciosos: Criar fluxos de métricas para enviar dados sensíveis a destinos não autorizados.

  • Manipulação de recursos: A criação de novos fluxos de métricas com dados excessivos poderia produzir muito ruído, causando alertas incorretos, mascarando problemas reais.

  • Interrupção do monitoramento: Ao excluir fluxos de métricas, os atacantes interromperiam o fluxo contínuo de dados de monitoramento. Dessa forma, suas atividades maliciosas estariam efetivamente ocultas.

Da mesma forma, com a permissão cloudwatch:PutMetricData, seria possível adicionar dados a um fluxo de métricas. Isso poderia levar a um DoS devido à quantidade de dados impróprios adicionados, tornando-o completamente inútil.

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

Exemplo de adição de dados correspondentes a 70% de utilização da CPU em uma determinada instância EC2:

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

Impacto Potencial: Interrupção no fluxo de dados de monitoramento, impactando a detecção de anomalias e incidentes, manipulação de recursos e aumento de custos devido à criação de fluxos de métricas excessivos.

cloudwatch:StopMetricStreams, cloudwatch:StartMetricStreams

Um atacante controlaria o fluxo dos dados de métricas afetados (cada fluxo de dados se não houver restrição de recursos). Com a permissão cloudwatch:StopMetricStreams, os atacantes poderiam ocultar suas atividades maliciosas ao parar fluxos de métricas críticos.

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

Impacto Potencial: Interrupção no fluxo de dados de monitoramento, impactando a detecção de anomalias e incidentes.

cloudwatch:TagResource, cloudwatch:UntagResource

Um atacante poderia adicionar, modificar ou remover tags de recursos do CloudWatch (atualmente apenas alarmes e regras do Contributor Insights). Isso poderia interromper as políticas de controle de acesso da sua organização com base em tags.

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

Impacto Potencial: Interrupção das políticas de controle de acesso baseadas em tags.

Referências

Support HackTricks

Last updated