Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
macstealer — MacStealer: Wi-Fi Client Isolation Bypass | Kitploit
ツール/GitHubGitHub/vanhoefm/macstealer
Wi-Fi AuditingVulnerability AnalysisExploitationInformation GatheringNetwork SecurityWireless SecurityPenetration TestingRed Teaming
GitHubvanhoefm/macstealer

macstealer

MacStealer: Wi-Fi Client Isolation Bypass

リポジトリを見る
552608ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

MacStealer: Wi-Fi クライアント分離バイパス

1. はじめに

このリポジトリにはMacStealerが含まれています。これはWi-Fiネットワークのクライアント分離バイパスをテストできます (CVE-2022-47522)。私たちの攻撃は、クライアント同士の通信が防止されている場合でも、MACレイヤで他のクライアント宛てのトラフィックを傍受(窃取)できます。 この脆弱性は、悪意のある内部関係者が存在するWi-Fiネットワークに影響し、私たちの攻撃はクライアント分離(AP分離とも呼ばれる)をバイパスできます。 この攻撃はDynamic ARP inspection(DAI)のバイパスにも使用でき、クライアント同士の攻撃を防ぐ他の方法のバイパスにもおそらく使用できます。 この攻撃は_セキュリティコンテキスト上書き攻撃_としても知られており、私たちの USENIX Security '23論文(リポジトリ)のセクション5を参照してください。

影響を受ける可能性のあるネットワークの具体例は以下のとおりです:

  • ユーザーが互いを信頼しない可能性があり、クライアント分離やARP検査などの技術を使用してユーザー同士の攻撃を防いでいるエンタープライズネットワーク。たとえば、 ゲストとスタッフの両方のアカウントがある社内ネットワーク、eduroamやgovroamなどのネットワーク。

  • Passpoint(旧Hotspot 2.0)で保護された公衆ホットスポット。 これらは自動的かつ安全に接続できるホットスポットです。たとえば、 スマートフォンのSIMカードを使用してシームレスに認証できます。

  • クライアント分離が有効な家庭用WPA2またはWPA3ネットワーク。これには、 ゲスト用または安全でない(IoT)デバイス用の別個のSSIDを持つネットワークが含まれます。また、デバイスをさらに分離するために複数のパスワードを使用するネットワークも含まれ、これは Multi-PSK、 Identity PSK、 per-station PSK、 またはEasyPSKとしても知られています。 追加情報については脅威モデルの議論を参照してください。

  • WPA3 SAE-PKに基づく公衆ホットスポット。 これらは共有の公開パスワードで保護されたホットスポットですが、攻撃者は この公開既知のパスワードを悪用できません。

私たちの攻撃はVLANをバイパスできないことに注意してください。言い換えると、現在の実験に基づくと、 私たちの攻撃は別のVLAN内のデバイスを悪用するために使用できません。

USENIX Security '23の他の結果のリポジトリも利用可能です。

2. 脆弱性の詳細

この攻撃の核となる考え方は、クライアントの認証方法が、パケットが正しいWi-Fiクライアントにルーティングされる方法とは無関係であるということです。つまり、 認証はパスワード、ユーザー名、802.1X ID、および/または証明書に基づいて行われますが、クライアントが接続した後は、 パケットのルーティングはMACアドレスに基づいて行われます。悪意のある内部関係者はこれを悪用して、被害者を切断してから被害者のMACアドレスで接続することで、 Wi-Fiクライアント宛てのデータを傍受できます (攻撃者の認証情報を使用して)。被害者宛てにまだ送信途中だったパケット、たとえば被害者がまだ読み込み中のウェブサイトデータは、 代わりに攻撃者が受信することになります。

