web-dev-qa-db-ja.com

MsChapV2認証とEvil Twin攻撃

MS-CHAPV2プロトコルでの認証プロセスのダイナミクスを理解しようとしています。特に、 Evil Twin攻撃 を実装した場合、NTLM v1パスワードを取得する方法がわかりません。 MS-CHAPV2の実装からは不可能のようです。

これがコンテキストです。ハッカーがノートブックを設定して、WPA2エンタープライズネットワークでEvil Twin攻撃を実行します。彼は正しいアクセスポイントと正しい認証サーバーになりすまし、一部のクライアントが自分のノートブックに接続して資格情報を盗み、企業ネットワークでそれらを偽装するのを待ちます。

ネットワークは、MS-CHAPV2を内部認証プロトコルとして使用します。

クライアントがEAPOLプロセスを開始してこの偽のネットワークにアクセスすると、(サーバーのクライアントの)内部認証プロセスに到達します。

enter image description here

このプロセスは次の手順に従います。

  1. クライアントは「hello」メッセージでプロトコルを開始します。
  2. 認証サーバーは、16バイトのServerChallengeで応答します。
  3. クライアントは、ServerChallenge、16バイトのランダムClientChallenge、およびユーザー名を組み合わせて、ChallengeHashを作成します。
  4. 次に、クライアントはユーザーのパスワードのMD4ハッシュであるNTHashを計算し、これにゼロを埋めて21バイトにします。
  5. クライアントは、21バイト長のNTHashを3つの7バイト長のDESキーに分割します。パリティビットが各7ビットに追加され、8バイト長のDESキーが作成されます。 。
  6. 各キーは、ChallengeHashの暗号化に使用されます。これら3つのChallengeHashesを連結して、ChallengeResponseを形成します。
  7. 24バイトのChallengeResponse、16バイトのChallengeHash、およびUserNameがASに送信されます。
  8. ASは、ユーザーのパスワードのmd4ハッシュのmd4ハッシュと、ユーザーが送信したChallengeResponse、2つの定数文、ChallengeHashを組み合わせたAuthenticationResponseで応答する必要があります。このメッセージは、サーバーがパスワードも知っていることを確認するために送信されます。

攻撃者として、クライアントが受信したすべての情報とサーバーが送信したすべての情報を見ることができます。ただし、クライアントが「MD4(UserPassword)」文字列をキーとして使用してチャレンジレスポンスの3つの異なる部分を暗号化する場合(ポイント5を参照)、このMD4パスワードを取得できる可能性はありますか?

テストプロセスで、なぜこのようなもの(NTLMV1ハッシュ)を取得できるのですか? (hostapd-wpeを使用しています)

enter image description here

3
usern3t

TL; DR-チャレンジ/レスポンスメカニズムで使用されるDESキーを簡単にブルートフォースできます。チャレンジ/レスポンスメカニズムを逆にするには、56ビットキーを持つ2つのDES反復をブルートフォースするだけです。

NTハッシュを取得するには、チャレンジと応答の最初の3分の2を連結し、K3をBase64として連結する必要があります。


NTLMは challenge-response authentication protocol 本質的にこれが意味することです。一方の当事者はチャレンジを提示し、もう一方の当事者は有効な応答を提供する必要があります。これが発生しない場合、認証は行われません。

これを説明する良い方法はセキュリティの質問です。アカウントのロックを解除する場合、次のセキュリティの質問に正しい答えを提供する必要があると想像してください。 あなたの子供時代のペットの名前は何でしたか?これは、これを正確に描写しているように見えるものとは正確には同じではありませんが。


高レベルの概要

NTLMには、クライアントを認証するための3つのメッセージがあります。これらのメッセージは、次のMicrosoftドキュメントで定義されています NTLMメッセージ

  • NEGOTIATE_MESSAGE
  • CHALLENGE_MESSAGE
  • AUTHENTICATE_MESSAGE

これらのメッセージはリストされている順序で送信されます。これらのメッセージの表記をNMCMおよびAMに変更します。

