Обзор безопасности конфигурации 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
- Проверка управления доступом и идентификацией (IAM): Оценка того, кто к каким ресурсам имеет доступ в AWS. Это обеспечивает доступ только нужным лицам к конфиденциальной информации или критическим системам.
- Проверка конфигураций сервисов: Анализ настроек AWS сервисов, например, проверка приватности хранилищ S3 и недоступности баз данных через интернет, если это не требуется.
- Мониторинг и логирование: Убедиться, что системы отслеживают активность в среде AWS. В случае возникновения проблемы с безопасностью логи позволят восстановить последовательность событий.
- Аудит конфигурации сети: Анализ сетевых настроек внутри AWS, таких как группы безопасности и списки управления доступом, чтобы убедиться в их защите от несанкционированного доступа.
- Проверка на соответствие: Проверка соответствия конфигураций AWS специфическим правилам, законам о защите данных или отраслевым стандартам.
- Оценка уязвимостей: Сканирование AWS среды на наличие слабых мест, через которые злоумышленники могут получить доступ. Это помогает устранить уязвимости до их эксплуатации.
- Оценка лучших результатов: Анализ конфигураций на соответствие рекомендуемым практикам безопасности для оптимальной защиты ресурсов AWS.
- Устранение неполадок и создание отчетов: Обзор предоставляет практические рекомендации по устранению выявленных уязвимостей или нарушений соответствия. Генерируются детализированные отчеты, которые освещают пробелы в безопасности, несоответствия и дают рекомендации по их устранению. Это способствует принятию взвешенных решений для повышения уровня безопасности.
Мы считаем, что процесс обзора конфигурации 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'
В этом примере мы создадим шаблон, который обнаруживает публично доступные 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"'
Аналогичным образом, в следующем шаблоне мы проверяем наличие общедоступных снимков 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 <your-api-key>.
Теперь все готово для запуска шаблонов!
nuclei -config ~/nuclei-templates/profiles/aws-cloud-config.yml -cloud-upload
Теперь, когда у нас есть множество результатов, было бы очень удобно просмотреть их в облаке. Просто войдите в PDCP Cloud, и вы увидите скан, созданный с результатами.
Мы добавили более 95 шаблонов для таких сервисов, как ACM, CloudTrail, EC2, RDS, VPC, CloudWatch, IAM и S3, и приглашаем сообщество поделиться своими отзывами. Мы ожидаем, что это число будет расти по мере того, как сообщество специалистов по безопасности продолжает вносить свой вклад и сотрудничать.
Обзор конфигурации облака с помощью Nuclei — это мощный способ автоматизировать проверки безопасности и конфигурации в средах AWS. Благодаря возможностям создания и выполнения шаблонов для выполнения команд через AWS CLI, вы можете адаптировать проверки в зависимости от конкретных требований вашей организации.
Шаблоны могут быть использованы для проверки различных аспектов конфигурации облака, включая безопасность, оптимизацию затрат и соответствие требованиям.