より正確には、攻撃は次の3つのステップで構成されます:

  1. 被害者にデータを要求させる: 攻撃者はまず、被害者(クライアント)が 脆弱なアクセスポイント(AP)とのWi-Fi接続を確立するまで待ちます。被害者は その後、インターネット上のサーバーにリクエストを送信すると仮定します。たとえば、被害者は (平文の)ウェブサイトexample.comにHTTPリクエストを送信するかもしれません。攻撃者の目標は、 ウェブサイトによって送信されるレスポンスを傍受することです。

  2. 被害者のMACアドレスで接続する: 被害者がデータを要求した後、たとえば HTTPリクエストパケットを送信することで、攻撃者はレスポンスが脆弱なAPに到着する_前に_ 被害者をネットワークから強制的に切断します。 この例では、example.comからのレスポンスがAPに到着する前に被害者が切断されることを意味します。 被害者が切断されると、攻撃者は被害者のMACアドレスを偽装し、 攻撃者自身の認証情報を使用してネットワークに接続します。つまり、攻撃者は 自身の認証情報を使用してネットワークに接続できる悪意のある内部関係者であり、たとえば エンタープライズWi-Fiネットワークで自身のユーザー名とパスワードを使用します。

  3. レスポンスの傍受: 攻撃者が被害者のMACアドレスで接続すると、 APは攻撃者の新しく生成された暗号鍵を被害者のMACアドレスに関連付けます。 その結果、サーバーからのレスポンスがWi-Fiネットワークに到着したとき、または一般的に被害者宛ての 着信トラフィックがあるとき、ルーターはこれらの着信パケットを被害者の MACアドレスに転送します。この例では、example.comからのレスポンスがルーターによって被害者のMACアドレスに転送されることを意味します。 しかし、攻撃者は現在このMACアドレスを使用しています。つまり、 APは攻撃者の鍵を使用してレスポンスを暗号化します。言い換えると、攻撃者は 被害者宛てにまだ送信途中の保留中のトラフィックをすべて受信することになります。

傍受されたトラフィックは、TLSやHTTPSなどの上位層の暗号化によって保護されている場合があることに注意してください。 それでも、上位層の暗号化が使用されている場合でも、私たちの攻撃は 被害者が通信しているIPアドレスを明らかにします。これにより、被害者が訪問しているウェブサイトが明らかになり、 それ自体が機密情報になり得ます。

デフォルトでは、この攻撃は被害者_が送信する_トラフィックを傍受せず、被害者_に向けて送信される_ トラフィックのみを傍受できます。ただし、攻撃者はその後の攻撃を試みて、被害者によって送信されるトラフィックも 傍受できます。特に、被害者へのDNS応答を傍受することにより、 攻撃者はDNS応答を偽装して、被害者に向けて送信されるIPトラフィックと被害者によって送信されるIPトラフィックの両方を傍受できます。

上記の攻撃を実行することは、対象ネットワークでクライアント分離が有効な場合にのみ意味があります。 そうでない場合、クライアント分離が無効になっていると、悪意のある内部関係者は ARPスプーフィングなどの技術を使用して他のクライアントを直接攻撃できます( クライアント分離テストを参照)。

この攻撃は、エンタープライズWPA1、WPA2、WPA3ネットワークに対して同一です。これは、この攻撃が Wi-Fiの暗号特性を悪用するのではなく、ネットワークがどのクライアントにパケットを送信するか(つまりルーティングするか)を決定する方法を悪用するためです。

攻撃の詳細については、私たちの論文 Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queuesの_セキュリティコンテキスト上書き攻撃_(セクション5)を参照してください。

3. 考えられる緩和策

3.1. MACアドレス窃取の防止

私たちの攻撃を緩和するために、APは、最近APに接続されていたMACアドレスを使用しているクライアントの接続を一時的に防ぐことができます。これにより、攻撃者が MACアドレスを偽装して、被害者宛ての保留中またはキューイングされたフレームを傍受することを防ぎます。MACアドレスの背後にあるユーザーが変更されていないことを保証できる場合、 クライアントは即座に再接続を許可されます。 このチェックは、同じ配信システムの一部であるすべてのAP、より具体的には、クライアントが現在のIPアドレスを維持したままローミングできるすべてのAPにわたって実行する必要があることに注意してください。

3.1.1. 共有パスフレーズを使用する場合

最近接続されたユーザーを安全に認識するために、APはクライアントのMACアドレスとそのキャッシュされたセキュリティアソシエーション(たとえば、キャッシュされたPMK)の間のマッピングを保存できます。クライアントは、このMACアドレスにリンクされたキャッシュされたセキュリティアソシエーションを所有していることを証明することで(たとえば、正しいキャッシュされたPMKを使用して接続することで)、最近使用されたMACアドレスで即座に(再)接続を許可されます。

