
SecureWorksの最近のAzure Active Directoryパスワード総当たり(ブルートフォース)脆弱性のPOC
SecureWorks が最近公表した Azure Active Directory のパスワードブルートフォース脆弱性の POC
このコードは、最近明らかにされた Azure Active Directory のパスワードブルートフォース脆弱性の概念実証です。この脆弱性は Secureworks が発表 しました(また、公式発表の約1日前に公開された Ars Technica の記事 もほぼ同じ内容です)。
理論上、この手法を使用すると、1つ以上の 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 }
この方法を使用する場合、Linux で作業するには、結果のファイルを UTF-16 から UTF-8 に変換する必要があることに注意してください:
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 }
1つ以上の有効なユーザー名/パスワードの組み合わせを見つけた場合は、このコードを変更して、返される DesktopSSOToken を取得できます。 DesktopSSOToken はその後、この方法 を使用して OAuth2 アクセストークンと交換できます。
OAuth2 アクセストークンは、その後、さまざまな Azure、M365、O365 API エンドポイントで使用できます。
ただし、この時点で MFA に阻まれる可能性があります。 ここでの最善策は、Outlook Web Access や ActiveSync などの MFA を必要としないアクセスを利用することです。 Dafthack の MFASweep がここで役立ちます。
Microsoft の Smart Lockout 機能は、同じ IP アドレスから API エンドポイントにあまりに短時間にアクセスすると、アカウントがロックされていると誤って主張し始めます。 これを回避するには、ustayready の fireprox を使用してこの問題を回避することを強くお勧めします。 単に $url 変数を次のように変更します:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
ただし、特定のアカウントのパスワードをブルートフォース攻撃しようとしている場合、これでは Smart Lockout を回避できません。
このコードのほとんどは、Dr. Nestori Syynimaa の優れた AADInternals プロジェクト から借りたものです。