Wazuh AWS - мониторинг сервисов Amazon Web Services

Wazuh обеспечивает мониторинг безопасности Amazon Web Services через модуль aws-s3, который собирает журналы из S3-бакетов и обрабатывает события облачных сервисов AWS. Модуль поддерживает более 15 сервисов AWS, включая CloudTrail, GuardDuty, VPC Flow Logs, WAF и другие. Интеграция позволяет централизовать анализ облачных событий в Wazuh для обнаружения несанкционированного доступа, изменений конфигурации и сетевых аномалий.

Поддерживаемые сервисы AWS

Модуль aws-s3 обрабатывает журналы следующих сервисов:

СервисТип бакетаНазначение
AWS CloudTrailcloudtrailЖурнал вызовов AWS API и действий пользователей
Amazon VPC Flow LogsvpcflowСетевой трафик в виртуальных частных облаках
Amazon GuardDutyguarddutyОбнаружение угроз и аномалий
AWS WAFwafЖурналы веб-фаервола
Amazon MaciecustomОбнаружение конфиденциальных данных в S3
AWS ConfigconfigОтслеживание изменений конфигурации ресурсов
AWS Trusted AdvisorcustomРекомендации по безопасности и оптимизации
AWS KMScustomОперации с ключами шифрования
Amazon InspectorcustomОценка уязвимостей EC2-инстансов
Amazon CloudWatch LogscloudwatchЖурналы приложений и системные логи
Amazon S3 Server Accessserver_accessЖурналы доступа к S3-бакетам
Amazon ECR Image ScanningcustomСканирование образов контейнеров
Elastic Load Balancer (ALB/CLB/NLB)alb / clb / nlbЖурналы балансировщиков нагрузки
Amazon Security Lakesecurity_lakeЦентрализованное хранилище событий безопасности
AWS Security HubcustomАгрегация результатов безопасности

Конфигурация модуля aws-s3

Модуль настраивается в файле ossec.conf на сервере Wazuh или агенте.

Базовая конфигурация для CloudTrail

<wodle name="aws-s3">
  <disabled>no</disabled>
  <interval>10m</interval>
  <run_on_start>yes</run_on_start>
  <skip_on_error>yes</skip_on_error>
  <bucket type="cloudtrail">
    <name>my-cloudtrail-bucket</name>
    <aws_profile>default</aws_profile>
  </bucket>
</wodle>

Конфигурация для нескольких сервисов

<wodle name="aws-s3">
  <disabled>no</disabled>
  <interval>10m</interval>
  <run_on_start>yes</run_on_start>
  <skip_on_error>yes</skip_on_error>

  <bucket type="cloudtrail">
    <name>my-cloudtrail-bucket</name>
    <aws_profile>production</aws_profile>
  </bucket>

  <bucket type="vpcflow">
    <name>my-vpcflow-bucket</name>
    <aws_profile>production</aws_profile>
  </bucket>

  <bucket type="guardduty">
    <name>my-guardduty-bucket</name>
    <aws_profile>production</aws_profile>
  </bucket>

  <bucket type="waf">
    <name>my-waf-bucket</name>
    <aws_profile>production</aws_profile>
  </bucket>

  <bucket type="config">
    <name>my-config-bucket</name>
    <aws_profile>production</aws_profile>
  </bucket>
</wodle>

Параметры модуля

ПараметрЗначение по умолчаниюОписание
disablednoВключение или отключение модуля
interval10mИнтервал опроса S3-бакетов (s/m/h/d)
run_on_startyesВыполнение при старте сервиса
skip_on_erroryesПродолжение работы при ошибке обработки
only_logs_after-Сбор логов начиная с указанной даты (YYYY-MMM-DD)
regionsвсеОграничение по регионам AWS
aws_account_id-Фильтрация по идентификатору аккаунта
path-Префикс каталога в S3-бакете

Структура каталогов CloudTrail в S3

Логи CloudTrail сохраняются в S3 по следующей структуре:

<BUCKET>/<PREFIX>/AWSLogs/<ACCOUNT_ID>/CloudTrail/<REGION>/<YEAR>/<MONTH>/<DAY>/

Методы аутентификации

Модуль aws-s3 поддерживает три метода аутентификации в AWS.

Профили с ключами доступа

Учетные данные хранятся в файле /root/.aws/credentials:

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

Конфигурация региона в /root/.aws/config:

[default]
region = us-east-1

[profile production]
region = eu-west-1

Ссылка на профиль в ossec.conf:

<bucket type="cloudtrail">
  <name>my-cloudtrail-bucket</name>
  <aws_profile>production</aws_profile>
</bucket>

IAM-роль для EC2

Рекомендуемый метод при работе Wazuh на EC2-инстансе. Временные учетные данные получаются автоматически через Instance Metadata Service. Конфигурация не требует указания профиля или ключей:

<bucket type="cloudtrail">
  <name>my-cloudtrail-bucket</name>
</bucket>

Для использования этого метода назначьте EC2-инстансу IAM-роль с необходимыми разрешениями через Instance Profile.

Принятие роли (Assume Role)