multi-PSKを使用する場合(per-station PSKまたはIdentity PSKとしても知られる)、 APは最近接続されたMACアドレスとそれらが使用した(一意の)パスワードのマッピングを保持できます。 クライアントが接続するとき、APはそのMACアドレスが最近使用されたかどうかをチェックします。使用されていない場合、または使用されておりクライアントが以前と同じパスワードを使用している場合、クライアントは通常どおり接続できます。ただし、 同じMACアドレスが異なるパスワードで使用されている場合、クライアントは正常に接続できるようになるまで事前定義された時間待機することを強制されます。

SAE-PKを使用してホットスポットを保護する場合、MACアドレスが以前と同じユーザーによって再利用されていることを安全に認識するために私たちが知っている唯一の方法は、キャッシュされたセキュリティアソシエーション(たとえば、MACアドレスにリンクされたキャッシュされたPMK)に依存することです。

上記の防御策は、一定の遅延後、被害者宛ての保留中のパケットがそれ以上到着しないことを前提としています。この遅延を超えた漏洩を防ぐために、クライアントは通信するサービスとのエンドツーエンド暗号化(TLSなど)を使用できます。

3.1.1. 802.1X認証とRADIUS拡張を使用する場合

802.1X EAPベースの認証を使用する場合、最近接続されたユーザーを安全に認識するための代替のより良い方法は、802.1X認証中に使用したEAP IDに基づくものです。APは、クライアントを認証したRADIUSサーバーからEAP IDを安全に学習でき、最近接続されたMACアドレスと対応するEAP IDのマッピングを保持できます。クライアントが接続するとき、APはそのMACアドレスが最近使用されたかどうかをチェックします。使用されていない場合、または使用されておりクライアントが以前と同じEAP IDを使用している場合、クライアントは通常どおり接続できます。ただし、同じMACアドレスが異なるEAP IDで使用されている場合、クライアントは正常に接続できるようになるまで事前定義された時間待機することを強制されます。

1つの課題は、プライバシーの懸念により、APがクライアントの802.1X IDを常に把握できるとは限らないことです。たとえば、この情報はホームAAAサーバーでのみ利用可能であり、APはRADIUSサーバーからChargeable User Identityのみを受け取ります。このIDでは、その値が常に変化する可能性があるため、APは同じデバイス/認証情報の2つのアソシエーションを認識できません。APはEAP-Response/Identityで匿名ID(anonymous@realmなど)を受け取り、少なくとも異なるレルムのユーザーを認識するためにそれに依存できます。

クライアントのIDをAPに明かさずに、同じレルムのユーザーが互いに攻撃するのを防ぐには、RADIUSサーバーの協力と変更が必要です。特に、 RADIUSサーバーを更新して、MACアドレスが最近同じレルム(特定のローカルネットワーク内)の別のユーザーによって使用されていたかどうかの検出を支援できます。RADIUSサーバーは、クライアントが切断されたときに通知を受け取り、MACアドレスが最後にどのユーザーによって使用されていたかを把握し、接続しようとしているクライアントのMACアドレスを通知される必要があります。

最後の注意点として、EAP IDに依存するこのアプローチは異なるユーザーが互いに攻撃するのを防ぎますが、侵害されたデバイスが同じユーザーの別のデバイスを攻撃するのを防ぐことはできません。つまり、攻撃は異なるユーザー間でのみ防止され、同じユーザーの異なるデバイス間では防止されません。

3.2. ゲートウェイのMACアドレスの保護

重要な注意点として、私たちの攻撃はWi-Fiクライアントに向かうパケットの傍受に限定されません。攻撃者は、デフォルトゲートウェイまたはローカルネットワーク内の別のサーバーのMACアドレスに関連付けようとすることもできます。このような攻撃を防ぐために、APまたはコントローラーは、クライアントがデフォルトゲートウェイと等しいMACアドレスを使用することを禁止できます。より一般的には、Wi-Fiクライアントがネットワークに接続するときに重複MACアドレス検出を使用して、Wi-Fiクライアントがネットワーク内の他のデバイスでも使用されているMACアドレスを使用することを防ぐことができます。

3.3. Management Frame Protection(802.11w)

Management Frame Protection(MFP)を使用すると、攻撃は困難になりますが不可能にはなりません。 以前の研究で、MFPが使用されている場合でもクライアントを切断/非認証化できるいくつかの方法を発見しました。その 経験に基づくと、MFPが使用されている場合でも、クライアントをネットワークから強制的に切断する方法は常に存在するように見えます。言い換えると、切断および非認証化攻撃を完全に防ぐことは困難です。とはいえ、MFPは実際に攻撃を実行する際の追加のハードルとなるため、実際の攻撃をより困難にする(ただし不可能にはしない)有用な緩和策となり得ます。

