[Перевод] Обзор безопасности конфигурации AWS Cloud с использованием Nuclei Templates

В новой версии v9.8.5 Nuclei Templates были добавлены шаблоны для проверки конфигурации AWS Cloud. В этом посте мы обсудим автоматизацию проверки некорректных конфигураций в облаке, создание пользовательских проверок AWS и обмен результатами на платформе PDCP Cloud для дальнейшего анализа.

Обзор безопасности конфигурации AWS Cloud, также известный как AWS Cloud Config Review или AWS Cloud Audit в пентестерских кругах, — это важная процедура для оценки уровня безопасности Amazon Web Services (AWS). Под этим подразумевается тщательное исследование конфигураций AWS для проверки их оптимальности в защите данных и сервисов. Такой всесторонний анализ охватывает различные аспекты инфраструктуры AWS, включая хранилища, базы данных и приложения, для обеспечения соответствия установленным протоколам безопасности. Выявляя потенциальные уязвимости и области для улучшения, этот обзор помогает укрепить защиту, снижая риск несанкционированного доступа и утечек данных.

Основные ключевые действия, связанные с обзором конфигурации безопасности AWS Cloud

  1. Проверка управления доступом и идентификацией (IAM): Оценка того, кто к каким ресурсам имеет доступ в AWS. Это обеспечивает доступ только нужным лицам к конфиденциальной информации или критическим системам.

  2. Проверка конфигураций сервисов: Анализ настроек AWS сервисов, например, проверка приватности хранилищ S3 и недоступности баз данных через интернет, если это не требуется.

  3. Мониторинг и логирование: Убедиться, что системы отслеживают активность в среде AWS. В случае возникновения проблемы с безопасностью логи позволят восстановить последовательность событий.

  4. Аудит конфигурации сети: Анализ сетевых настроек внутри AWS, таких как группы безопасности и списки управления доступом, чтобы убедиться в их защите от несанкционированного доступа.

  5. Проверка на соответствие: Проверка соответствия конфигураций AWS специфическим правилам, законам о защите данных или отраслевым стандартам.

  6. Оценка уязвимостей: Сканирование AWS среды на наличие слабых мест, через которые злоумышленники могут получить доступ. Это помогает устранить уязвимости до их эксплуатации.

  7. Оценка лучших результатов: Анализ конфигураций на соответствие рекомендуемым практикам безопасности для оптимальной защиты ресурсов AWS.

  8. Устранение неполадок и создание отчетов: Обзор предоставляет практические рекомендации по устранению выявленных уязвимостей или нарушений соответствия. Генерируются детализированные отчеты, которые освещают пробелы в безопасности, несоответствия и дают рекомендации по их устранению. Это способствует принятию взвешенных решений для повышения уровня безопасности.

Мы считаем, что процесс обзора конфигурации AWS cloud чрезмерно усложнен и на практике вызывает много проблем. Поэтому мы решили упростить его, создав проверку безопасности для AWS Cloud, используя простой формат YAML, применяемый в Nuclei. Эти шаблоны созданы для выполнения всех основных проверок (конфигурации, логирования, на соответствие и на лучшие результаты). Используя эти шаблоны, мы можем легко создавать подробный отчет на нашей облачной платформе с мерами по устранению уязвимостей. Такой упрощенный подход делает процесс обзоров более удобным для компаний, так и для тестировщиков на проникновение.

Что такое шаблоны Code Protocol?

Nuclei позволяет пользователям выполнять внешний код в операционной системе хоста, предоставляя исследователям в области безопасности, пентестерам и разработчикам возможность расширять свои возможности за пределами стандартного тестирования на основе протоколов. Эта функция позволяет взаимодействовать с базовой операционной системой, облегчая выполнение пользовательских скриптов или команд для решения широкого спектра задач, включая настройку системы, работу с файлами и взаимодействие с сетью. Такой контроль и адаптивность позволяют пользователям настраивать рабочие процессы тестирования безопасности в соответствии с конкретными потребностями.

Поскольку шаблоны кода могут выполнять команды на хостах, пользователям сначала необходимо подписать шаблон своими ключами, и такие шаблоны не включаются в стандартные способы сканирования. Для использования этих шаблонов необходимо подписать их с помощью флага -sign. После подписания вы можете запустить шаблоны, используя флаг -code.

В следующем примере показано, как мы можем легко выполнить команду aws-cli непосредственно в шаблоне. Однако, в отличие от других шаблонов, которые выполняются на целевых хостах, этот будет выполнять команду на нашем собственном хосте.

