4.5 KiB
Raw Blame History

TimeRoasting

timeRoastingの主な原因は、MicrosoftがNTPサーバーへの拡張で残した古い認証メカニズム、MS-SNTPとして知られるものです。このメカニズムでは、クライアントは任意のコンピュータアカウントの相対識別子RIDを直接使用でき、ドメインコントローラーはコンピュータアカウントのNTLMハッシュMD4によって生成されたをキーとして、応答パケットの**メッセージ認証コードMAC**を生成します。

攻撃者はこのメカニズムを利用して、認証なしで任意のコンピュータアカウントの同等のハッシュ値を取得できます。明らかに、Hashcatのようなツールを使用してブルートフォース攻撃を行うことができます。

具体的なメカニズムは、MS-SNTPプロトコルの公式Windowsドキュメントのセクション3.1.5.1「認証要求の動作」で確認できます。

ドキュメントのセクション3.1.5.1では、認証要求の動作について説明しています。 ExtendedAuthenticatorSupported ADM要素がfalseに設定されている場合、元のMarkdown形式が保持されることがわかります。

元の記事からの引用:

ExtendedAuthenticatorSupported ADM要素がfalseの場合、クライアントはクライアントNTP要求メッセージを構築しなければなりません。クライアントNTP要求メッセージの長さは68バイトです。クライアントは、セクション2.2.1で説明されているように、クライアントNTP要求メッセージの認証子フィールドを設定し、RID値の最下位31ビットを認証子のキー識別子サブフィールドの最下位31ビットに書き込み、その後、キーセレクタ値をキー識別子サブフィールドの最上位ビットに書き込みます。

ドキュメントのセクション4 プロトコル例のポイント3

元の記事からの引用:

  1. リクエストを受信した後、サーバーは受信したメッセージのサイズが68バイトであることを確認します。そうでない場合、サーバーはリクエストを破棄するかメッセージサイズが48バイトでない場合、未認証のリクエストとして扱いますメッセージサイズが48バイトの場合。受信したメッセージのサイズが68バイトであると仮定すると、サーバーは受信したメッセージからRIDを抽出します。サーバーはそれを使用して、NetrLogonComputeServerDigestメソッド[MS-NRPC]セクション3.5.4.8.2に指定を呼び出し、暗号チェックサムを計算し、受信したメッセージのキー識別子サブフィールドの最上位ビットに基づいて暗号チェックサムを選択しますセクション3.2.5に指定。その後、サーバーはクライアントに応答を送信し、キー識別子フィールドを0に、暗号チェックサムフィールドを計算された暗号チェックサムに設定します。

上記のMicrosoft公式ドキュメントの説明によれば、ユーザーは認証を必要とせず、RIDを入力するだけでリクエストを開始でき、その後、暗号チェックサムを取得できます。暗号チェックサムは、ドキュメントのセクション3.2.5.1.1で説明されています。

元の記事からの引用:

サーバーは、クライアントNTP要求メッセージの認証子フィールドのキー識別子サブフィールドの最下位31ビットからRIDを取得します。サーバーは、NetrLogonComputeServerDigestメソッド[MS-NRPC]セクション3.5.4.8.2に指定)を使用して、次の入力パラメータで暗号チェックサムを計算します:

暗号チェックサムはMD5を使用して計算され、具体的なプロセスはドキュメントの内容を参照できます。これにより、ロースティング攻撃を実行する機会が得られます。

how to attack

Quote to https://swisskyrepo.github.io/InternalAllTheThings/active-directory/ad-roasting-timeroasting/

SecuraBV/Timeroast - Timeroasting scripts by Tom Tervoort

sudo ./timeroast.py 10.0.0.42 | tee ntp-hashes.txt
hashcat -m 31300 ntp-hashes.txt