最初に、クライアントはNMをサーバーに送信します。これにより、クライアントはサーバーがサポートするNTLMオプションをネゴシエーションすると、サーバーに送信します。 CMをクライアントに送信します。 CMの背後にある考え方は、クライアントが自分の身元をサーバーに証明できるようにすることです。最後に、クライアントはAMをサーバーに送信しますCMはクライアントによって処理されます。


ハッシュ

NTLMは、サーバーに保存されている2つのハッシュされたパスワードを使用します。これらのパスワードは、ネットワーク経由で送信される前にソルトされますが、マシンのメモリにはソルトされません。これは、サーバーからハッシュ値を取得すると使用できるため、問題になります。パスワードを必要とせずに認証します。

最初のハッシュはLMと呼ばれ、もう1つはNTと呼ばれます。 LMはDESベースの関数を使用し、NTはMD4を使用します。

[〜#〜] lm [〜#〜]

リンクされた図 は、「ネイピア」の例を使用してLMハッシュがどのように計算されるかを示します。あるいは、以下の手順は同じ前提に従います。

  1. ユーザーのパスワードを大文字に変換し、NULLパディングを使用して、提供されたパスワードを最大14バイトまでパディングします。
  2. 14バイトのパスワードを2つの7バイトの半分に分割する
  3. 7バイトの半分を使用して2つの64ビットDESキーを作成します(7ビットごとにパリティビットを追加))
  4. 各キーは、2つの8バイトの暗号値を返す文字列KGS!+#$%を暗号化するために使用されます。
  5. 結果の2つの値を連結して、16バイトのハッシュを作成します。

なぜ「KGS!+#$%」が選択されるかは定かではありませんが、以下の LAN Manager Wikipediaページのように、理由は RFC 2443の作者に関連しているようです

文字列“ KGS!+#$%”は、キーのグレンとスティーブを意味し、Shift + 12345の組み合わせを意味する可能性があります。グレンゾーンとスティーブコブは、RFC 2433(Microsoft PPP CHAP拡張機能)- LAN Manager Note 2。

