Гостевая статья Cloud Services Enumeration – AWS, Azure and GCP

Мы создали скрипты перечисления в облаке, которые теперь доступны @ NotSoSecure/cloud-service-enum . Этот скрипт позволяет пентестерам проверять, какие облачные токены (ключи API, OAuth-токены и т. Д.) могут получить доступ к какой облачной службе.

По мере того, как облачные среды становятся все более популярными, мы наблюдаем рост использования облачных сред на производстве. Из Интернета большинство облачных серверов не будут выглядеть иначе, однако, как только вы получите доступ к серверу, все начнет меняться. В облачных средах используются токены, такие как ключи API, токены OAuth или управляемые идентификаторы, для управления идентификацией и доступом. Эти токены могут быть получены злоумышленниками с использованием различных методов, таких как атака подделки запросов на стороне сервера (SSRF), когда сервер выполняет действие от имени злоумышленника и отправляет ответ злоумышленнику, или с помощью таких атак, как уязвимость внедрения команд в облачное приложение. Эти токены также могут быть пропущены при случайном раскрытии на сайтах совместного использования кода, таких как pastebin или GitHub, которые могут быть обнаружены с помощью методов OSINT. и

В этом сообщении в блоге расскажет о некоторых приемах после эксплуатации, связанных с AWS, GCP, Azure, особенно связанных с перечислением ресурсов при получении таких токенов.

Как правило, учетные данные, полученные с помощью эксплуатации, могут иметь ограничения и могут быть низкими привилегиями. Это подразумевает, что не все ресурсы являются перечисляемыми, и не все ресурсы будут давать вам ответы, подобные S3, как мы обнаружили в .

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

  • Перечисление услуг AWS
После получения учетных данных IAM в первую очередь необходимо проверить, работают ли учетные данные, загрузив их в интерфейс командной строки AWS.

image001.png


Чтобы подтвердить, работают ли вышеуказанные учетные данные, мы сделаем вызов «sts-get-caller-identity».

image003.png


Далее мы можем перечислить политики и службы IAM, такие как сегменты S3. Пример команды будет,
aws s3 ls

image005.png


Вы поймете, что AWS - это чудовище, когда речь заходит о количестве предлагаемых услуг, и поэтому мы решили автоматизировать перечисление всех ресурсов с помощью «aws_service_enum».

Применение
Код:
usage: aws_service_enum.py [-h] --access-key --secret-key
                                 [--session-token] [--region]
                                 [--region-all] [--verbose] [--s3-enumeration]
                                 [--logs]

< AWS_SERVICE_ENUM Says "Hello, world!" >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/
                ||----w |
                ||     ||

required arguments:
  --access-key     AWS Access Key ID
  --secret-key     AWS Secret Key

optional arguments:
  -h, --help         show this help message and exit
  --session-token  AWS Security Token. Required if provided credentials do not have get-session-token access
  --region         Enter any value from given list
                     ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-southeast-1, ap-southeast-2, ap-south-1
                     ca-central-1
                     eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1
                     us-east-1, us-east-2, us-west-1, us-west-2
                     sa-east-1
  --region-all       Enumerate for all regions given above
  --verbose          Select for Verbose output
  --s3-enumeration   Enumerate possible S3 buckets associated with services like ElasticBeanstalk, Athena
  --logs             Create a log File in same directory


Большинство вариантов говорят сами за себя, однако я хотел бы обратить ваше внимание на следующие 3 варианта:

–Region это позволит вам указать регион по умолчанию. Если регион не выбран, он будет перечисляться по всем регионам.

–S3-перечисление - довольно интересная особенность здесь. В нашем предыдущем исследовании мы обнаружили, что AWS по умолчанию использует шаблоны именования при создании сегмента.

Например, если вы создаете сервис «Elastic Beanstalk», то AWS создаст сегмент, подобныйasticbeanstalk-REGIONNAME-ACCOUNTID, где REGIONNAME - это область эластичного бобового стебля, а ACCOUNTID - идентификатор учетной записи роли.

–S3-enumeration перечислит все сегменты, к которым обнаруженные сервисы имеют доступ, но не доступны напрямую. Например, если вы обнаружили эластичные учетные данные beanstalk через SSRF, и если вы используете те же учетные данные для выполнения aws s3 ls, он не будет перечислять связанные сегменты для обслуживания. Но если вы используете -s3-enumeration, он будет пытаться угадать сегмент, и, если он есть, он будет перечислять (только перечислять) содержимое блока.

Пример вывода инструмента приведен ниже:

image007.png

  • Перечень услуг GCP
GCP использует концепцию сервисных учетных записей. Эти служебные учетные записи предоставляют временные токены доступа (также известные как OAuth Access Tokens) через API метаданных (в случае использования вычислительных или облачных функций). Мы сконцентрируемся на том, что делать после получения «токена доступа OAuth».

В настоящее время службы, связанные с «токеном доступа OAuth», могут быть определены только с помощью вызова REST API по или через интерфейс python для вышеуказанных API-интерфейсов https://github.com/googleapis/ google-api-python-client .

Первой точкой вызова будет просмотр области действия и других сведений о «маркере доступа OAuth» через конечную точку enjinsert_token_here}.

image009.png


В зависимости от области действия может быть доступен через интерфейс REST API. Например, как показано ниже, мы использовали «токен доступа OAuth» из намеренно уязвимого экземпляра для получения списка «облачных функций» в области «us-central1».

image011.png



Эта утомительная задача автоматизирована с помощью нашего инструмента «gcp_service_enum».

Применение
Код:
usage: gcp_service_enum.py [-h] --access-token [--region] [--project-id] [--verbose]
               [--logs]

< GCP_SERVICE_ENUM Says "Hello, world!" >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/
                ||----w |
                ||     ||


required arguments:
  --access-token  GCP oauth Access Token

optional arguments:
  -h, --help        show this help message and exit
  --region        Enter any value from given list
                    ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-southeast-1, ap-southeast-2, ap-south-1, ca-central-1
                    eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1
                    us-east-1, us-east-2, us-west-1, us-west-2
                    sa-east-1
  --project-id    ProjectID
  --verbose         Select for Verbose output
  --logs            Create a log File in same directory

Пример вывода инструмента приведен ниже:

image013.png

  • Перечисление службы Azure
Функция Azure предоставляет службам Azure автоматически управляемую идентификацию в Azure AD. Вы можете использовать эту идентификацию для аутентификации в любой службе, которая поддерживает аутентификацию Azure AD, включая Key Vault, без каких-либо учетных данных в вашем коде.

Временный маркер доступа может быть через конечную точку службы метаданных Azure Instance Service (IMDS). Мы сосредоточимся на том, что делать после получения «токена доступа».

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

image015.png


Все сервисы, перечисленные на можно затем использовать для получения / изменения информации / ресурса, предоставив «subscriptionId» и «токен доступа».

image017.png



Эти вызовы автоматизируются с помощью нашего инструмента «azure_service_enum».

Применение
Код:
> python azure_service_enum.py
usage: azure_enum.py [-h] --access-token [--logs]

< Azure_SERVICE_ENUM Says "Hello, world!" >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/
                ||----w |
                ||     ||

required arguments:
  --access-token  Azure Managed Identities Access Token

optional arguments:
  -h, --help        show this help message and exit
  --logs            Create a log File in same directory

Пример вывода перечисления Azure

image019.png


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

Источник:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!