3.4. VLANの使用

予備的な実験に基づくと、この攻撃は異なるVLAN間では機能しません。言い換えると、攻撃を実行する悪意のある内部関係者は被害者と同じVLANにいる必要があります。したがって、1つの緩和策は、異なるユーザーグループを異なるVLANに配置することです。ただし、悪意のある内部関係者は、同じVLAN内の他のユーザーに対して攻撃を実行(つまりクライアント分離をバイパス)できます。

multi-PSK(別名per-station PSKまたはidentity PSK)を使用する場合、クライアントが使用するパスワードに応じてクライアントを異なるVLANに配置できることに注意してください。言い換えると、パスワードごとにVLANを使用できます。これにより、異なるパスワードを持つクライアントが互いに攻撃するのを防ぎます。

4. ツールの前提条件

MacStealerツールは、Linuxでサポートされている任意のネットワークカードで動作します。MacStealerをUbuntu 22.04でテストしました。Ubuntu 22.04に必要な依存関係をインストールするには、次を実行します:

root@kitploit:~
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
	libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
	aircrack-ng rfkill

次に、このリポジトリをクローンし、ツールをビルドして、仮想python3環境を構成します:

root@kitploit:~
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh

上記の手順は一度だけ実行する必要があります。

gitを使用して新しいコードをプルした後は、./build.shと./pysetup.shを再度実行する必要があります。調整された開示が開始されてからのMacStealerの更新の詳細な概要については変更ログを参照してください。

5. 使用前の準備

5.1 実行環境

MacStealerを使用するたびに、まずrootとして仮想python3環境をロードする必要があります。これは次を使用して実行できます:

root@kitploit:~
cd research
sudo su
source venv/bin/activate

次に、ネットワークマネージャーでWi-Fiを無効にして、MacStealerに干渉しないようにする必要があります。オプションでsudo airmon-ng checkを使用して、ワイヤレスネットワークカードを使用していてMacStealerに干渉する可能性のある他のプロセスを確認できます。

5.2. ネットワーク構成

次のステップは、テストするネットワークの情報を含むようにclient.confを編集することです。 これはwpa_supplicant用の構成であり、2つのネットワークブロックを含める必要があります。1つは被害者を表し、もう1つは攻撃者を表します。架空のネットワークkuleuvenをテストするための構成ファイルの例は次のとおりです:

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"
}

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test: you can copy this from the previous block
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Attacker login: fill in login credentials representing the attacker
	identity="[email protected]"
	password="SomePassword"
}

「network to test」の部分では、テストするネットワークの名前とそのセキュリティ構成を提供する必要があります。さまざまなタイプのWi-Fiネットワークの構成ファイルの書き方/編集方法とネットワークブロックの例については、wpa_supplicant.confを参照してください。最初のネットワークブロックの「victim login」の下では、シミュレートされた被害者を表す有効なログイン認証情報を指定する必要があります。2番目のネットワークブロックでは、「network to test」の下にまったく同じ情報を提供できますが、シミュレートされた攻撃者を表すログイン認証情報を提供する必要があります。

上記の例では、MacStealerは攻撃者が[email protected]である攻撃をテストし、この攻撃者は被害者[email protected]に向けて送信されたトラフィックを傍受しようとします。

デフォルトでは、スクリプトは構成ファイルclient.confを使用します。--config network.confパラメータを指定することで別の構成ファイルを使用できます。ここでnetwork.confを使用する構成ファイルに置き換えることができます。

このリポジトリには、次のサンプル構成ファイルも含まれています:

  • multipsk.conf: マルチPSKを使用するネットワークをテストするための構成ファイル。信頼されたデバイスが1つのパスワードを使用し、ゲストに2番目のパスワードが与えられます。

  • saepk.conf: SAE-PKを使用する公衆ホットスポットをテストするための構成ファイル。

特定のAP/BSSをテストするためにネットワークブロックを編集することも可能であることに注意してください。

5.3. サーバー構成

