第八章:企業向け WPA および RADIUS の攻撃
企業向け WPA は、多くのネットワーク管理者にとって不可侵の城と見なされています。しかし、この章では、その「銀の弾丸」という見方の限界を示します。Kali Linux に含まれるツールとテクニックを活用し、企業向け WPA を攻撃する方法を学びます。
8.1 FreeRADIUS-WPE の設定
企業向け WPA 攻撃には RADIUS サーバーが必要です。最も広く使われているオープンソース RADIUS サーバーは FreeRADIUS ですが、設定が複雑で、攻撃ごとに設定するのは面倒です。Joshua Wright は、FreeRADIUS を攻撃に適した形にするパッチを開発しました。このパッチは FreeRADIUS-WPE として公開されています。Kali には標準で含まれていないため、以下の手順で設定します。
https://github.com/brad-anton/freeradius-wpeにアクセスし、ダウンロードリンクhttps://github.com/brad-anton/freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386.debを見つけます。- ダウンロードが完了したら、以下のコマンドでインストールします:
dpkg -i freeradius-server-wpe_2.1.12-1_i386.deb
次に、Kali で RADIUS サーバーを設定します。
実践:FreeRADIUS-WPE を使用した偽のアクセスポイントの構築
- アクセスポイントの LAN ポートの 1 つを Kali ホストのイーサネット ポートに接続します。ここではインターフェースが
eth0です。このインターフェースを起動し、DHCP を実行して IP アドレスを取得します。 - アクセスポイントにログインし、セキュリティ モードを WPA/WPA2-Enterprise に設定します。バージョンを WPA2、暗号化を AES に設定します。次に、
EAP (802.1x)セクションで、RADIUS サーバーの IP アドレス(Kali の IP アドレス)を入力します。RADIUS パスワードはtestです。 - 新しいターミナルを開き、ディレクトリ
/usr/local/etc/raddbに移動します。これは FreeRADIUS-WPE のすべての設定ファイルが保存されている場所です。 eap.confを開きます。デフォルトのdefault_eap_typeが MD5 に設定されていることがわかります。これをpeapに変更します。clients.confを開きます。ここで、RADIUS サーバーに接続できるクライアントのホワイトリストを定義します。設定例を無視して下にスクロールすると、範囲192.168.0.0/16のsecretがデフォルトでtestに設定されていることがわかります。これは、ステップ 2 で使用したものです。- 以下のコマンドで RADIUS サーバーを起動します:
radiusd -s -X - サーバーが起動すると、デバッグ情報が画面に表示されますが、最終的にサーバーはポートをリッスンし、安定します。これで、この章の実験を開始する準備が整いました。
何が起こったか?
FreeRADIUS-WPE を正常に設定しました。この章の残りの実験で使用します。
試してみてください:RADIUS を操作する
FreeRADIUS-WPE には多くのオプションがあります。それらに慣れることが重要です。異なる設定ファイルと、それらがどのように連携するかを確認する時間をかける価値があります。
8.2 PEAP の攻撃
保護された拡張認証プロトコル(PEAP)は、EAP の最も広く使用されているバージョンです。これは Windows にネイティブで組み込まれた EAP メカニズムです。
PEAP には 2 つのバージョンがあります:
- PEAPv0(Windows がネイティブでサポートするため最も人気があります)を使用する EAP-MSCHAPv2。
- PEAPv1 で使用する EAP-GTC。
PEAP はサーバー側の証明書を使用して RADIUS サーバーを検証します。ほとんどの PEAP 攻撃は、証明書の検証の不適切な設定を利用します。
次の実験では、クライアントで証明書の検証を無効にした場合に PEAP を破る方法を見ていきます。
実践:PEAP の破り方
- PEAP が有効になっていることを確認するために、再度
eap.confファイルを確認します。 - 次に、RADIUS サーバーを再起動します:
radiusd -s -X - FreeRADIUS-WPE によって作成されたログ ファイルを監視します。
- Windows は PEAP をネイティブでサポートします。証明書の検証を無効にしていることを確認します。
Secured passwordの隣にあるConfigureタブをクリックし、Windows が自動的に Windows ログイン名とパスワードを使用しないように指示します。- また、
Advanced SettingsダイアログでUser authenticationを選択する必要があります。 - クライアントがアクセス ポイントに接続すると、クライアントはユーザー名とパスワードの入力を求めます。ユーザー名として
Monster、パスワードとしてabcdefghiを使用します。 - 完了すると、ログ ファイルに MSCHAP-v2 challenge レスポンスが表示されます。
- 次に、
asleapを使用してこれを破ります。パスワード リスト ファイルにabcdefghiが含まれているため、それを破ることができます。(デモンストレーションの目的で、単一行のファイルlistを作成しました。リストに含まれています。)
何が起こったか?
FreeRADIUS-WPE を使用してハニーポットを構築しました。企業クライアントは、PEAP 証明書の検証を無効にして設定されていました。これにより、偽の証明書をクライアントに提示でき、それが喜んで受け入れられました。これが発生すると、内部認証プロトコル MSCHAP-v2 が開始されます。クライアントが偽の証明書を使用してデータを復号化するため、ユーザー名、challenge、およびレスポンスのタプルを簡単に読み取ることができます。
MSCHAP-v2 は辞書攻撃に対して脆弱です。challenge とレスポンスのペアを破るために asleap を使用します。これは、辞書内の単語に基づいているように見えるためです。
試してみてください:PEAP のバリエーションを攻撃する
PEAP は、さまざまな方法で不適切に設定できます。証明書の検証が有効になっていても、管理者がサーバー リストに検証サーバーを指定していない場合、攻撃者はリストされた認証機関のいずれからでも他のドメインの有効な証明書を取得できます。これでもクライアントは受け入れます。この攻撃の他のバリエーションも可能です。
この章のさまざまな可能性を探索することをお勧めします。
EAP-TTLS
この章で PEAP に対して行ったことと同様に、EAP-TTLS を攻撃してみることをお勧めします。
企業のセキュリティ ベスト プラクティス
WPA/WPA2 に対する多くの攻撃を見てきました。個人用と企業用の両方です。経験に基づき、次のことを推奨します:
- SOHO および中小企業の場合、WPA2 を使用し、最大 63 文字の強力なパスワードを入力できることを最大限に活用します。
- 大規模な企業の場合、EAP-TLS を使用した企業向け WPA2 を使用します。これはクライアントとサーバーの両方で証明書を使用して認証を行うため、現在のところ破る方法はありません。
- PEAP または EAP-TTLS を使用する WPA2 が必要な場合は、証明書の検証を有効にし、正しい認証機関を選択し、RADIUS サーバーで認可を有効にし、最後に、ユーザーが新しい RADIUS サーバー、証明書、または認証機関を受け入れることを許可する設定を無効にしてください。
小テスト:企業向け WPA および RADIUS の攻撃
- FreeRADIUS-WPE は何ですか?
- ゼロから書かれた RADIUS サーバー。
- FreeRADIUS サーバーのパッチ。
- すべての Linux にデフォルトで含まれているバージョン。
- 上記のいずれでもない。
- PEAP を攻撃するためにどれが使用できますか?
- 偽の認証情報。
- 偽の証明書。
- WPA-PSK の使用。
- すべて。
- EAP-TLS は何を使用しますか?
- クライアント証明書。
- サーバー証明書。
- 1 または 2。
- 1 と 2。
- EAP-TTLS は何を使用しますか?
- クライアント証明書のみ。
- サーバー証明書。
- パスワードベースの認証。
- LEAP。
第九章:ワイヤレス渗透テストの方法論
この章では、前の章で学んだテクニックを、完全なワイヤレス渗透テストに変えるためのステップをリストアップします。
ワイヤレス渗透テスト
ワイヤレス渗透テストを行うには、確立された方法論に従うことが重要です。単に airbase または airodump コマンドを実行し、楽観的な気持ちでいるだけでは、テストの目標を達成できません。渗透テスト担当者として働く場合、雇用主の組織標準に従う必要があり、それがない場合は、独自の最高基準に従う必要があります。
広く言えば、ワイヤレス渗透テストは次の段階に分類できます:
- 計画段階
- 探索段階
- 攻撃段階
- 報告段階
これらの段階をそれぞれ見ていきます。
計画
この段階では、次のことを理解する必要があります:
- 範囲の評価:渗透テスト担当者はクライアントとやり取りし、到達する範囲を定義し、同時にネットワーク セキュリティに関する多くの洞察を得る必要があります。通常、次の情報を収集する必要があります:
- 渗透テストの場所
- エリア全体のカバレッジ
- 展開されたアクセス ポイントとワイヤレス クライアントの概算数
- どのワイヤレス ネットワークが関係しているか
- 利用の存在
- ユーザーを対象とした攻撃が必要かどうか
- サービス拒否が必要かどうか
- 作業量の見積もり:定義された範囲に基づいて、テスト担当者は後でどれくらいの時間が必要かを推定する必要があります。その後、範囲を再定義する必要がある可能性があることを忘れないでください。組織が時間と資金に限られたリソースしかない可能性があるためです。
- 合法性:テストを実行する前に、クライアントは同意する必要があります。これは、テストに含まれる内容を説明し、補償レベル、保険、および範囲の制限を明確に定義するために使用する必要があります。確信が持てない場合は、この分野の専門家と相談する必要があります。ほとんどの組織には独自のバージョンがあり、保密契約(NDA)を含む場合もあります。
すべての前提条件が満たされると、開始できます。
探索
この段階の目標は、範囲内のワイヤレス デバイスとワイヤレス ネットワークの特徴を特定および適用することです。
これを完了するために使用されるすべてのテクニックは、前の章でリストされています。簡単に言うと、目標は次のとおりです:
- エリア内のすべての可視および非表示のワイヤレス ネットワークを列挙します。
- エリア内のデバイスと、ターゲット ネットワークに接続されているデバイスを列挙します。
- エリア内のネットワークをマッピングし、どこから到達できるか、そして悪意のあるユーザーが攻撃を実行できる場所(例:カフェ)があるかどうかを確認します。
これらの情報はすべて記録する必要があります。テストが偵察行動に限定されている場合、テスト担当者はここで終了し、これらの情報に基づいて結論を導き出そうとします。クライアントにとって役立つ可能性のあるいくつかのステートメントは次のとおりです:
- オープン ネットワークと会社のネットワークに接続されているデバイスの数
- WiGLE などのソリューションを介して特定のエリアのネットワークに接続できるデバイスの数
- 弱い暗号化の存在
- ネットワーク設定が非常に強力
攻撃
偵察が完了すると、概念を証明するために利用を実行する必要があります。攻撃が赤側またはより広範な評価の一部として実行される場合、ネットワークへのアクセスを獲得するために可能な限り秘密裏に実行する必要があります。
攻撃段階では、次のことを探索します:
- 暗号の破り方
- 施設への攻撃
- クライアントへの侵入
- 脆弱なクライアントの発見
- 未承認のクライアントの発見
暗号の破り方
最初のステップは、特定の脆弱なネットワークのキーを取得することです。ネットワークに WEP 暗号化が存在する場合は、第 4 章の WEP 破り方法を実行します。WPA2 暗号化されている場合は、2 つの選択肢があります。秘密裏に行動する必要がある場合は、人々が検証および検証を解除する可能性のある時間帯に現場に数回到着します。これらの時間帯は次のとおりです:
- 一日の始まり
- ランチタイム
- 一日の終わり
この時点で、第 4 章のように WPA キー リトリーバーを設定します。また、第 6 章のようにデauthentication 攻撃を実行することもできます。
成熟した組織では、これによりノイズが発生し、発見されやすくなります。
企業向け WPA が存在する場合は、偵察段階で収集した情報を使用して正しいネットワークを特定し、偽のサイトを設定する必要があることを忘れないでください(第 8 章のように)。
すべてのパスワードを試すことができますが、いくつかは破れない可能性があることを忘れないでください。テストのガイドラインに従い、ワイヤレス管理者が使用するパスワードを確認し、パスワードが十分に安全かどうかを確認します。テスト担当者として、ツールや運のせいで失敗しないでください。
施設への攻撃
ネットワークへのアクセスが暗号の破りによって獲得された場合、許可されている場合は、範囲内で標準的なネットワーク渗透テストを実行します。少なくとも次のことを実行する必要があります:
- ポート スキャン
- 実行されているデバイスの識別
- FTP、SMB、または HTTP などの検証されていないサービスの列挙
- 識別された脆弱なサービスの利用
クライアントへの侵入
すべてのワイヤレス システムを列挙およびテストした後、クライアントに対して、適切なさまざまな攻撃を実行できます。
必要に応じて、どのクライアントが Karma 攻撃に対して脆弱かを判断した後、第 8 章の方法で偽のサイトを作成して接続を強制します。これにより、多くの有用な情報の断片を収集できますが、収集された情報が目的のために使用され、より安全な方法で保存、伝播、および使用されていることを確認してください。
報告
最後に、テストの終わりに、クライアントに発見事項を報告する必要があります。レポートがテストの品質に合っていることを確認することが重要です。クライアントはレポートしか見えないため、テストを実行する際に、レポートに特別な注意を払う必要があります。レポートの概要のガイドは次のとおりです:
- 管理サマリー
- 技術サマリー
- 発見:
- 脆弱性の説明
- 重大度
- 影響を受けるデバイス
- 脆弱性の種類 – ソフトウェア/ハードウェア/設定
- 是正措置
- 付録
管理サマリーは、非技術的な聴衆に報告するためのもので、より高いレベルの影響とソリューションに焦点を当てる必要があります。技術的な言語を避け、根本原因が含まれていることを確認してください。
技術サマリーは、管理サマリーと発見リストの間でバランスを取する必要があります。その聴衆は開発者または技術リーダーであり、問題を解決する方法と実現可能なより広範なソリューションに焦点を当てます。
発見リストは、各脆弱性をより低いレベルで説明し、識別および再現するために使用された方法、および欠陥を説明します。
付録には、短く説明できない追加情報が含まれている必要があります。スクリーンショット、POC、および盗まれたデータはここに表示する必要があります。
第十章:WPS とプローブ
この章では、WPS 攻撃とプローブ監視の新しいテクニック、およびワイヤレス テストをより簡単にする pineapple ツールが含まれています。これらの攻撃とツールは、この本の第 1 版のリリース中に登場し、この本をできるだけ包括的にするために含めました。
10.1 WPS 攻撃
ワイヤレス保護設定(WPS)は 2006 年に導入され、ワイヤレスに関する知識のないユーザーがネットワークを保護するのに役立ちました。その考え方は、WIFI が単一の非表示のハードコードされた値を持ち、キー メモリを介してアクセスを許可することでした。新しいデバイスは、WIFI ルーターのボタンを押すことで検証できます。家の外にいる人はデバイスを解除できないため、アクセス権を取得できません。したがって、この問題は WPA キーを覚えるか、より短いキーを設定するかのどちらかになりました。
2011 年末、WPS 検証システムのブルート フォース攻撃のセキュリティ脆弱性が公開されました。WPS 交換に必要なトラフィックは簡単に傍受でき、WPS Pin 自体は 0 から 9 までの 8 文字しかありません。最初は、これは 100,000,000 の可能性を提供し、8 文字の azAZ09 パスワードと比較して 218,340,105,584,896 の組み合わせを持つことができます。
しかし、さらなる脆弱性が存在します:
- WPS Pin の 8 文字のうち、最後の 1 つは最初の 7 つのチェックサムであるため、予測でき、選択肢は 10,000,000 に減ります。
- さらに、最初の 4 つと最後の 3 つの文字が個別に検証されるため、合計で 11,000 の選択肢があります。
検証メカニズムで 2 回判断する必要があるため、可能な組み合わせは 100,000,000 から 11,000 に減少します。これは、ブルート フォース アルゴリズムを実行する場合の 6 時間の差に相当します。これらの判断により、WPS は攻撃に対してより脆弱になります。
次の実験では、Wash と Reaver を使用して WPS 構成の脆弱性を特定および攻撃する方法を見ていきます。
実践:WPS 攻撃
- WPS が有効なアクセス ポイントを攻撃する前に:まずそれを作成する必要があります。使用する TP-LINK にはこの機能があり、デフォルトで有効になっています。これは非常に面倒ですが、便利です。これを再確認するには、ルーターにログインして WPS をクリックします。次のようになります:
- 次に、準備ができていることを確認します。ターゲットを起動する必要があります。テスト環境を設定する必要があります。Wash ツールを使用する予定です。Wash にはモニター インターフェースが必要です。以前と同様に、次のコマンドを使用して起動する必要があります:
出力は次のようになります:airmon-ng start wlan0 - モニター インターフェース
mon0を持っているので、次のコマンドで Wash を呼び出すことができます:wash --ignore-fcs -i mon0ignore fcsオプションは、washによって引き起こされる既知の要求形式の問題のためです: - WPS をサポートするすべての近くのデバイスを表示します。WPS が有効かロックされているか、およびそれらのバージョン:
Wireless Labが WPS をサポートしていることがわかります。バージョン 1 を使用し、WPS がロックされていません。素晴らしい。MAC アドレスに注意してください。ここではE8:94:F6:62:1E:8Eです。これは次のツールreaverのターゲットになります。- Reaver は指定された MAC アドレスの WPS Pin をブルート フォースしようとします。その構文は次のとおりです:
出力は次のようになります:reaver -i mon0 -b <mac> -vv - 開始すると、このツールはすべての可能な WPS 組み合わせを実行し、検証を試みます。完了すると、WPS コードとパスワードが返されます。次のようになります:
- WPA-PSK を取得した後、通常の検証を実行できます。デフォルトの WPA-PSK を WPS Pin に一致するようにデバイスに残しました。
reaverで Pin を指定することで実現できます。次のコマンドを使用します:
私の Pin を自分のものに置き換えてください。reaver -i mon0 -b <mac> -vv -p 88404148
何が起こったか?
Wash を使用して、WPS 脆弱性インスタンスを持つワイヤレス ネットワークを正常に特定しました。次に、Reaver を使用して WPA キーと WPS Pin を回復しました。この情報を使用して、ネットワークを検証し、ネットワーク渗透テストを続行できます。
試してみてください:レート制限
前の練習では、完全に暗号化されていない WPS インストール全体を攻撃しました。WPS を削除せずに、より安全なインストールをさらに探索するために使用できる複数の方法があります。
WPS Pin を任意の値に設定して再度試行し、Reaver がすばやく破れるかどうかを確認します。
WPS 試行レートを制限できるルーターを取得します。攻撃を調整してロックをトリガーしないようにします。
10.2 プローブ スニッフィング
プローブは、非表示のネットワークを識別し、効果的な偽のアクセス ポイント攻撃を実行する方法について説明しました。また、個々をターゲットにしたり、最小限の労力で大規模な範囲でそれらを識別したりすることもできます。
デバイスがネットワークに接続しようとすると、MAC アドレスと接続したいネットワーク名を含むプローブ要求を送信します。これらを airodump-ng などのツールを使用して追跡できます。しかし、特定の時間に特定の場所に個々が存在するかどうかを識別したい場合、または WIFI 使用の傾向を発見したい場合、異なるアプローチが必要です。
このセクションでは、tshark と Python を使用してデータを収集します。コードと完了したことの説明が与えられます。
実践:データの収集
- まず、複数のネットワークを検索するデバイスを見つける必要があります。通常、標準の Android または iPhone スマートフォンで十分です。デスクトップは通常、1 か所に留まるため、良いターゲットではありません。新しい iPhone または Android デバイスは、プローブ要求を無効にしているか、不明な場合があるため、放棄する前に確認してください。
- デバイスを手に入れたら、WIFI をオンにしてください。
- 次に、以前と同様にモニター インターフェースを起動します。
- 次に実行する必要があるのは、次のコマンドを使用してプローブ要求を探す
tsharkです:
コマンドのスクリーンショットは次のとおりです:tshark -n -i mon0 subtype probereq - ここでの出力は少し乱雑になる可能性があります。なぜなら、
tsharkのデフォルトの出力は読みやすくするために設計されておらず、できるだけ多くの情報を表示するからです。次のようになります: - MAC アドレスとプローブ要求の SSID が表示されます。しかし、出力はさらに読みやすくできます。次のコマンドを使用して、より読みやすくすることができます:
コマンドのスクリーンショットは次のとおりです:tshark -n -i mon0 subtype probereq -T fields -e separator= -e wlan.sa -e wlan_mgt.ssid - 出力はより読みやすくなります:
- したがって、今では読みやすい形式の出力が得られました。次に何をしますか?コマンドを実行し、後で分析するために出力を記録する Python スクリプトを作成します。コードを実行する前に、モニター インターフェースが準備されていること、およびディレクトリに
results.txtファイルが作成されていることを確認してください。Python スクリプトは次のとおりです:
Python スクリプトを簡単に見てみましょう:import subprocess import datetime results = open("results.txt", "a") while 1: blah = subprocess.check_output(["tshark -n -i mon0 subtype probereq -T fields -e separator= -e wlan.sa -e wlan_mgt.ssid -c 100"], shell=True) splitblah = blah.split("\n") for value in splitblah[:-1]: splitvalue = value.split("\t") MAC = str(splitvalue[1]) SSID = str(splitvalue[2]) time = str(datetime.datetime.now()) results.write(MAC + " " + SSID + " " + time + "\r\n")import subprocessライブラリとdatetimeライブラリ:これにより、サブプロセスと日時ライブラリを参照できます。subprocessは Linux コマンド ラインからモニター インターフェースを監視するために使用でき、datetimeライブラリは正確な時刻と日付を取得するために使用できます。while 1:このコード行は停止する前に実行を続けます。results = open("results.txt", "a"):これはファイルを追加モードで開き、resultsに割り当てます。追加モードは、スクリプトがファイルの内容を追加できるようにするだけなので、ファイルが上書きされるのを防ぎます。blah = subprocess.check_output(["tshark -n -i mon0 subtype probereq -T fields -e separator= -e wlan.sa -e wlan_mgt.ssid -c 100"], shell=True):これはシェルを開き、以前に実行したtsharkコマンドを実行します。この唯一の違いは-c 100です。このオプションは、コマンドを 100 個のクエリに制限します。これにより、プログラムを停止せずに結果を自分に返すことができます。スクリプトが書き込み後に常に実行し続けるように言ったため、スクリプトは再度開始されます。- このコード行はシェルから出力を取得し、それを変数
blahに割り当てます。 splitblah = blah.split("\n"):変数blahを受け取り、改行で分割します。for value in splitblah[:-1]:入力の各行に対して、以下の操作を繰り返します。ヘッダーを含む最初の行を無視します。splitvalue = value.split("\t"):各行をタブ文字を区切り文字としてより小さな部分に分割します。- 次の 3 行は、各テキスト セグメントを取得し、それを変数に割り当てます:
MAC = str(splitvalue[1]) SSID = str(splitvalue[2]) time = str(datetime.datetime.now()) results.write(MAC + " " + SSID + " " + time + "\r\n"):これらすべての値を受け取り、それらをファイルに書き込み、スペースで区切り、クリーンにするために最後に改行と改行を追加します。
ファイルに出力されるのは、クリーンなテキスト行です。
何が起こったか?
プローブ要求から入力を受け取り、それを Python を使用してファイルに出力しました。
自分で「これは何の目的ですか?」と尋ねるかもしれません。これは、元の tshark コマンドを実行し、>> results.txt を追加するだけで実行できます。正しいですが、他のツール、可視化プラットフォーム、データベース、およびサービスを統合するためのフレームワークを作成しました。
たとえば、WiGLE データベースを使用して SSID を位置にマッピングすると、SSID 変数を受け取り、WiGLE データベースをクエリする新しいコード行を追加できます。
代わりに、MySQL データベースを構築し、結果をそこに保存して SQL コマンドを実行することもできます。
このセクションでは、独自のプローブ監視攻撃を作成するための最初のステップを提供します。この実験を通じて、この単純なコードを最初のステップとして使用することで、ほとんどの実用的なツールを作成できます。
試してみてください:概念を拡張する
情報をプロットするために使用できる可視化およびデータ分析ツールを研究します。たとえば、Maltego などのツールには無料バージョンがあり、情報をプロットするために使用できます。
独自の MySQL データベースを構築し、前の Python スクリプトを調整して結果をデータベースに出力します。次に、別のスクリプト(または同じファイル内)を作成するか、データを取得して Maltego に出力します。
スクリプトを調整して WiGLE をクエリし、プローブ要求から地理的位置データを収集します。Maltego でデータを出力します。
Flask、Django、または PHP を使用して Web フロントエンドを構築してデータを表示します。データを表示するための既存のソリューションを研究し、作成者と話してそれらを模倣および改善しようとします。