Переход от Microsoft Cloud к локальным машинам

  • Автор темы Автор темы ADMIN
  • Дата начала Дата начала

ADMIN

Administrator
ADMIN
Регистрация
18 Окт 1989
Сообщения
1,408
Реакции
93
Баллы
48
☑ ДЕПОЗИТ
0$

Переход от Microsoft Cloud к локальным машинам​

Чираг Савла | 21 февраля 2024 г. | Без категории
В этой статье будет продемонстрирована одна ситуация, обнаруженная во время недавнего теста на проникновение в облако, который позволил нам перейти от облачной среды Microsoft к локальным машинам через PSRemoting.
Да, вы правильно прочитали приведенное выше утверждение; мы использовали PSRemoting для горизонтального перемещения из облака в локальную среду. Мы воспроизвели путь атаки в нашей лабораторной среде.
Примечание. В этой статье не будут описаны действия по развертыванию лаборатории или репликации лабораторной среды. Он также не будет фокусироваться на OPSEC или обходе возможностей ведения журналов PowerShell, поскольку это зависит от среды.
Hybird-Connect-Attack-1024x431.png
Лабораторный дизайн
Давайте начнем с понимания ресурсов и компонентов, которые присутствовали и помогли нам добиться выполнения команд на локальных машинах.
Мы начали тест на проникновение с обычным доступом на чтение в целевом клиенте и нашли путь атаки, который помог нам получить права участника группы ресурсов через субъект-службу.
image-4.png
Получены привилегии участника
Мы прошли аутентификацию с использованием учетных данных субъекта-службы с помощью модуля Az PowerShell, перечислили все ресурсы и обнаружили несколько ресурсов, таких как приложение-функция, Key Vault, Azure Relay и т. д.
image-5-1024x643.png
Обнаружено множество ресурсов
Итак, давайте сначала обсудим функциональное приложение, Azure Relay и гибридные подключения, а затем продолжим рассказ о путях атаки.
Функциональные приложения
Приложения-функции (Lambda в AWS) — это сервисы бессерверных вычислений, предоставляемые облаком Azure. Они позволяют разработчикам создавать и развертывать небольшие функции, которые могут запускаться такими событиями, как простые HTTP-запросы. Приложения-функции предоставляют среду для выполнения нашего кода без необходимости управления базовой инфраструктурой, такой как операционная система, хранилище, балансировщики нагрузки, оперативная память, сеть и т. д. Они предназначены для упрощения разработки и развертывания отдельных функций, абстрагируя сложности. управления инфраструктурой и позволяя разработчикам сосредоточиться исключительно на написании кода.
Лазурное реле
Служба Azure Relay предоставляет организациям возможность предоставлять услуги, работающие локально в корпоративной сети, в общедоступном облаке. Нет необходимости пробивать дыру в брандмауэре, поскольку агент, установленный на локальном компьютере, инициирует исходящее соединение со службой Azure Relay и создаст двунаправленный сокет для связи. Когда клиент подключается к службе Azure Relay, данные передаются на локальный компьютер.
Гибридное соединение
Гибридное подключение — это безопасная функция Azure Relay, использующая развитие открытого протокола на основе HTTP и WebSockets. Он обеспечивает двунаправленную связь по принципу «запрос-ответ», а также передачу двоичных потоков, а также простой поток дейтаграмм между двумя сетевыми приложениями. Это позволяет некоторым службам, таким как службы приложений и приложения-функции, взаимодействовать с другими службами, размещенными локально.
Теперь, когда мы знаем обо всех трех компонентах, давайте продолжим рассказ о пути атаки.
Когда мы узнали о гибридном реле, мы начали перечислять детали и обнаружили, что соединение создается для машины через порт 5986. Мы сразу подумали о PSRemoting, поскольку 5986 — это порт HTTPS для протокола WSMan, который используется PSRemoting.
image-6-1024x479.png
Перечисление гибридного соединения
Мы проверили, подключено ли гибридное соединение с помощью приложения Function. Чтобы проверить конфигурацию, мы использовали вызов REST API, поскольку, насколько нам известно, не существует встроенного командлета PowerShell, который мог бы предоставить такую информацию. Чтобы использовать вызов REST API, мы запросили токен доступа для конечной точки https://management.azure.com.
image-8-1024x326.png
Запрос токена доступа
Получив токен доступа, мы могли использовать приведенный ниже код PowerShell для отправки вызова REST API и получения сведений о гибридном соединении.
$AccessToken = "eyJ0eXAiOiJK............."
$URL = "https://management.azure.com/subscriptions/<Subcription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Web/sites/<Function App Name>/hybridConnectionRelays?api-version=2018-11-01"

$Params = @{
"URI" = $URL
"Method" = "GET"
"Headers" = @{
"Authorization" = "Bearer $AccessToken"
"Content-Type" = "application/json"
}
}