[〜#〜] nt [〜#〜]

NTハッシュでは、各文字がUTF-16に変換され、 リトルエンディアン 形式を使用します。ここではエンディアンについて詳しく説明しませんので、不確かな場合は調査が必要になりますそれが何を意味するのか。

次の「napier」の例を使用して別の図をもう一度見てみましょう diagram Wordのnapierを取得し、すべての文字の後にnullバイトがある例を示します。たとえば、「napier」は'n' 0 'a' 0 'p' 0 'i' 0 'e' 0 'r' 0になります。リンクされた図では、これはUTF-16-LEで「napier」をエンコードした結果です。次に、128ビットコードを返す文字列から取得したMD4署名を使用します。この例では、307E40814E7D4E103F6A69B04EA78F3Dとなります MD2/MD4暗号化サイト を使用して、これを自分で試すことができます。基本的に、関数はNTハッシュを取得するために次のようになります。MD4(UTF-16-LE(password))


低レベルの概要

これでハッシュとチャレンジ/レスポンス認証方式の高レベルの概要について説明したので、これがどのように機能するかの低レベルの概要を見ていきます。

上記のハッシュはどちらも16バイトの値を生成し、5バイトの0が追加されて21バイトに到達します。これらの21バイトは、3つの7バイト値に分かれています。各7バイトの値は、DESクライアントに送信する8バイトのチャレンジを暗号化するためのキーとして使用されます。次に、3つの暗号化を使用して24バイトの応答が形成されます。

  1. サーバーは、チャレンジと呼ばれる8バイトの乱数を送信して認証を行います。 (上記を参照)
  2. クライアントは、チャレンジと、クライアントとサーバー間で共有されるシークレットを含む操作を実行します。このシークレットは、前述の2つのパスワードハッシュの1つです。
  3. 次に、クライアントは計算から24バイトの結果を返します。 NTLMV1では、bothハッシュが計算に使用されるため、24バイトの結果が両方とも返されます。
  4. 次に、サーバーは、クライアントが正しい結果を計算したことを確認します。サーバーがシークレットを所有している場合は、クライアントの信頼性を推測します。

基本的に、以下のコードブロックは、実行されたステップが数学表記でどのように見えるかを示しています。

C = 8-byte server challenge, random
K1 | K2 | K3 = NTLM-Hash | 5-bytes-0
Response = DES(K1,C) | DES(K2,C) | DES(K3,C)

ハッシュ/暗号化の弱点

NTLMは非常に古いプロトコルです。通常、古いプロトコルは存続しません(問題がある場合)。 NTLMは、時間のテストに耐えられなかった古いプロトコルの1つです。第一に、使用される機能は、現代のハードウェアには弱すぎる/安すぎる。

DESを見てみましょう、DESは1975年に最初に公開されました。これは非常に古いプロトコルです。DESの主な問題の1つは、ブルートに対する弱点です。 -特に現代での強制攻撃実際には DESの強みと弱み によると、十分な資金があれば1977年でさえDESをブルートフォースすることが可能であるように思われます。

1977年に、DiffieとHellmanは、1日でDES=キーを見つけることができると推定される2000万ドルのコストがかかるマシンを提案しました。

したがって、DESがブルートフォース攻撃に強くなることは決してありませんでした(とにかく、標準化されたNSA後のコンサルテーションバージョン-元々、設計者は「実際の」鍵サイズを提案していました)。

AESキーと比較してDESキーを見つけるのにかかる時間の背後にある数学について疑問に思っている場合は、以下を参照してください。 クラックにかかる時間DESとAES? 、一番上の答えは、かかる時間の長さを明確に示しています。投稿が'11からのものであることに注意してください。物事は変化し、計算能力も変化するので、それを考慮に入れてください。 、その回答を正確な図ではなくガイドラインとして参照してください。

要するに、DESキー(特に今日のコンピューティングの場合))を総当たりにするのにかかる時間は非常に短すぎて、現代の基準に達していると見なされず、時代遅れになっています。


MD4はどうですか?メッセージダイジェスト4を見てみましょう。ご存知のように、MD4のようなMD5は、その速度が原因で、パスワードハッシュなどにはまだかなり弱いものです。

MD4は比較的「新しい」ハッシュ関数ですが、まだ弱いです。それは1990年に Ronald Rivest によって最初に公開されました。彼は暗号法に非常に精通しており、暗号学者によく知られています。

MD4の問題(およびMD5の実際)は、衝突の計算がいかに安価であるかです。つまり、衝突とは、関数が2つのdistinct入力を同じ出力にマップする場所であり、衝突攻撃は、同じ出力を生成する2つの入力を見つけようとするプロセスを表します。 MD4での衝突の計算は非常に高速で、非常に安価です。実際、2回未満のハッシュ演算で衝突を発見できる 2007年に公開された衝突攻撃 がありました。


その他の弱点

明確な問題の1つは、リレー攻撃を実行する機能です。以下を参照してください。 NTLMリレーの実用ガイド

投稿の長さのためにここでは説明しませんが、上記のリンクには十分な詳細が必要です。


MSCHAPV2の弱点

MS-CHAPV2の弱点については、プロセスのステップ4でNTハッシュが攻撃者としてソルトされないため、再利用できます。これは、NTHashがパスワードとして使用されることを意味し、ユーザーとして認証するために使用できることを意味します;さらに、ASを偽装してユーザーを認証することもできます。塩が使用されていないため、これによりRainbowテーブルを使用できます。

別の露骨な問題はステップ6にあり、各キーに対してブルートフォース攻撃を簡単に簡単に実行できます。以下を参照してください。 Wi-Fiネットワークにおける悪質なツインの脆弱性


さらに読む

MD4

DESチャレンジ

[〜#〜] des [〜#〜]

NTおよびLMハッシュ

NTLMV1の使用を停止

LM、NTLM、Net-NTLMv2、oh my!

1
J.J