Az - Pass the PRT
Що таке PRT
pageAz - Primary Refresh Token (PRT)Перевірте, чи у вас є PRT
У розділі SSO State ви повинні побачити AzureAdPrt
, встановлене на YES.
У тому ж виводі ви також можете побачити, чи приєднано пристрій до Azure (у полі AzureAdJoined
):
PRT Cookie
PRT cookie фактично називається x-ms-RefreshTokenCredential
і є токеном JSON Web Token (JWT). JWT містить 3 частини, заголовок, навантаження та підпис, розділені крапкою .
та всі в кодуванні url-safe base64. Типовий PRT cookie містить наступний заголовок та тіло:
Фактичний Основний Оновлювальний Токен (PRT) укладений у refresh_token
, який зашифрований ключем під контролем Azure AD, що робить його вміст непрозоримим та недешифрованим для нас. Поле is_primary
позначає укладання основного оновлювального токена у цей токен. Для забезпечення того, щоб файл cookie залишався пов'язаним з конкретною сеансовою автентифікацією, з якою він був призначений, request_nonce
передається зі сторінки logon.microsoftonline.com
.
Потік PRT Cookie за допомогою TPM
Процес LSASS надсилатиме до TPM контекст KDF, а TPM використовуватиме ключ сеансу (зібраний під час реєстрації пристрою в AzureAD та збережений у TPM) та попередній контекст для похідного ключа, і цей похідний ключ використовуватиметься для підпису PRT cookie (JWT).
Контекст KDF - це одноразовий пароль від AzureAD та PRT, створюючи JWT, змішаний з контекстом (випадкові байти).
Отже, навіть якщо PTR не можна видобути, оскільки він знаходиться всередині TPM, можна зловживати LSASS, щоб запитувати похідні ключі з нових контекстів та використовувати згенеровані ключі для підпису Cookies.
Сценарії Зловживання PRT
Як звичайний користувач, можливо запитати використання PRT, запитавши LSASS дані SSO. Це можна зробити, як нативні додатки, які запитують токени від Менеджера Облікових Записів (брокер токенів). WAM передає запит до LSASS, який запитує токени, використовуючи підписаний PRT аргумент. Або це може бути зроблено з потоками на основі браузера (веб), де PRT cookie використовується як заголовок для автентифікації запитів на сторінки входу Azure AS.
Як СИСТЕМА, ви можете вкрасти PRT, якщо він не захищений TPM або взаємодіяти з ключами PRT в LSASS за допомогою криптографічних API.
Приклади Атаки Pass-the-PRT
Атака - ROADtoken
Для отримання додаткової інформації про цей спосіб перевірте цей пост. ROADtoken запустить BrowserCore.exe
з правильного каталогу та використає його для отримання PRT cookie. Цей cookie можна використовувати з ROADtools для аутентифікації та отримання постійного оновлювального токена.
Для генерації дійсного PRT cookie перше, що вам потрібно, це одноразовий пароль. Ви можете отримати його за допомогою:
Або використовуючи roadrecon:
Потім ви можете використати roadtoken, щоб отримати новий PRT (запустіть інструмент з процесу користувача для атаки):
Якщо ви вже маєте доступ до облікових даних користувача в Azure AD, ви можете використати ці дані для отримання доступу до локальних ресурсів, використовуючи атаку "Pass-the-PRT".
Потім ви можете використовувати згенерований куки, щоб створити токени для входу за допомогою Azure AD Graph або Microsoft Graph:
Атака - Використання roadrecon
Атака - Використання AADInternals та витіклого PTR
Get-AADIntUserPRTToken
отримує токен PRT користувача з комп'ютера, приєднаного до Azure AD або гібридно приєднаного. Використовує BrowserCore.exe
для отримання токена PRT.
Або, якщо у вас є значення з Mimikatz, ви також можете використати AADInternals для генерації токена:
Перейдіть на https://login.microsoftonline.com, очистіть всі файли cookie для login.microsoftonline.com та введіть новий файл cookie.
Потім перейдіть за посиланням https://portal.azure.com
Решта має залишитися за замовчуванням. Переконайтеся, що ви можете оновити сторінку, а куки не зникають, якщо вони зникли, ви, можливо, зробили помилку і повинні пройти процес ще раз. Якщо цього не сталося, ви повинні бути в порядку.
Атака - Mimikatz
Кроки
PRT (Основний оновлюваний токен) вилучається з LSASS (Служба локальної системи безпеки) і зберігається для подальшого використання.
Наступним кроком є вилучення ключа сеансу. Оскільки цей ключ спочатку виданий, а потім знову зашифрований локальним пристроєм, для розшифрування потрібно використовувати майстер-ключ DPAPI. Детальну інформацію про DPAPI (API захисту даних) можна знайти в цих ресурсах: HackTricks і для розуміння його застосування, зверніться до атаки "передача кукі".
Після розшифрування ключа сеансу отримують похідний ключ та контекст для PRT. Це важливо для створення куки PRT. Зокрема, похідний ключ використовується для підпису JWT (JSON Web Token), який складає куки. Докладне пояснення цього процесу надано Dirk-jan, доступне тут.
Зверніть увагу, що якщо PRT знаходиться всередині TPM, а не всередині lsass
, mimikatz не зможе його вилучити.
Однак буде можливо отримати ключ від похідного ключа від контексту з TPM та використати його для підпису куки (перевірте опцію 3).
Ви можете знайти докладне пояснення виконаного процесу для вилучення цих деталей тут: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Це не буде працювати після виправлень в серпні 2021 року для отримання токенів PRT інших користувачів, оскільки тільки користувач може отримати свій PRT (локальний адміністратор не може отримати доступ до PRT інших користувачів), але може отримати свій.
Ви можете використовувати mimikatz для вилучення PRT:
(Зображення з https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
Скопіюйте частину, позначену як Prt, і збережіть її.
Також витягніть ключ сеансу (значення KeyValue
поля ProofOfPossesionKey
), яке виділено нижче. Це зашифровано, і нам знадобиться використати наші майстер-ключі DPAPI для розшифрування.
Якщо ви не бачите жодних даних PRT, це може бути тим, що у вас немає жодних PRT, оскільки ваш пристрій не приєднаний до Azure AD, або це може бути тим, що ви використовуєте стару версію Windows 10.
Для розшифрування ключа сеансу вам потрібно підвищити свої привілеї до SYSTEM, щоб запуститися в контексті комп'ютера та мати можливість використовувати майстер-ключ DPAPI для розшифрування. Ви можете використати наступні команди для цього:
Опція 1 - Повний Mimikatz
Тепер вам потрібно скопіювати як значення контексту:
Так і значення похідного ключа:
Нарешті, ви можете використати всю цю інформацію для генерації кукісів PRT:
Перейдіть на https://login.microsoftonline.com, очистіть всі файли cookie для login.microsoftonline.com та введіть новий файл cookie.
Потім перейдіть за посиланням https://portal.azure.com
Решта має залишитися за замовчуванням. Переконайтеся, що ви можете оновити сторінку, а куки не зникають, якщо вони зникли, ви, можливо, зробили помилку і повинні пройти процес ще раз. Якщо цього не сталося, ви повинні бути в порядку.
Опція 2 - roadrecon за допомогою PTR
Спочатку оновіть PRT, яке буде збережено в
roadtx.prt
:
Тепер ми можемо запитувати токени за допомогою інтерактивного браузера з
roadtx browserprtauth
. Якщо ми використовуємо командуroadtx describe
, ми бачимо, що токен доступу містить претензію MFA, оскільки PRT, який я використовував у цьому випадку, також мав претензію MFA.
Опція 3 - roadrecon використання похідних ключів
Маючи контекст і витягнутий ключ, ви можете використовувати roadrecon для генерації нового підписаного кукі за допомогою:
Посилання
Last updated