デフォルトでは、MacStealerはすべてのテストでTCP SYNパケットを8.8.8.8のポート443に送信します。これはGoogleのDNSサーバーです。別のサーバーまたはポートを使用する場合は、--serverパラメータで指定できます。たとえば:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222

TCP SYNパケットで使用するポートを追加することもできます:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222:80

wlan0をWi-Fiインターフェースの名前に置き換え、IPアドレスを使用するサーバーに置き換えます。 このサーバーはTCP SYN/ACK応答を再送信する必要があり、理想的にはMacStealerが最初のTCP SYNを送信してから10秒以上経過しても再送信されたSYN/ACKを送信し続ける必要があります。 この再送信動作は、次のように--pingパラメータを使用してテストできます:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222 --ping

サーバーが必要な再送信動作を備えている場合、MacStealerは次のように出力します:

root@kitploit:~
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.

指定されたサーバーがTCP SYN/ACK応答を送信しない場合、または十分に遅く再送信しない場合、MacStealerは次のように出力します:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.

The reason why the server must still retransmit a SYN/ACK after more than 10 seconds, is because it can sometimes take several seconds to reconnect as the simulated attacker. This reconnection process must complete before the server sends the last retransmitted TCP SYN/ACK packet.

6. 脆弱性のテスト

次の表には、ネットワークをテストする際に実行する一般的なコマンドと、各コマンドの簡単な説明が含まれています。表の下で、各コマンドの詳細が説明されています。

テスト対象のネットワークがManagement Frame Protection(802.11w)を使用している場合、このツールは、攻撃者が依然として被害者をネットワークから強制的に切断できることを前提としています。この前提は、MFPを使用している場合でも、切断攻撃は通常は依然として可能である(ただし、より簡単でも一般的でもない)ことを示した最近の研究に基づいています。

6.1. 健全性チェック

脆弱性をテストする前に、MacStealerが被害者と攻撃者の両方としてネットワークに接続できることを確認するために、以下のコマンドを使用できます。

  • ./macstealer.py wlan0 --ping:被害者の認証情報を使用してネットワークに接続します。接続すると、サーバー(デフォルトでは8.8.8.8であり、変更可能)にTCP SYNが送信されます。MacStealerは、SYN/ACKが(再)送信されるかどうかと、その回数をチェックします。これを使用して、被害者の認証情報が正しいことを確認し、設定したサーバーがSYN/ACK応答を適切に再送信していることを確認できます。

  • ./macstealer.py wlan0 --ping --flip:上記のテストと同じですが、今回はスクリプトが攻撃者の認証情報を使用して接続します。攻撃者の認証情報が正しいことを確認するために使用できます。

6.2. 脆弱性テスト(CVE-2022-47522)

  • ./macstealer.py wlan0:MACアドレススティーラー攻撃のデフォルトの亜種をテストします。攻撃者は被害者と同じAP/BSSに再接続します。

  • ./macstealer.py wlan0 --other-bss:攻撃者は同じネットワークの別のAP/BSSに接続します。このテストに対して(も)脆弱なネットワークは、実際には悪用が容易です。無線範囲内に単一のAP/BSSしかない場合、攻撃者として接続するときにスクリプトはタイムアウトします。

6.3. クライアント分離テスト(イーサネット層)

MACアドレス盗用の脆弱性を悪用することが意味を持つのは、クライアント分離が有効になっている場合、またはARP検査などの技術を使用してクライアント同士の攻撃を防いでいる場合だけです。そうでなければ、攻撃者はARPポイズニングなどのより簡単な攻撃を使用してトラフィックを傍受できます。クライアント分離が有効かどうか、またはネットワークがARP検査を使用しているかどうかをテストするには、次のコマンドを使用できます。

  • ./macstealer.py wlan0 --c2c wlan1:これらの引数を使用すると、MacStealerはネットワークが攻撃者(wlan1)から被害者(wlan0)へのクライアント間ARPポイズニングトラフィックを許可するかどうかをテストします。ここでwlan1は2つ目の無線ネットワークインターフェースです。スクリプトは、悪意のあるARPパケットを攻撃者から被害者に送信できるかどうかをテストします。

  • ./macstealer.py wlan0 --c2c-eth wlan1:これは上記のテストと似ていますが、悪意のあるARPパケットを送信する代わりに、攻撃者はDNSパケットを被害者に送信します。