Позволяет получить временные учетные данные для доступа к ресурсам другого аккаунта AWS. Требует настройки доверительных отношений между аккаунтами:

<bucket type="cloudtrail">
  <name>my-cloudtrail-bucket</name>
  <aws_profile>default</aws_profile>
  <iam_role_arn>arn:aws:iam::123456789012:role/WazuhCloudTrailRole</iam_role_arn>
</bucket>

Параметр iam_role_arn содержит ARN IAM-роли, которую модуль примет через STS AssumeRole.

Интеграция с SQS

Для масштабируемой доставки логов из S3 в Wazuh используется Amazon SQS (Simple Queue Service). При большом объеме логов SQS устраняет задержки, связанные с перебором объектов в бакете.

Принцип работы

  1. S3-бакет настроен на отправку уведомлений о новых объектах в SQS-очередь
  2. Модуль Wazuh опрашивает SQS-очередь вместо прямого перебора S3
  3. Каждое сообщение SQS содержит ключ нового объекта в S3
  4. Модуль скачивает и обрабатывает только указанные объекты

Настройка S3-уведомлений

Создайте Event Notification в настройках S3-бакета:

  • Events: s3:ObjectCreated:*
  • Destination: SQS Queue
  • Queue ARN: arn:aws:sqs:<REGION>:<ACCOUNT_ID>:<QUEUE_NAME>

Конфигурация SQS в ossec.conf

<wodle name="aws-s3">
  <disabled>no</disabled>
  <interval>5m</interval>
  <run_on_start>yes</run_on_start>
  <skip_on_error>yes</skip_on_error>
  <bucket type="cloudtrail">
    <name>my-cloudtrail-bucket</name>
    <aws_profile>default</aws_profile>
    <sqs_name>my-cloudtrail-sqs-queue</sqs_name>
  </bucket>
</wodle>

Преимущества SQS-интеграции

  • Более быстрая обработка новых логов (push вместо pull)
  • Снижение нагрузки на S3 API (меньше вызовов ListObjects)
  • Поддержка мультиаккаунтных развертываний
  • Автоматическая обработка ошибок через Dead Letter Queue

Необходимые IAM-разрешения

Для корректной работы модуля aws-s3 IAM-политика должна включать следующие разрешения:

Базовые разрешения для S3

