Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/salesforce/cloudsplaining
Безопасность облачной инфраструктурыАнализ уязвимостейАудит конфигурацииБезопасность облачных средУправление идентификацией и доступом (IAM)Неправильная КонфигурацияТоп в Безопасность облачной инфраструктуры №8Топ в Безопасность облачных сред №9
GitHub
2.2k219135 дней назадПроверено Kitploit
salesforce/cloudsplaining

cloudsplaining

Cloudsplaining — это инструмент оценки безопасности AWS IAM, который выявляет нарушения принципа наименьших привилегий и генерирует отчет с приоритетом по рискам.

РепозиторийСайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Cloudsplaining

Cloudsplaining — это инструмент для оценки безопасности AWS IAM, который выявляет нарушения принципа минимальных привилегий и генерирует HTML-отчёт с приоритизацией рисков.

Tests Documentation Status Join the chat at https://gitter.im/cloudsplaining Twitter PyPI Python Version Downloads

' > custom-guidance.html ' > custom-appendices.html ``` # Создать отчет с пользовательским содержимым cloudsplaining scan --input-file account-data.json --output reports/
Пример отчёта

Документация

Полную документацию можно найти в проекте на ReadTheDocs.

  • Установка
  • Шпаргалка
  • Пример отчёта

Обзор

Cloudsplaining выявляет нарушения принципа минимальных привилегий в политиках AWS IAM и генерирует наглядный HTML-отчёт. Он может сканировать все политики в вашем аккаунте AWS, в нескольких аккаунтах AWS или один файл политики.

Инструмент помогает найти IAM-действия, в которых не используются ограничения ресурсов. Он также помогает расставить приоритеты при устранении уязвимостей, помечая политики IAM, которые создают следующие риски для аккаунта AWS без каких-либо ограничений:

  • Эксфильтрация данных (s3:GetObject, ssm:GetParameter, secretsmanager:GetSecretValue)
  • Изменение инфраструктуры
  • Раскрытие ресурсов (возможность изменять политики на основе ресурсов)
  • Повышение привилегий (на основе Pathfinding.cloud)
  • Утечка учётных данных

Cloudsplaining также находит роли IAM, которые могут быть использованы вычислительными сервисами AWS (такими как EC2, ECS, EKS или Lambda). Такие роли могут представлять больший риск, чем роли пользователей, особенно если вычислительный сервис AWS работает на инстансе, прямо или косвенно доступном из интернета. Обозначение таких ролей особенно полезно для пентестеров (или атакующих) в определённых сценариях. Например, если злоумышленник получает права на выполнение ssm:SendCommand и существуют привилегированные EC2-инстансы с установленным агентом SSM, он может фактически получить их привилегии. Удалённое выполнение кода через агент AWS Systems Manager уже было известным путём повышения привилегий/эксплуатации, но Cloudsplaining может упростить выявление таких случаев. См. пример отчёта.

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

Мотивация

Policy Sentry показал нам, что наконец-то стало возможным масштабируемо создавать политики IAM в соответствии с принципом минимальных привилегий. До выхода Policy Sentry было слишком легко найти документы политик IAM, в которых отсутствовали ограничения ресурсов. Рассмотрим политику ниже, которая позволяет субъекту IAM (роли или пользователю) выполнять s3:PutObject для любого S3-бакета в аккаунте AWS:```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" } ] }

root@kitploit:~
Это плохо. В идеале доступ должен быть ограничен в соответствии с ARN ресурсов, например, так:```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Policy Sentry делает это действительно простым. Как только разработчики Infrastructure as Code или администраторы AWS ознакомятся с этим инструментом (который довольно прост в использовании), мы заметили, что внедрение начинается очень быстро. Однако, если вы уже используете AWS, вероятно, у вас есть большой объем невыполненных задач по политикам IAM, которые можно было бы улучшить. Если у вас есть сотни учетных записей AWS с десятками политик в каждой, как можно защитить эти учетные записи AWS, программно выявляя политики, которые следует исправить?

Вот почему мы написали Cloudsplaining.

Cloudsplaining выявляет нарушения принципа наименьших привилегий в политиках AWS IAM и генерирует красивый HTML-отчет. Он может сканировать все политики в вашей учетной записи AWS, в нескольких учетных записях AWS или сканировать один файл политики.

Установка

Homebrew```bash

brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining

root@kitploit:~
#### Pip3```bash
pip3 install --user cloudsplaining
  • Теперь вы сможете запускать cloudsplaining из командной строки, выполнив cloudsplaining --help.

Автодополнение в оболочке

Чтобы включить автодополнение Bash, добавьте это в ваш .bashrc:```bash eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"

root@kitploit:~
Чтобы включить автодополнение ZSH, добавьте это в ваш .zshrc:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"

Сканирование одной политики IAM

Вы также можете отсканировать один файл политики для выявления рисков вместо целой учетной записи.```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json

root@kitploit:~
Результат будет включать описание находки и список IAM actions, которые не используют ограничения ресурсов.

Результат будет выглядеть следующим образом:```console
Issue found: Data Exfiltration
Actions: s3:GetObject

Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl

Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus

Сканирование всего AWS аккаунта

Загрузка деталей авторизации аккаунта

Мы можем сканировать весь AWS аккаунт и создавать отчеты. Для этого мы используем API-вызов AWS IAM get-account-authorization-details, который загружает большой JSON-файл (около 100 КБ на аккаунт), содержащий все детали IAM для данного аккаунта. Это включает данные о пользователях, группах, ролях, политиках, управляемых клиентом, и политиках, управляемых AWS.

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

  • У вас должны быть права на выполнение iam:GetAccountAuthorizationDetails. Политика arn:aws:iam::aws:policy/SecurityAudit включает это право, как и многие другие, предоставляющие доступ на чтение к сервису IAM.

  • Чтобы загрузить детали авторизации аккаунта, убедитесь, что вы аутентифицированы в AWS, затем выполните команду download в cloudsplaining:```bash cloudsplaining download

root@kitploit:~
* Если вы предпочитаете использовать файл `~/.aws/credentials` вместо переменных окружения, вы можете указать имя профиля:```bash
cloudsplaining download --profile myprofile

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

Создание файла исключений

Инструмент Cloudsplaining не пытается понять контекст всего, что происходит в вашем аккаунте AWS. Часть контекста можно определить программно: применяется ли политика к профилю инстанса, прикреплена ли политика, используются ли встроенные политики IAM и используются ли управляемые политики AWS. Но только вы знаете контекст проектирования вашей инфраструктуры AWS и стратегию IAM.

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

Вы можете создать шаблон исключений с помощью следующей команды:```bash cloudsplaining create-exclusions-file

root@kitploit:~
This will generate a file in your current directory titled `exclusions.yml`.

Now when you run the `scan` command, you can use the exclusions file like this:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

Для получения дополнительной информации о структуре файла исключений см. Фильтрация ложных срабатываний

Сканирование файла сведений об авторизации

Теперь, когда мы загрузили файл авторизации аккаунта, мы можем просканировать все политики AWS IAM с помощью cloudsplaining.

Выполните следующую команду:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

