
POC недавней уязвимости Azure Active Directory от SecureWorks, связанной с перебором паролей
POC недавней уязвимости Azure Active Directory для перебора паролей, раскрытой SecureWorks
Этот код является доказательством концепции недавно раскрытой уязвимости Azure Active Directory, позволяющей перебирать пароли, о которой объявила Secureworks (вот статья Ars Technica, которая примерно на день предшествовала официальной публикации, но практически идентична ей).
Теоретически такой подход позволяет выполнять атаки методом грубой силы или распыления паролей против одной или нескольких учётных записей AAD, не вызывая блокировки учётной записи и не создавая журналы данных, что делает атаку незаметной.
Базовое использование простое:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
Вызов кода таким образом позволяет получить результат для указанных имени пользователя и пароля.
Используя преимущества foreach, вы можете легко применить это для распыления паролей:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
Обратите внимание, что при использовании этого метода вам потребуется преобразовать результирующий файл из UTF-16 в UTF-8, если вы хотите работать с ним в Linux:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
Если вас интересует только перечисление, просто запустите код, как указано выше для распыления паролей. Любое возвращаемое значение "bad password" или любое значение, отличное от "no user", будет означать, что вы нашли допустимое имя пользователя.
Возврат значения "True" для имени пользователя означает, что предоставленный пароль действителен.
Возврат значения "locked" может означать, что учётная запись заблокирована или что Smart Lockout временно препятствует взаимодействию с учётной записью.
Чтобы использовать код для брутфорса, просто перебирайте поле пароля вместо поля имени пользователя:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
Если вы обнаружили одну или несколько допустимых пар «имя пользователя/пароль», вы можете изменить этот код, чтобы получить возвращаемый DesktopSSOToken. Затем DesktopSSOToken можно обменять на маркер доступа OAuth2 с помощью этого метода.
Затем маркер доступа OAuth2 можно использовать с различными конечными точками API Azure, M365 и O365.
Однако на этом этапе вас может остановить MFA. Ваш лучший вариант здесь — использовать доступ без MFA, например Outlook Web Access или ActiveSync. MFASweep от Dafthack будет полезен.
Функция Smart Lockout от Microsoft начнёт ложно сообщать, что учётные записи заблокированы, если вы слишком быстро обращаетесь к конечной точке API с одного и того же IP-адреса. Чтобы обойти это, я настоятельно рекомендую использовать fireprox от ustayready. Просто измените переменную $url следующим образом:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
Однако это не поможет обойти Smart Lockout, если вы пытаетесь подобрать пароль для конкретной учётной записи.
Почти весь код для этого был заимствован из отличного проекта AADInternals доктора Нестори Сюнимаа.