ДействиеРесурсНазначение
s3:GetObjectarn:aws:s3:::<BUCKET>/*Чтение объектов из бакета
s3:ListBucketarn:aws:s3:::<BUCKET>Перечисление объектов в бакете

Разрешения для SQS (при использовании очереди)

ДействиеРесурсНазначение
sqs:ReceiveMessagearn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE>Получение сообщений из очереди
sqs:DeleteMessagearn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE>Удаление обработанных сообщений
sqs:GetQueueUrlarn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE>Получение URL очереди

Разрешения для Assume Role

ДействиеРесурсНазначение
sts:AssumeRolearn:aws:iam::<ACCOUNT>:role/<ROLE>Принятие IAM-роли в целевом аккаунте

Пример IAM-политики

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-cloudtrail-bucket",
        "arn:aws:s3:::my-cloudtrail-bucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sqs:ReceiveMessage",
        "sqs:DeleteMessage",
        "sqs:GetQueueUrl"
      ],
      "Resource": "arn:aws:sqs:us-east-1:123456789012:my-cloudtrail-sqs-queue"
    }
  ]
}

Анализ CloudTrail

CloudTrail фиксирует все вызовы AWS API, предоставляя полную картину действий пользователей и сервисов в аккаунте.

Обнаружение несанкционированных вызовов API

Wazuh анализирует события CloudTrail с кодом ошибки AccessDenied или UnauthorizedAccess и генерирует алерты. Пример события:

{
  "rule": {
    "id": "80253",
    "level": 3,
    "description": "AWS CloudTrail: unauthorized API call"
  },
  "data": {
    "aws": {
      "eventName": "DescribeInstances",
      "errorCode": "AccessDenied",
      "userIdentity": {
        "type": "IAMUser",
        "userName": "suspicious-user"
      },
      "sourceIPAddress": "198.51.100.42",
      "awsRegion": "us-east-1"
    }
  }
}

Обнаружение входа под root-аккаунтом

Вход под root-аккаунтом AWS генерирует алерт высокого уровня:

{
  "rule": {
    "id": "80302",
    "level": 8,
    "description": "AWS CloudTrail: Root account login detected"
  },
  "data": {
    "aws": {
      "eventName": "ConsoleLogin",
      "userIdentity": {
        "type": "Root",
        "arn": "arn:aws:iam::123456789012:root"
      },
      "responseElements": {
        "ConsoleLogin": "Success"
      },
      "sourceIPAddress": "203.0.113.15"
    }
  }
}

Изменения Security Groups

Wazuh обнаруживает добавление разрешающих правил в группы безопасности:

{
  "rule": {
    "id": "80447",
    "level": 5,
    "description": "AWS CloudTrail: Security group ingress rule added"
  },
  "data": {
    "aws": {
      "eventName": "AuthorizeSecurityGroupIngress",
      "requestParameters": {
        "groupId": "sg-0a1b2c3d4e5f67890",
        "ipPermissions": {
          "items": [{
            "fromPort": 22,
            "toPort": 22,
            "ipRanges": {"items": [{"cidrIp": "0.0.0.0/0"}]}
          }]
        }
      }
    }
  }
}

Создание и удаление IAM-пользователей

{
  "rule": {
    "id": "80258",
    "level": 5,
    "description": "AWS CloudTrail: IAM user created"
  },
  "data": {
    "aws": {
      "eventName": "CreateUser",
      "requestParameters": {
        "userName": "new-admin-user"
      },
      "userIdentity": {
        "userName": "admin"
      }
    }
  }
}

Интеграция GuardDuty

Amazon GuardDuty - это управляемый сервис обнаружения угроз, который анализирует потоки данных из CloudTrail, VPC Flow Logs и DNS-логов. Wazuh импортирует находки GuardDuty и обрабатывает их как алерты.

Конфигурация

<bucket type="guardduty">
  <name>my-guardduty-bucket</name>
  <aws_profile>default</aws_profile>
</bucket>

Пример алерта GuardDuty

{
  "rule": {
    "id": "80301",
    "level": 8,
    "description": "AWS GuardDuty: Unusual API call from known malicious IP"
  },
  "data": {
    "aws": {
      "service": {
        "serviceName": "guardduty",
        "action": {
          "actionType": "AWS_API_CALL",
          "awsApiCallAction": {
            "api": "DescribeInstances",
            "callerType": "Remote IP"
          }
        }
      },
      "severity": 8,
      "title": "API DescribeInstances was invoked from a known malicious IP address",
      "type": "Recon:EC2/MaliciousIPCaller.Custom"
    }
  }
}

Типы угроз GuardDuty

GuardDuty классифицирует находки по категориям:

  • Recon - разведка (сканирование портов, перечисление ресурсов)
  • UnauthorizedAccess - несанкционированный доступ
  • Trojan - обнаружение троянского ПО
  • CryptoCurrency - майнинг криптовалют
  • Backdoor - бэкдоры
  • Exfiltration - эксфильтрация данных

Мониторинг VPC Flow Logs

VPC Flow Logs фиксируют сетевой трафик на уровне сетевых интерфейсов, подсетей и VPC.

Конфигурация

<bucket type="vpcflow">
  <name>my-vpcflow-bucket</name>
  <aws_profile>default</aws_profile>
</bucket>

Пример алерта VPC Flow Logs

{
  "rule": {
    "id": "80401",
    "level": 4,
    "description": "AWS VPC Flow: Rejected connection attempt"
  },
  "data": {
    "aws": {
      "vpcflow": {
        "srcaddr": "198.51.100.55",
        "dstaddr": "10.0.1.25",
        "srcport": 44820,
        "dstport": 3389,
        "protocol": 6,
        "action": "REJECT"
      }
    }
  }
}

Сценарии использования

Обнаружение компрометации ключей доступа

Комбинация алертов CloudTrail позволяет выявить использование скомпрометированных ключей:

  1. Множественные вызовы API с ошибкой AccessDenied с нового IP-адреса
  2. Успешный вызов API после серии отказов
  3. Создание новых IAM-пользователей или ключей доступа

Мониторинг соответствия требованиям

  • Отслеживание изменений в политиках IAM (PCI DSS 7.1, 7.2)
  • Мониторинг шифрования данных через KMS (PCI DSS 3.4)
  • Контроль доступа к S3-бакетам с конфиденциальными данными (GDPR Art. 32)

Обнаружение латерального перемещения

  • Аномальные паттерны API-вызовов из скомпрометированного EC2
  • Доступ к ресурсам в нехарактерных регионах
  • Использование ранее неактивных IAM-ролей

Устранение неполадок

Модуль не собирает логи

  • Проверьте права доступа IAM-политики: s3:GetObject и s3:ListBucket
  • Убедитесь, что бакет содержит логи в ожидаемой структуре каталогов
  • Проверьте файл учетных данных /root/.aws/credentials
  • Просмотрите журнал модуля: /var/ossec/logs/ossec.log

Ошибка AccessDenied при чтении бакета

  • Убедитесь, что IAM-политика назначена корректному пользователю или роли
  • Проверьте политику бакета (Bucket Policy) на отсутствие явных запретов
  • При использовании Assume Role проверьте доверительные отношения роли
  • Проверьте, что регион в конфигурации совпадает с регионом бакета

Дублирование алертов

  • Используйте only_logs_after для ограничения начальной даты сбора
  • Не используйте --reparse в production без необходимости
  • Проверьте, что один бакет не указан в нескольких блоках конфигурации

Задержки в обработке логов

  • Уменьшите значение interval (например, до 5m)
  • Настройте SQS-интеграцию для push-доставки уведомлений
  • Используйте фильтрацию по регионам (regions) для уменьшения объема данных
  • Настройте Dead Letter Queue для SQS для обработки ошибочных сообщений

Зависимости Python

Модуль требует Python 3 и библиотеку boto3. Установка на сервере Wazuh:

/var/ossec/framework/python/bin/pip3 install boto3

Связанные разделы

Last updated on