id: aws-config-review
info:
  name: AWS Cloud Config Review Example
  author: princechaddha
  severity: info
  description: |
    Checks if AWS CLI is set up on the environment.
  reference:
    - https://aws.amazon.com/cli/
  tags: cloud,devops,aws,amazone,aws-cloud-config
self-contained: true
code:
  - engine:
      - sh
      - bash
    source: |
      aws sts get-caller-identity --output json
    matchers:
      - type: word
        words:
          - '"UserId"'
    extractors:
      - type: json
        name: account
        internal: true
        json:
          - '.Account'

Пример №1:

В этом примере мы создадим шаблон, который обнаруживает публично доступные S3-бакеты, что является распространенной причиной утечек данных.

  • Мы установили параметр self-contained: true, так как, в отличие от обычных шаблонов Nuclei, которые требуют целевого хоста, шаблоны кода работают независимо от какого-либо хоста.

  • Блок кода начинается с указания движка, который мы хотим использовать для выполнения команды, а затем идет сама команда в разделе source.

  • После блока info мы добавили блок flow, который управляет последовательностью выполнения шаблона. Изначально выполняется блок code(1), который включает в себя экстрактор, извлекающий имена всех доступных S3-бакетов и сохраняющий их в массив buckets. Затем цикл for проходит по всем бакетам и выполняет второй блок кода, подставляя переменную bucket во вторую команду.

  • Второй блок кода выполняет команду AWS CLI aws s3api get-bucket-acl --bucket $bucket —query 'Grants[?(Grantee.URI==http://acs.amazonaws.com/groups/global/AllUsers)]', заменяя имя бакета переменной $bucket, полученной в первой команде.

  • С помощью matcher проверяется, есть ли у бакета разрешение на чтение (READ).

  • Наконец, последний экстрактор выводит список бакетов с публичным доступом.

id: s3-public-read
info:
  name: S3 Bucket with Public READ Access
  author: princechaddha
  severity: critical
  description: |
    Verifies that Amazon S3 buckets do not permit public 'READ' (LIST) access to anonymous users, protecting against unauthorized data exposure
  reference:
    - https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-acl.html
  tags: cloud,devops,aws,amazon,s3,aws-cloud-config
flow: |
  code(1)
  for(let bucketName of iterate(template.buckets)){
    set("bucket", bucketName)
    code(2)
  }
self-contained: true
code:
  - engine:
      - sh
      - bash
    source: |
      aws s3api list-buckets --query 'Buckets[*].Name'
    extractors:
      - type: json # type of the extractor
        internal: true
        name: buckets
        json:
          - '.[]'
  - engine:
      - sh
      - bash
    source: |
        aws s3api get-bucket-acl --bucket $bucket --query 'Grants[?(Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`)]'
    matchers:
      - type: word
        words:
          - '"Permission": "READ"'
    extractors:
      - type: dsl
        dsl:
          - '"The S3 bucket " + bucket +" have public READ access"'

Пример №2:

Аналогичным образом, в следующем шаблоне мы проверяем наличие общедоступных снимков RDS.

id: rds-public-snapshot
info:
  name: RDS Public Snapshot Exposure
  author: princechaddha
  severity: high
  description: |
    Checks if AWS RDS database snapshots are publicly accessible, risking exposure of sensitive data.
  impact: |
    Public snapshots can expose sensitive data to unauthorized users, leading to potential data breaches.
  remediation: |
    Modify the snapshot's visibility settings to ensure it is not public, only shared with specific AWS accounts.
  reference:
    - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html
  tags: cloud,devops,aws,amazon,rds,aws-cloud-config
variables:
  region: "ap-northeast-1"
flow: |
  code(1)
  for(let RDPsnaps of iterate(template.snapshots)){
    set("snapshot", RDPsnaps)
    code(2)
  }
self-contained: true
code:
  - engine:
      - sh
      - bash
    source: |
      aws rds describe-db-snapshots  --region $region  --snapshot-type manual  --output json  --query 'DBSnapshots[*].DBSnapshotIdentifier'
    extractors:
      - type: json
        name: snapshots
        internal: true
        json:
          - '.[]'
  - engine:
      - sh
      - bash
    source: |
         aws rds describe-db-snapshot-attributes --region $region --db-snapshot-identifier $snapshot  --query 'DBSnapshotAttributesResult.DBSnapshotAttributes'
    matchers:
      - type: word
        words:
          - '"all"'
    extractors:
      - type: dsl
        dsl:
          - '"RDS snapshot " + snapshot + " is public"'