上記の2つのテストのいずれかでクライアント間トラフィックがブロックされている場合(つまり、クライアント分離が有効になっているか、ARP検査などの他の技術がユーザー同士の攻撃を防ぐために使用されている場合)、MACアドレス盗用の脆弱性は実際にはリスクと見なされるべきです。

デフォルトでは、MacStealerは両方のインターフェースを使用して同じAP/BSSに接続しようとするため、両方のネットワークカードが同じネットワークを認識できることが重要です(つまり、両方のネットワークインターフェースが同じ周波数帯域とチャンネルをサポートしていることを確認してください)。両方のクライアントを異なるAP/BSSに接続したい場合は、--other-bssパラメータを使用できます。

--flip-idパラメータを使用すると、被害者(wlan0)から攻撃者(wlan1)へのトラフィックが許可されているかどうかをテストできます。

6.4. トラブルシューティングのチェックリスト

MacStealerが動作していないように見える場合は、以下を確認してください。

  1. ネットワークカードを他のプロセスが使用していないことを確認してください(例:ネットワークマネージャーを終了する)。別のプロセスもネットワークカードを使用している場合、kernel reports: match already configuredという出力が表示されることがあります。

  2. 以前はすべて正常に動作していた場合は、Wi-Fiドングルを取り外し、コンピューターまたは仮想マシンを再起動して、もう一度試してください。

  3. 正しいネットワークに接続していることを確認してください。client.confを再確認してください。

  4. gitを使用してコードを更新した場合は、./build.shと./pysetup.shを再度実行してください(前提条件を参照)。

  5. 仮想マシンを使用している場合は、代わりにネイティブのLinuxインストールからMacStealerを実行してみてください。

  6. 追加パラメータ-ddを指定してMacStealerを実行すると、wpa_supplicantとMacStealer自体から追加のデバッグ出力が得られます。

7. 高度な使い方

7.1. IP層のクライアント分離のテスト

デフォルトのクライアント分離テストは、イーサネット層のトラフィックがクライアント間で許可されているかどうかをチェックします。次のコマンドを使用して、IP層のトラフィックがクライアント間で許可されているかどうかをテストすることもできます。

root@kitploit:~
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]

クライアント間のIP層トラフィックが許可されている場合でも、クライアント同士が攻撃し合うことは可能です。たとえば、ICMPリダイレクト攻撃が依然として可能かもしれません。このような攻撃はARPスプーフィングよりも手間がかかりますが、理想的にはクライアント間のIP層トラフィックもブロックすることで防ぐべきです。

7.2. 一般的なネットワークプロパティのテスト

次のテストを実行すると、ネットワークの一般的なプロパティをテストできます。これらのテストは脆弱性に直接関係するわけではありませんが、ネットワークの動作をよりよく理解するために使用できます。

  • ./macstealer.py wlan0 --same-id [--other-bss] [--flip]:アクセスポイントから切断して再接続した後もTCP接続が維持されるかどうかをテストします。再接続後に接続が維持されない場合、そのネットワークはおそらくMACアドレス盗用攻撃に対して脆弱ではありません。ただし、この動作の大きな欠点は、正規のクライアントがこのネットワークに再接続するたびに新しいTCP接続を開かなければならず、このネットワークが遅く信頼性が低いように見えることです(そのため、代わりに防御策を改善すべきです)。

    --other-bssパラメータを使用すると、同じネットワークの別のAP/BSSに再接続できます。--flip引数を使用すると、被害者IDの代わりに攻撃者IDでこのテストを実行できます。

  • ./macstealer.py wlan0 --flip:通常のMACアドレス盗用攻撃をテストしますが、攻撃者と被害者の役割を入れ替えます。つまり、攻撃者は構成ファイルで提供された「被害者認証情報」を使用し、被害者は「攻撃者認証情報」を使用します。

  • ./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]:同じユーザーの2つのデバイス間でクライアント間トラフィックが許可されているかどうかをテストします。wlan1パラメータのドキュメントについては、クライアント分離テストを参照してください。--flip引数を使用すると、被害者IDの代わりに攻撃者IDでこのテストを実行できます。

7.3. その他のパラメータ

  • --delay seconds:--delayパラメータを使用すると、攻撃者として再接続するまでの遅延を秒単位で指定できます。

  • -dまたは-dd:これらのパラメータのいずれかを追加すると、スクリプトと基盤となるwpa_supplicantインスタンスのデバッグの詳細度が上がります。