$Result = Invoke-RestMethod @Params -UseBasicParsing
$Result.value.properties
image-9-1024x429.png
Использование токена доступа для отправки вызова REST API
Примечание. В Az CLI есть возможность вывести список гибридных подключений, подключенных к приложению-функции.
az functionapp hybrid-connection list --name <Function App Name> --resource-group <Resource Group Name>
Итак, теперь мы можем подтвердить, что в приложении-функции настроено гибридное соединение.
Затем мы извлекли исходный код функции, представленной в приложении-функции, с помощью нашего внутреннего инструмента (« VAJRA »), написанного Раунаком Пармаром.
image-2-1-1024x525.png
Исходный код извлечен
Существует альтернативный способ прочитать исходный код, открыв консоль управления (портал SCM) приложения-функции. Портал SCM использует механизм KUDU , который также предоставляет нам доступ к PowerShell и консоли командной строки через веб-интерфейс. Чтобы получить доступ к порталу SCM, нам нужен доступ участника/владельца RBAC, или, если назначена настраиваемая роль, нам нужны привилегии «microsoft.web/sites/publish/action» для доступа к порталу SCM.
Кроме того, мы можем получить доступ к порталу SCM, используя базовые учетные данные аутентификации, которые мы можем извлечь из опубликованного профиля с помощью Az PowerShell.
image-10-1024x378.png
Основные учетные данные аутентификации извлечены
Примечание. По умолчанию базовая проверка подлинности и доступ по FTP включены для всех служб приложений и приложений-функций.
Теперь, когда у нас есть учетные данные для базовой аутентификации портала SCM, мы можем использовать приведенную ниже конечную точку для аутентификации.
https://<FunctionAppName>.scm.azurewebsites.net/basicauth
image-11.png
Использование учетных данных
После аутентификации мы можем нажать «Консоль отладки», а затем выбрать опцию «PowerShell».
image-12-1024x775.png
Выбор опции PowerShell
Теперь мы можем перейти к «сайт -> wwwroot -> AzureRelayTesting» и щелкнуть значок редактирования файла «run.ps1».
Примечание. Имя функции «AzureRelayTesting» может отличаться.
image-13-1024x300.png
Нажатие «Изменить» для run.ps1
Нажав на значок редактирования, мы сможем просмотреть исходный код функции в приложении-функции.
image-14-1024x634.png
Исходный код
В коде функции мы видим, что имя пользователя, пароль и имя компьютера хранятся в переменных среды, которые можно получить из настроек приложения. Поэтому мы воспользуемся порталом SCM для просмотра всех настроек приложения, настроенных в приложении-функции, щелкнув опцию «Среда» в меню.
image-15-1024x564.png
Выбор варианта среды
На приведенном выше снимке экрана мы видим, что пароль хранится в секретном объекте Key Vault. Поэтому в идеале управляемое удостоверение приложения-функции должно иметь права на чтение секретов из Key Vault.
Управляемая идентификация
Управляемое удостоверение можно использовать для получения доступа к другим ресурсам, поддерживающим аутентификацию Microsoft Entra ID, без необходимости предоставления явных учетных данных или секретов. Это особый тип субъекта-службы, который можно использовать в качестве удостоверения при предоставлении ролей RBAC в Microsoft Entra ID. Дополнительные сведения об управляемом удостоверении можно найти в Microsoft Docs .
Чтобы проверить, имеет ли управляемое удостоверение доступ к хранилищу ключей, мы можем перечислить хранилище ключей и перечислить все назначенные разрешения.
image-16-1024x494.png
Назначенные разрешения Key Vault
На приведенном выше снимке экрана мы видим, что Key Vault использует политику доступа для управления доступом, и существует два идентификатора объекта; они настроены в политике доступа. Итак, давайте сначала попробуем найти идентификатор объекта управляемого удостоверения, назначенного в приложении-функции, и проверим, имеет ли управляемое удостоверение какие-либо привилегии.
image-17.png
Идентификатор объекта управляемой идентификации
На приведенном выше снимке экрана мы видим идентификатор объекта управляемой идентификации и подтверждаем, что он имеет привилегии «получить» и «списать».
Итак, теперь мы можем использовать консоль PowerShell на портале SCM приложения-функции напрямую для выполнения команд на локальном компьютере через PSRemoting.
$password = ConvertTo-SecureString $env:eek:npremadminpassword -AsPlainText -Force
$credential = [System.Management.Automation.PSCredential]::new($env:eek:npremadminusername, $password)
Invoke-Command -ComputerName $env:hybridconnectionhostname -Port 5986 -UseSSL -ScriptBlock {hostname} -SessionOption (New-PSSessionOption -SkipCACheck) -ErrorAction Stop -Credential $credential
image-18-1024x624.png
Выполнение команды на машине
Мы также обнаружили, что у пользователя были права локального администратора на нескольких компьютерах в целевой среде. Поэтому мы использовали одно и то же гибридное соединение для горизонтального перехода на другие локальные компьютеры и обнаружили, что у пользователя были права локального администратора на компьютере, на котором был установлен агент «AADConnect» для гибридной идентификации. Доступ к машине AADConnect дал нам возможность получить права глобального администратора в целевом клиенте.
$password = ConvertTo-SecureString $env:eek:npremadminpassword -AsPlainText -Force
$credential = [System.Management.Automation.PSCredential]::new($env:eek:npremadminusername, $password)
Invoke-Command -ComputerName $env:hybridconnectionhostname -Port 5986 -UseSSL -ScriptBlock {Invoke-Command -ComputerName AADConnect -Credential $Using:credential -ScriptBlock {hostname} } -SessionOption (New-PSSessionOption -SkipCACheck) -ErrorAction Stop -Credential $credential
image-19-1024x727.png
Обнаружен компьютер с установленным агентом AADConnect.
Итак, вот оно. Благодаря умелому маневрированию мы успешно использовали PSRemoting для горизонтального перемещения из облака в локальную среду. Мы надеемся, что этот пост будет полезен для изучения и изучения подобных путей атак при проведении тестов на проникновение в облака.

Справочные ссылки
 
Независимый арбитраж: В случае возникновения споров или несоответствия товара описанию, сервис выступает в качестве арбитра, принимая объективное решение на основе заранее оговоренных условий.
Назад
Сверху