
Microsoft O365を標的にしたユーザー名列挙とパスワードスプレー攻撃ツール。
o365spray は、Microsoft Office 365 (O365) を対象としたユーザー名の列挙とパスワードスプレーを行うツールです。このツールは、謝辞に記載されている研究者によって調査・特定された、一連の列挙およびスプレー手法を再実装したものです。
教育、許可された、または研究目的のみに使用してください。
警告: Autologon、oAuth2、RST のユーザー列挙モジュールは、ユーザーごとに1回の認証試行を送信することで動作します。これらのモジュールをパスワードスプレーと一緒に1回の実行で使用する場合、o365spray はパスワードスプレーを実行する前に自動的にロックアウトタイマーをリセットします。列挙のみを実行する場合は、ユーザーは認証試行が何回行われたか、いつ行われたかを把握し、パスワードスプレーを実行する前に手動でロックアウトタイマーをリセットする必要があります。
ドメインがO365を使用しているか検証します:
o365spray --validate --domain test.com
指定されたドメインに対してユーザー名の列挙を実行します:
o365spray --enum -U usernames.txt --domain test.com
指定されたドメインに対してパスワードスプレーを実行します:
o365spray --spray -U usernames.txt -P passwords.txt --count 2 --lockout 5 --domain test.com
usage: o365spray [flags]
o365spray | Microsoft O365 User Enumerator and Password Sprayer -- v3.0.4
options:
-h, --help show this help message and exit
Target:
-d DOMAIN, --domain DOMAIN
Target domain for validation, user enumeration, and/or
password spraying.
Actions:
--validate Run domain validation only.
--enum Run username enumeration.
--spray Run password spraying.
Credentials:
-u USERNAME, --username USERNAME
Username(s) delimited using commas.
-p PASSWORD, --password PASSWORD
Password(s) delimited using commas.
-U USERFILE, --userfile USERFILE
File containing list of usernames.
-P PASSFILE, --passfile PASSFILE
File containing list of passwords.
--paired PAIRED File containing list of credentials in username:password
format.
Password Spraying Configuration:
-c COUNT, --count COUNT
Number of password attempts to run per user before resetting
the lockout account timer.
Default: 1
-l LOCKOUT, --lockout LOCKOUT
Lockout policy's reset time (in minutes).
Default: 15 minutes
Module Configuration:
--validate-module VALIDATE_MODULE
Specify which valiadtion module to run.
Default: getuserrealm
--enum-module ENUM_MODULE
Specify which enumeration module to run.
Default: office
--spray-module SPRAY_MODULE
Specify which password spraying module to run.
Default: oauth2
--adfs-url ADFS_URL AuthURL of the target domain's ADFS login page for password
spraying.
Scan Configuration:
--sleep [-1, 0-120] Throttle HTTP requests every `N` seconds. This can be randomized
by passing the value `-1` (between 1 sec and 2 mins).
Default: 0
--jitter [0-100] Jitter extends --sleep period by percentage given (0-100).
Default: 0
--rate RATE Number of concurrent connections (attempts) during
enumeration and spraying.
Default: 10
--poolsize POOLSIZE Maximum size of the ThreadPoolExecutor.
Default: 10000
--safe SAFE Terminate password spraying run if `N` locked accounts
are observed.
Default: 10
HTTP Configuration:
--useragents USERAGENTS
File containing list of user agents for randomization.
--timeout TIMEOUT HTTP request timeout in seconds. Default: 25
--proxy PROXY HTTP/S proxy to pass traffic through
(e.g. http://127.0.0.1:8080).
--proxy-url PROXY_URL
FireProx API URL.
Output Configuration:
--output OUTPUT Output directory for results and test case files.
Default: current directory
Debug:
-v, --version Print the tool version.
--debug Enable debug output.
onedrive モジュールは、対象ユーザーが以前に OneDrive にログインしていることを前提としています。有効なユーザーがまだ OneDrive を使用していない場合、そのアカウントは「無効」と表示されます。
oAuth2 モジュールはフェデレーションスプレーに使用できますが、これは対象テナントがパスワード同期を有効にしている場合にのみ機能することに注意してください。そうでない場合、認証は常に失敗します。デフォルトの仕組みは、フェデレーションが検出された場合に 'adfs' モジュールにフォールバックすることです。
Microsoft はパスワードスプレーの実行をより困難にしており、FireProx のようなツールを使用することで、IP アドレスベースのレート制限をバイパスできます。
o365spray で FireProx を使用するには、以下のベース URL テーブルに基づいて、指定された o365spray モジュールのプロキシ URL を作成します。プロキシ URL は、--proxy-url を介して渡すことができます。
注: FireProx URL を作成するために使用したベース URL に対応する、正しい
--enum-moduleまたは--spray-moduleフラグを使用してください。
OneDrive URL の 'tenant' 値は、
--domainフラグで指定されたドメイン名の値です。
User-Agent のランダム化がサポートされ、--useragents フラグに User-Agent ファイルを指定することで実現できます。o365spray には、resc/user-agents.txt 経由で 4,800 以上のエージェントを含むサンプルファイルが含まれています。
サンプルデータセットのエージェントは、以下から収集されました:
o365spray フレームワークは、新しいツール Omnispray に移植されました。このツールは、元の列挙・スプレーフレームワークをモジュール化し、O365 だけでなく汎用的なターゲット指定を可能にすることを目的としています。Omnispray には、任意のターゲット向けに修正・活用できる列挙用およびスプレー用のテンプレートモジュールが含まれています。
バグやエラーが発生した場合は、詳細を記載して Issue を開いてください(または修正案を含む Pull Request を送信してください)。以前のバージョンの使用については、以下のセクションを参照してください。
問題が発生した場合は、コードの書き換え前の以前のバージョンをチェックアウトしてみてください:
# v1.3.7
git checkout e235abdcebad61dbd2cde80974aca21ddb188704
# v2.0.4
git checkout a585432f269a8f527d61f064822bb08880c887ef
| Module | Base URL |
|---|
| autodiscover | https://outlook.office365.com/ |
| autologon | https://autologon.microsoftazuread-sso.com/ |
| oauth2 | https://login.microsoftonline.com/ |
| office | https://login.microsoftonline.com/ |
| rst | https://login.microsoftonline.com/ |
| onedrive | https://<tenant>-my.sharepoint.com/ |
| Module | Base URL |
|---|
| activesync | https://outlook.office365.com/ |
| adfs | Currently not implemented |
| autodiscover | https://autodiscover-s.outlook.com/ |
| autologon | https://autologon.microsoftazuread-sso.com/ |
| oauth2 | https://login.microsoftonline.com/ |
| reporting | https://reports.office365.com/ |
| rst | https://login.microsoftonline.com/ |
| Author | Tool/Research | Link |
|---|
| gremwell | o365enum: office.com 経由の認証なしユーザー列挙 | o365enum |
| grimhacker | office365userenum: ActiveSync ユーザー列挙の研究と発見。 | office365userenum / blog post |
| Raikia | UhOh365: Autodiscover 経由の認証なしユーザー列挙。 | UhOh365 |
| dafthack | MSOLSpray: MSOL 経由のパスワードスプレー | MSOLSpray |
| byt3bl33d3r | MSOLSpray: Python による再実装 | Gist |
| nyxgeek | onedrive_user_enum: OneDrive ユーザー列挙 | onedrive_user_enum / blog post |
| Mr-Un1k0d3r | adfs-spray: ADFS パスワードスプレー | adfs-spray |
| Nestori Syynimaa | AADInternals: oAuth2 および autologon モジュール | AADInternals |
| Daniel Chronlund / xFreed0m | Invoke-AzureAdPasswordSprayAttack / ADFSpray: Office 365 レポート API パスワードスプレー | Invoke-AzureAdPasswordSprayAttack / ADFSpray |
| Optiv (Several Authors) | Go365: RST ユーザー列挙およびパスワードスプレーモジュール | Go365 |
| byt3bl33d3r | SprayingToolkit: コード参照 | SprayingToolkit |
| sensepost | ruler: コード参照 | Ruler |