7.4. 特定のアクセスポイント/BSSのテスト

デフォルトでは、MacStealerは接続してテストするネットワークのAP/BSSを自動的に選択します。複数のAP/BSSを持つネットワークの場合、被害者のネットワークブロックでbssidキーワードを使用してこのAP/BSSを指定すると、特定のAP/BSSをテストできます。たとえば、次のように使用できます。

root@kitploit:~
...

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"

	# This a specific AP/BSS
	bssid=00:11:22:33:44:55
}

...

上記の構成では、MacStealerは00:11:22:33:44:55をテストします。つまり、被害者_および攻撃者_の両方としてこのAPに接続します。

これを--other-bssパラメータと組み合わせることもできます。その場合、被害者は00:11:22:33:44:55に接続し、攻撃者は同じネットワークの別のAP/BSSに接続します。

別のオプションとして、被害者_と_攻撃者のネットワークブロックに明示的なBSS/APを指定する方法があります。

MacStealerは指定されたAP/BSSを最大30秒間検索することに注意してください。指定されたAP/BSSが見つからない場合、ツールは終了します。

7.5. SAE-PKネットワークのテスト

次の構成ファイルを使用して、SAE-PKネットワークをテストできます。SAE-PKネットワークでは、被害者と攻撃者の認証方法に違いがないことに注意してください。つまり、両方が同じパスワードを使用します。

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test - attacker login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test - victim login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

8. 脅威モデルの考察

8.1. WPA-PSK認証

実際には、クライアント分離は事前共有パスワードを使用して保護されているネットワークでも使用されています。たとえば、多くのルーターにはゲスト用または安全性の低い(IoT)デバイス用のネットワークを作成するオプションがあり、このネットワーク内のクライアントは分離されているため、互いに攻撃できません。ただし、このシナリオでクライアント分離を使用することのセキュリティ上の利点には疑問があります。クライアント分離は、悪意のある内部者が他のユーザーを攻撃するのを防ぐことを目的としています。しかし、悪意のある内部者が事前共有パスワードを知っていれば、不正なクローン(evil twin)を作成し、被害者をこの悪意のあるネットワークのコピーに接続するよう誘導し、他のクライアントを攻撃できます!言い換えると、クライアントを使用する パスワードで保護されたネットワークでの分離は強力なセキュリティを提供しません、悪意のあるクライアントは不正なAPを作成して他のクライアントを攻撃できます。

とはいえ、不正なAPの作成はネットワーク管理者が検出できると主張することもできます。つまり、クライアント分離は攻撃を困難にすることは確かです。さらに、軽量なデバイスが(リモートで)侵害された場合、不正なAPとして(簡単に)動作するためのリソースがない可能性があります。これにより、クライアント分離が使用されている場合、攻撃の実行はより困難になりますが、不可能ではありません。全体として、クライアント分離はパスワードで保護されたネットワークにおいて強力なセキュリティ保証を提供しませんが、攻撃を実行する実際の困難さを増すと主張できます。

私たちのMacStealing攻撃は、不正なAPを作成するよりも実行が簡単です。悪意のある内部者(例:侵害された軽量なIoTデバイス)が行う必要があるのは、MACアドレスを偽装してネットワークに(再)接続することだけです。このような攻撃は検出も困難です。この観察に基づくと、私たちの新しい攻撃は状況を悪化させるため、事前共有パスワードで保護されたネットワークでも私たちの攻撃が関連性があると見なされるべきだと主張できます。

結論:パスワードで保護されたネットワークでクライアント分離を使用する場合、あなたは前提を置いていることになります 悪意のある内部者が不正なAPを作成しないという前提です。そうでなければ、クライアント分離の使用は セキュリティの観点から無意味です。MacStealing攻撃は不正なAPを作成せずに実行でき、 そのため攻撃がより容易になります。