Создание пользовательских шаблонов для конкретных задач

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

Примеры использования шаблонов Nuclei для AWS:

  • Оптимизация облачных ресурсов: Шаблоны Nuclei могут помочь в проверке оптимальности использования ресурсов AWS. Например, шаблон может проверять, включено ли кэширование в CloudFront или корректно ли настроены записи DNS в Route 53.

  • Проверка развертывания: Шаблоны могут проверять успешность развертывания и соответствие развернутой версии ожидаемой. Это можно сделать, например, с помощью pipeline в CodePipeline.

  • Восстановление после сбоев: Шаблоны могут проверять корректность настроек ресурсов для восстановления после аварий. Например, можно проверить, настроены ли экземпляры RDS на использование Multi-AZ развертывания.

  • Соответствие требованиям безопасности: Шаблоны могут помочь обеспечить соответствие требованиям безопасности. Например, шаблон может проверить, зашифрованы ли все бакеты S3.

  • Оптимизация затрат: Шаблоны могут проверять недоиспользуемые экземпляры EC2, которые можно завершить или перевести на более маленький тип экземпляра для снижения затрат.

Запуск шаблонов проверки облачной конфигурации AWS

Чтобы использовать шаблоны для проверки конфигурации облака, сначала нужно настроить среду. Эта настройка похожа на использование aws-cli, где вы либо добавляете aws_access_key_id и aws_secret_access_key в файл ~/.aws/credentials или экспортируете их как переменные среды.

В Nuclei-Templates мы ввели концепцию профилей, которые позволяют пользователям запускать определённый набор шаблонов, предназначенных для конкретного случая использования. Для запуска шаблонов AWS у нас есть профиль под названием aws-cloud-config.

После правильной настройки среды пользователи могут выполнить следующий шаблон, чтобы убедиться, что всё настроено правильно, прежде чем запускать профиль.

nuclei -t /path/to/aws-template.yaml

Если шаблон совпадает, это означает, что в среде установлены все необходимые инструменты и настроен интерфейс командной строки. Затем пользователи могут выполнить следующую команду, чтобы запустить все шаблоны конфигурации AWS.

В настоящее время в шаблонах для региональных сервисов регион жестко задан как us-east-1 в шаблонах для региональных сервисов. Пользователи могут передать другую переменную региона через интерфейс командной строки при запуске шаблона или обновить регион непосредственно в файле профиля.

Загрузка результатов на облачную платформу ProjectDiscovery

Теперь мы запустим сканирование с использованием нашего профиля сканирования AWS config. Прежде чем мы начнем, пентестерам или компаниям будет очень полезно сохранить результаты сканирования для создания отчетов или внесения исправлений. Чтобы упростить это, вы можете использовать флаг -cloud-upload для загрузки результатов в PDCP.

Чтобы загрузить результаты в облако, вам необходимо получить токен аутентификации. Вот шаги, которые необходимо выполнить:

  • Перейдите на страницу PDCP Cloud и войдите в свою учетную запись.

  • Нажмите на фотографию своего профиля в правом верхнем углу и выберите ключ API.

  • Скопируйте свой ключ API и введите в своем терминале nuclei -auth .

Теперь все готово для запуска шаблонов!

nuclei -config ~/nuclei-templates/profiles/aws-cloud-config.yml -cloud-upload

7915bd5f2c9aed871a673809e81358c6.png

Теперь, когда у нас есть множество результатов, было бы очень удобно просмотреть их в облаке. Просто войдите в PDCP Cloud, и вы увидите скан, созданный с результатами.

097225597aff3dad0b4883bfc177bf3b.png

Мы добавили более 95 шаблонов для таких сервисов, как ACM, CloudTrail, EC2, RDS, VPC, CloudWatch, IAM и S3, и приглашаем сообщество поделиться своими отзывами. Мы ожидаем, что это число будет расти по мере того, как сообщество специалистов по безопасности продолжает вносить свой вклад и сотрудничать.

Заключение

Обзор конфигурации облака с помощью Nuclei — это мощный способ автоматизировать проверки безопасности и конфигурации в средах AWS. Благодаря возможностям создания и выполнения шаблонов для выполнения команд через AWS CLI, вы можете адаптировать проверки в зависимости от конкретных требований вашей организации.

Шаблоны могут быть использованы для проверки различных аспектов конфигурации облака, включая безопасность, оптимизацию затрат и соответствие требованиям.

© Habrahabr.ru