root@kitploit:~
Будет создан HTML-отчет, как [этот](https://opensource.salesforce.com/cloudsplaining/):

> ![](https://raw.githubusercontent.com/salesforce/cloudsplaining/HEAD/docs/_images/cloudsplaining-report.gif)


Также будет создан файл необработанных данных в формате JSON:

* `default-iam-results.json`: Этот файл содержит необработанный вывод отчета в формате JSON. Вы можете использовать этот файл данных для работы с результатами сканирования в различных целях. Например, вы можете написать Python-скрипт, который анализирует эти данные и автоматически создает задачи в JIRA или рабочие элементы Salesforce. Пример записи показан ниже. Полный пример можно посмотреть на [examples/files/iam-results-example.json](https://github.com/salesforce/cloudsplaining/blob/master/examples/files/iam-results-example.json)```json
{
    "example-authz-details": [
        {
            "AccountID": "012345678901",
            "ManagedBy": "Customer",
            "PolicyName": "InsecureUserPolicy",
            "Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
            "ActionsCount": 2,
            "ServicesCount": 1,
            "Actions": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Services": [
                "s3"
            ]
        }
    ]
}

Смотрите папку examples/files для примеров вывода.

Фильтрация ложных срабатываний

Ограничение ресурсов — это лучшая практика, особенно для системных ролей/профилей экземпляров, но иногда это сделано намеренно. Например, рассмотрим ситуацию, когда на профиле экземпляра для EC2-инстанса, который разворачивает Terraform, используется пользовательская политика IAM. В этом случае широкие разрешения являются требованиями дизайна — поэтому мы не хотим включать их в результаты.

Вы можете создать шаблон исключений с помощью следующей команды:```bash cloudsplaining create-exclusions-file

root@kitploit:~
Это создаст файл в вашей текущей директории с именем `exclusions.yml`.

Файл исключений по умолчанию выглядит так:```yaml
# Policy names to exclude from evaluation
# Suggestion: Add policies here that are known to be overly permissive by design, after you run the initial report.
policies:
  - "AWSServiceRoleFor*"
  - "*ServiceRolePolicy"
  - "*ServiceLinkedRolePolicy"
  - "AdministratorAccess" # Otherwise, this will take a long time
  - "service-role*"
  - "aws-service-role*"
# Don't evaluate these roles, users, or groups as part of the evaluation
roles:
  - "service-role*"
  - "aws-service-role*"
users:
  - ""
groups:
  - ""
# Read-only actions to include in the results, such as s3:GetObject
# By default, it includes Actions that could lead to Data Exfiltration
include-actions:
  - "s3:GetObject"
  - "ssm:GetParameter"
  - "ssm:GetParameters"
  - "ssm:GetParametersByPath"
  - "secretsmanager:GetSecretValue"
# Write actions to include from the results, such as kms:Decrypt
exclude-actions:
  - ""
  • Вносите любые дополнения или изменения по своему усмотрению.
    • В разделе policies укажите путь к именам политик, которые вы хотите исключить.
    • Если вы хотите исключить роль с именем MyRole, укажите MyRole или MyR* в списке roles.
    • Тот же подход можно применить к спискам users и groups.

Теперь при выполнении команды scan вы можете использовать файл исключений следующим образом:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

root@kitploit:~
### Сканирование нескольких аккаунтов AWS

Если ваш пользователь IAM или роль IAM имеют разрешения `sts:AssumeRole` на общую роль IAM в нескольких аккаунтах AWS, вы можете использовать команду `scan-multi-account`.

Эта диаграмма иллюстрирует, как работает процесс:

![Диаграмма сканирования нескольких аккаунтов AWS с помощью Cloudsplaining](https://assets.kitploit.com/production/public/readmes/3625/a58d8b2e6a0986fdd6adf5c583f34c8efe82a084ad41b8fa00d1e1ef29a0e4fe.png)

> Примечание: Если вы новичок в настройке межаккаунтного доступа, ознакомьтесь с [официальным учебником AWS по делегированию доступа между аккаунтами AWS с помощью ролей IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html). Это может помочь вам настроить описанную выше архитектуру.

* Во-первых, вам нужно создать файл конфигурации multi-account. Выполните следующую команду:```bash
cloudsplaining create-multi-account-config-file \ 
    -o multi-account-config.yml
  • Это создаст файл с именем multi-account-config.yml со следующим содержимым:```yaml accounts: default_account: 123456789012 prod: 123456789013 test: 123456789014
root@kitploit:~
> Примечание: Обратите внимание, что формат файла выше включает `account_name: accountID`. Отредактируйте содержимое файла, указав желаемое имя учетной записи и ID учетной записи. Включите столько ID учетных записей, сколько необходимо.

Для следующего шага предположим, что:
 * У нас есть роль в целевых аккаунтах, которая называется `CommonSecurityRole`.
* Учетные данные вашего пользователя IAM находятся в профиле AWS Credentials с именем `scanning-user`.
* Этот пользователь имеет разрешения `sts:AssumeRole` для принятия роли `CommonSecurityRole` во всех ваших целевых аккаунтах, указанных в YAML-файле, который мы создали ранее.
* Вы хотите сохранить вывод в корзину S3 с именем `my-results-bucket`

Используя приведенные выше данные, вы можете выполнить следующую команду:```bash
cloudsplaining scan-multi-account \
    -c multi-account-config.yml \
    --profile scanning-user \
    --role-name CommonSecurityRole \ 
    --output-bucket my-results-bucket

Обратите внимание, что если вы запустите вышеуказанное без флага --profile, оно будет выполнено в соответствии со стандартным порядком приоритетов учетных данных AWS (т. е. переменные окружения, профили учетных данных, учетные данные контейнера ECS, а затем учетные данные профиля EC2 Instance Profile).

Пользовательские руководства и приложения

Cloudsplaining поддерживает настройку разделов «Руководство» и «Приложения» HTML-отчета для включения рекомендаций и документации по безопасности вашей организации.

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

Поместите HTML-файлы в корневую папку вашего проекта:

  • custom-guidance.html — Пользовательское содержание руководства по безопасности
  • custom-appendices.html — Пользовательское содержание приложений

Поведение

  • Файлы отсутствуют: Отображаются стандартные рекомендации AWS по безопасности
  • Файлы существуют и содержат контент: Отображается ваше пользовательское HTML-содержание
  • Файлы существуют, но пусты: Вкладки полностью скрываются
  • Смешанная конфигурация: Каждая вкладка работает независимо

Пример использования```bash

Create custom guidance

echo '

Company Security Guidelines

Follow these organization-specific steps:

  • Review with security team
  • Document in JIRA ticket
  • Get approval before remediation

Create custom appendices

echo '

Internal Resources

Additional company resources:

  • Security Portal
  • IAM Best Practices

Шпаргалка```bash

Download authorization details

cloudsplaining download

Download from a specific AWS profile

cloudsplaining download --profile someprofile

Scan Authorization details

cloudsplaining scan --input-file default.json

Scan Authorization details with custom exclusions

cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml

Scan Policy Files

cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml

Scan Multiple Accounts

Generate the multi account config file

cloudsplaining create-multi-account-config-file -o accounts.yml cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./

root@kitploit:~
## Часто задаваемые вопросы

**Будет ли сканировать все политики по умолчанию?**

Нет, она будет сканировать только политики, прикрепленные к IAM-принципалам.

**Скачает ли команда download все версии политик?**

Не по умолчанию. Если вы хотите это сделать, укажите флаг `--include-non-default-policy-versions`. Обратите внимание, что инструмент `scan` в настоящее время не работает с нестандартными версиями.

**Я следовал инструкциям по установке, но не могу выполнить программу через командную строку. Что мне делать?**

Скорее всего, это проблема с вашим PATH. Переменная окружения PATH не учитывает бинарные пакеты, установленные с помощью `pip3`. На Mac вы, вероятно, можете исправить это, введя команду ниже, в зависимости от установленных версий. Ваш результат может отличаться.```bash
export PATH=$HOME/Library/Python/3.7/bin/:$PATH

Я следовал инструкциям по установке, но получаю ModuleNotFoundError с сообщением No module named policy_sentry.analysis.expand. Что мне делать?

Попробуйте обновиться до последней версии Cloudsplaining. Эта ошибка была исправлена в версии 0.0.10.

Ссылки

  • Policy Sentry от Kinnaird McQuade из Salesforce
  • Parliament от Scott Piper из Summit Route и Duo Labs.
  • AWS Privilege Escalation Methods от Spencer Gietzen из Rhino Security Labs
  • Understanding Access Level Summaries within Policy Summaries
  • Leveraging next-generation blockchain-based AI across multiple service meshes to transparently automate multi-cloud IAM wizardry 🧙‍♂️
Скачать инструмент