8.2. よくある誤解

  • 私たちの攻撃の目的は、アクセスポイントのMACアドレス拒否/許可リストを回避することではありません。MACアドレスフィルタリングを回避するためにMACアドレスを偽装することは、別の既知の攻撃です。

  • 私たちの攻撃の目的は、Wi-Fiホットスポットで誰かの有料接続を乗っ取ることではありません。たとえば、一部のオープン(または保護された)ホットスポットでは、インターネットへのアクセスを許可する前にユーザーに支払いを要求します。多くの場合、有料加入者はMACアドレスに基づいて認識され、攻撃者は被害者のMACアドレスを偽装してインターネットにアクセスできます。これは私たちの攻撃の目的ではありません。MacStealerの目標はクライアント分離を回避することです。

  • 私たちの攻撃は、Hole 196の脆弱性を防御しているネットワークにも影響します。たとえば、Passpoint(旧Hotspot 2.0)ネットワークはHole 196の脆弱性を防ぐことが義務付けられていますが、私たちの攻撃に対しては依然として脆弱です。

  • 私たちの攻撃は、ARPスプーフィングを防御しているネットワークでも機能します。セキュリティが不十分なWi-Fiネットワークでは、攻撃者はARPスプーフィングを簡単に実行して被害者のトラフィックを傍受でき、私たちの攻撃は実際にはあまり実用的ではありません。しかし、悪意のある内部者が存在する可能性のある最新のネットワークは、クライアント分離やその他の方法に依存して中間者攻撃を防いでいます。私たちの攻撃はこれらすべての最新の防御を回避し、攻撃者が被害者宛てのトラフィックを傍受できるようにします。

要約すると、私たちの攻撃は、クライアント同士の攻撃が防止されているWi-Fiネットワークに影響し、攻撃者が別のクライアントへのトラフィックを傍受できるようにします。

8.3. 割り当てられたCVE

ほとんどのベンダーは、このgitリポジトリで説明されているWi-Fiクライアント分離バイパスの脆弱性を指すためにCVE-2022-47522を使用しています。この脆弱性は、私たちの論文のセクション5の攻撃に対応しています。

残念ながら、他のベンダーもこのCVEを使用して、私たちの論文のセクション3で説明されている(厳密に言えば無関係な)脆弱性を指しています。実際、MITREで見つかるCVEの実際の説明は、私たちの意見では、論文のセクション3の攻撃のみを説明しています。実際には、CVE-2022-47522は技術的には異なるにもかかわらず、私たちの論文のすべての攻撃を指すために使用されているようです。

9. 変更履歴

バージョン1.2(進行中)

  • READMEを改善:CVE識別子の使用方法を明確化。

  • READMEを改善:イントロをクライアント分離のバイパスに焦点を当て、802.1Xの注記とデフォルトゲートウェイのMACアドレスの盗用を防ぐための防御策を更新。

  • 攻撃者として再接続する前の遅延を秒単位で指定する--delayパラメータを追加。

バージョン1.1(2023年1月18日)

  • デフォルトのサーバーを216.58.208.100の代わりに8.8.8.8を使用するように変更(どちらもGoogleのサーバーです)。

  • クライアント分離テストを更新:デフォルトでイーサネット層でのARPポイズニングを使用したテストに。イーサネット層での転送を伴うUDPデータ送信オプションと、IP層での転送を伴うテストも提供。

  • READMEを改善:影響を受ける可能性のあるネットワークの種類を更新。パスワードで保護されたWPA2またはWPA3ネットワークが影響を受けるかどうかの議論を含めた。クライアント間のイーサネット層またはIP層トラフィックをテストするためのさまざまなコマンドの説明。

  • READMEを改善:MFPの考察、緩和策としてのVLANの考察、IDチェックをどのAPに対して行う必要があるかを明確化、サーバーのポートを指定、

  • MacStealerの出力を改善。

バージョン1.0(2023年1月3日):

  • エンバーゴ期間中の使用に向けて初期リリースを準備。コードはhostapのコミット0f3f9cdcab6aに基づいています。
ツールをダウンロード
CommandShort description
健全性チェック
./macstealer.py wlan0 --ping被害者として接続し、サーバーの再送信動作をテストします。
./macstealer.py wlan0 --ping --flip攻撃者として接続し、サーバーの再送信動作をテストします。
脆弱性テスト
./macstealer.py wlan0MACアドレス盗用攻撃のデフォルトの亜種をテストします。
./macstealer.py wlan0 --other-bss攻撃者を被害者とは異なるAPに接続させます。
クライアント分離:イーサネット層
./macstealer.py wlan0 --c2c wlan1クライアント間のイーサネット層トラフィック(ARPポイズニング)をテストします。
./macstealer.py wlan0 --c2c-eth wlan1クライアント間のイーサネット層トラフィック(DNS)をテストします。