WPA3のダウングレード攻撃の概要と各端末の成立要件

一部のWPA3クライアントの設定にはダウングレード攻撃の脆弱性が存在します。
この攻撃は通常時にWPA3で接続している正規のクライアントを攻撃者の設置したWPA2などより低いセキュリティで構成された不正アクセスポイントに誘導する攻撃です。攻撃者は正規のクライアント間との認証プロセスでやり取りされる情報から、パスワードを特定できる可能性があります。

この攻撃手法についての技術的な概要と、OSやシナリオ等の成立要件を調べたのでその結果をここに記します。

### 免責事項
この記事は防御者向けに、WPA3-Personalに存在するダウングレード攻撃の概要と対策方法を解説する意図で書いています。不正アクセス行為を助長するために書いたわけではありません。

なお、念の為パスワードのクラッキングの方法に関する記述は行っていません。

::: note alert
この記事で扱った攻撃手法は、認証を要求するネットワークのパスワードをクラックするものなので、不正アクセス禁止法に抵触するものと思われます。
**私的に**自分で構築した無線LAN以外にこの手の攻撃を行わないで下さい。
:::

::: note warn
問題があれば速やかに修正/非公開しますので、まずはご連絡下さい。
:::

## WPA3のダウングレード攻撃の詳細
まずはWPA3のダウングレード攻撃について簡単に解説します。

### WPA2-Personal に対する辞書攻撃と WPA3-Personal

広い意味では「WPA3ダウングレード攻撃」は、その字面から言ってWPA3からより低いセキュリティを実施する規格にダウングレードするものだと思われます。攻撃者が実際に悪用可能なダウングレード対象は限られます。

ここでは一般に適用可能・悪用可能なシナリオとして、**WPA3-PersonalからWPA2-Personal**へのダウングレードについて説明します。

適用可能・悪用可能のそれぞれの表現の意図するところとしては以下のようなものです。
「適用可能」については、Enterprise→Personalのような認証の方法が根本的に異なる規格同士のダウングレードが成立しない点や、WPA3→初代WPAよりもWPA3→WPA2の方が成立しやすいこと。
「悪用可能」については、**WPA2-Personalの持つオフライン辞書攻撃**の脆弱性を悪用してパスワードの特定を行えること。

::: note
この節は分かりづらい上に内容の正確性に自身の持ていないものになってしまいました。太字部分を流し読みする程度で、詳細については別の資料を参考にしてください。おすすめする資料としては、[WPA3, OWE and DPP | Hemant Chaskar | WLPC Phoenix 2019](https://youtu.be/fCsR8aK4mqE)や、[WPA3のはなし｜Wireless・のおと｜サイレックス・テクノロジー株式会社](https://www.silex.jp/library/blog/20230111-1)などです。
:::

#### WPA2-Personalの概要

WPA2-Personalや家庭や公共無線LAN、小規模オフィスなどで使用されるWi-Fiセキュリティの方式で、恐らく今日最も使われている方式です。

この方式では主に**認証と暗号化**の機能を提供し、**１つのESSを１つのパスワードで保護する**方式であるということです。

ここで**ESS**(Extended Service Set)はIEEE 802.11という今日利用されている無線LANの規格であるIEEE 802.11の文書上用いられる用語で、**同じSSID(ESSID)を共有するアクセスポイント(BSS)の集合**というような理解ができます。
BSS(Basic Service Set)は各アクセスポイントに相当し、BSSを識別するIDであるBSSIDはMACアドレスです。

::: note
例えば家のWi-Fiルータの無線LANを中継機を使って拡張している場合で、両方に同じSSIDを設定している場合を考えます。このとき、Wi-Fiルータと中継機の２つがそれぞれBSSで、この２つのBSSの集合がESSと言えます。
:::

WPA2-Personalでは認証（及び鍵の生成）にPSK、暗号化にCCMPと呼ばれる方式を用います。WPA2-Personalの主要な弱点としては、以下のようなものがあります。
1. **認証プロセスを傍受した場合、パスワードのオフライン辞書攻撃が実施可能である**
1. パスワードを知っている かつ 認証プロセスを傍受した 場合、通信内容を解読できる
1. 認証解除攻撃に脆弱で、サービス拒否や攻撃の起点の目的で悪用できる

これらの弱点のうち１と２は、PSK認証方式が原因です。

#### PSK認証方式

PSK(PreShared Key)認証方式は事前に決められた256bitの事前共有鍵を用いて認証と鍵の生成を行う方式です。この事前共有鍵は暗号化時に利用する鍵の生成にも用いられます。

しかしながら、ユーザが256bitの鍵を覚えるのは現実的ではありません。よって、IEEE 802.11の付録では以下のような方式で鍵を生成する方法が提案されており、WPA-Personalもこれに従っています。
> PSK = PBKDF2(passPhrase, ssid, 4096, 256/8) 
> [IEEE 802.11-2020] Annex J.4 Suggested pass-phrase-to-PSK mapping 

ここで、PBKDF2とはRFC2898で定義された鍵導出関数です。PBKDF2の引数は左から順にパスワード、ソルト、イテレーション、鍵長（オクテット）です。PBKDF2をハッシュ関数のようなものとして捉えるならば、PSKはSSIDをソルトとしたパスワードハッシュのようなものであると理解できます。

事前共有鍵をそのまま暗号化に使うのは脆弱なので、この事前共有鍵を用いてセッションだけで有効な鍵であるPTK(Pairwise Transient Key)を生成します。この生成に際して **4-way handshake** と呼ばれるやり取りが行われます。PSK認証方式の場合はこれを認証としても利用します。
以下は 4-way handshakeと呼ばれるやり取りを表した図です。

![4 way handshakeのフローを表した図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/84a5517c-173c-c4a5-7fcc-55ae012cea93.png)
4-way handshakeの手順  （画像引用元：[IEEE 802.11i-2004 - Wikipedia](https://en.wikipedia.org/wiki/IEEE_802.11i-2004)）

図中に出てきた用語の簡単な説明を以下に記します。
- STA (Station) アクセスポイントに接続するクライアントのこと
- AP (Access Point) アクセスポイント
- **ANonce** APが生成するランダムなデータ (Nonce)
- **SNonce** STAが生成するランダムなデータ (Nonce)
- **PTK** (Pairwise Transient Key) 暗号化や後述のMICの生成に用いられる
- **MIC** (Message Integrity Code) メッセージ認証符号。**PTKから生成される**

鍵の導出には以下のような式が用いられているようです。
> PTK = PRF-Length(PMK, “Pairwise key expansion”, Min(AA,SPA) || Max(AA,SPA) ||
Min(ANonce,SNonce) || Max(ANonce,SNonce))
> [IEEE 802.11-2020] 12.7.1.3 Pairwise key hierarchy

少々複雑で、私の理解も若干あやしいところはあるのですが、引数を見ていくと、PTKの値は以下の値に依存していることが分かります。
- PMK (Pairwise Master Key/**PSK認証方式においては PMK=PSK**)
- ANonce (4-way handshakeを参照)
- SNonce (4-way handshakeを参照)
- AA (Authenticator Address/アクセスポイントのMACアドレス)
- SPA (Supplicant Address/接続を試みているクライアントのMACアドレス)

これからわかることは、PTKの材料として、PSKとNonceとMACアドレスの3つが用いられているということです。PSKの生成手順を含めてまとめると、暗号化に用いる鍵であるPTKは以下の材料から導き出されることが分かります。
- SSID
- **パスワード**
- **ANonce**
- **SNonce**
- APのMACアドレス
- STAのMACアドレス

言い換えると、上の全ての項目がわかればPTKは特定できるということです。

なお、誤ったパスワード(PSK)に基づいてこのプロセスを行った場合、APとSTAの間で生成するPTKが異なることになります。これによりPTKに基づいたメッセージ認証符号であるMICが矛盾するので、このプロセスは途中終了します。これがWPA2-Personalにおいては認証の役割を果たします。

#### WPA2-Personalにおける辞書攻撃の原理

4-way handshakeにおいて、MICは検証の役割を果たします。メッセージのすり替えや改ざんがないか、或いはPMK(WPA2-Personalの場合PSK/パスワード)が矛盾していないかなどのについての確認を行うのです。

ですがこの方法で検証を行うことは、誰でも可能です。攻撃者がMICと、その検査対象となるメッセージの内容を知ることができれば、自分の持っているPTKが正しいのかどうかを検証することができます。
攻撃者が尤もらしいパスワードのリストを用意し、これからPTKを生成することが出来れば、それについてMICを使って繰り返し検証を行い、正しいPTKを探り当てることができます。

#### WPA2-Personalにおける辞書攻撃の成立要件

攻撃者がパスワードのリストの検証に使う情報として知り得るものにはどんなものがあるでしょうか？
これらの情報源として役立ちそうな、4-way handshakeのフローを再度見てみましょう。

![4 way handshakeのフローを表した図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/84a5517c-173c-c4a5-7fcc-55ae012cea93.png)
4-way handshakeの手順（再掲）（画像引用元：[IEEE 802.11i-2004 - Wikipedia](https://en.wikipedia.org/wiki/IEEE_802.11i-2004)）

**Nonce**(ANonce/SNonce)は4-way handshakeで交換されているのが分かります。先程示した図を見ると分かるとおり、**4-way handshakeの1番目と2番目のメッセージ**で送信されます。故にこのメッセージを傍受すれば得ることができます。

**MACアドレス**(AA/SPA)は、**あらゆる通信**から取得できます。IEEE 802.11はレイヤ２のプロトコルなので、宛先や送信元としてMACアドレスを指定します。Nonceの傍受で手に入れた4-way handshakeのメッセージ１, メッセージ２から得ることができるでしょう。

**MIC**については4-way handshakeのメッセージ2以降に付与されていることがわかります。Nonceの傍受で手に入れた**メッセージ２**を使うことができます。

**SSID**は**ビーコンフレーム**というフレームから取得できます。スマートフォンのWi-Fi設定画面を開くと周辺のアクセスポイントのSSIDの一覧が表示されることが分かると思います。通常アクセスポイントはビーコンフレームというフレームを常時送信し続けることで自身の情報を周囲に宣伝しています。

これでパスワード以外のPTKの材料と、PTKの検証に使えるMICが揃いました。あとは尤もらしいパスワードのリストを用意し、それに対応するPTKを生成し、それについての検証を繰り返し行うことができます。

まとめると、**オフライン辞書攻撃**の実施のために、攻撃者は以下のフレームを得る必要があります。
- **4-way hadnshake メッセージ #1**
- **4-way hadnshake メッセージ #2**
- **ビーコンフレーム**

#### ハンドシェイクをキャプチャするための手法
ビーコンフレームは常に送信されているためキャプチャするのは簡単です。ここではビーコンフレームのキャプチャに関する情報を省いて、4-way handshakeのメッセージ#1, #2の取得についてのみ触れます。

4-way handshakeのやりとりを傍受する方法は２つあります。

1. アクセスポイントの近くでハンドシェイクを傍受する
2. 不正アクセスポイントを立てる

１つ目のアクセスポイント周辺でハンドシェイクを傍受する方法を示した簡単な図を以下に示します。

![4-way handshakeのキャプチャ方法１](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/ffdee55d-c98a-ec3c-70bf-1154d4baddac.png)

この方法については、直感的にも理解しやすいものです。無線LANでは電波を用いてやり取りされるので、正規の端末の近くにいればその通信内容を傍受することができます。

図ではメッセージ１，２のみ書いてありますが、実際にはこの後の通信も行われます。

正規のアクセスポイントに物理的に近づくことのできる場合は、この方法が一番簡単であり、最も用いられる手法です。


２つ目の不正アクセスポイントを立てる方法を表した簡単な図を示します。

![capture-method-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/4559a78e-77a7-6eac-592f-9cb41d966379.png)

不正アクセスポイントを使う方法では攻撃者が不正アクセスポイントを設置し、そのアクセスポイントに接続した正規のクライアントとのやり取りを記録します。これによりメッセージ#1, #2を取得できます。

メッセージ２以降の通信については攻撃者がパスワードを知らない都合上MICに矛盾が発生するため、ハンドシェイクは途中で中止されます。


後で詳しく触れますが、WPA3ダウングレード攻撃で使用される方法は**２つ目の方法**になります。

#### WPA2-Personalの辞書攻撃に対する対策方法
WPA2-Personalの主要な対策方法は２つあります。
1. クラッキングが成立しないほど**強力なパスワード**を設定する
2. より強力な **WPA3-Personal (SAE)** を使う

１つ目の方法は、パスワードの強度を十分に設定することです。
オフラインの辞書攻撃が成立する以上、それなりの強度を持っていないといけません。PSKの方式をWebのシステムに例えるならばハッシュ化されたパスワードのデータベースが常に漏洩しているようなものなのです。

２つ目の方法は WPA3-Personal を使うことです。WPA3-Personalで新しく採用された認証方式 **SAE**(Simultaneous Authentication of Equals) では認証と暗号化の処理が分離され、暗号鍵の生成はより安全なECDH鍵共有の仕組みを用いて行われます。
PTKとパスワードとの関連性がなくなれば、MICでパスワードを検証することは不可能になるということです。

他にもトラフィックの暗号化やセグメントの分離などの策で、パスワードが漏れた上での影響を小さくするような対策もあります。そのような対策方法も有効ですが、ここではパスワードが破られないようにすることのみ考えます。

#### 節のまとめ

以上がWPA2-Personalに対するオフライン辞書攻撃の概要です。重要な点としては、

- WPA2/3-Personalは**１つのESSを１つのパスワードで保護する**
- **WPA2-Personalはオフライン辞書攻撃に対して脆弱**であり、パスワードの強度が十分でない場合はクラッキング可能である
- **WPA3-Personalはオフライン辞書攻撃に対する耐性がある**
- **認証のやり取りを近くで観測する方法**でクラッキングに必要な情報を得ることができる
- **不正アクセスポイントを立てる方法でも**クラッキングに必要な情報を得ることができる

### WPA3のダウングレード攻撃とTransition mode
WPA3のダウングレード攻撃と、Transition modeについて記します。

#### WPA3の規格の概要
WPA3には、大きく分けて以下の４つの方式があります。
- **WPA3-Personal Transition mode**
- **WPA3-Personal Only mode**
- WPA3-Enterprise Transiton mode
- WPA3-Enterprise Only mode

今回はPersonalのみについて考えます。

WPA3には移行性の観点からTransiton modeという動作モードが提供されています。これはPSKとSAEの両方の認証方式にを受け入れる方式で、クライアントの一部がWPA3に対応していない場合や、同じESSを構成するBSSの一部がWPA3に対応していない場合などのために利用されます。現在でもWPA3に対応していないクライアントやアクセスポイントは多く、この方式は広く用いられています。

しかしながらこの動作モードには２つの問題があります。
1. WPA2-Personalを使う端末が**１つでもあれば**、オフライン辞書攻撃が実施可能
2. **ダウングレード攻撃**が成立しやすくなる

それぞれ見ていきましょう。
#### WPA2-Personalを使う端末が１つでもあれば、オフライン辞書攻撃が実施可能

Personalの方式は**１つのESSを１つのパスワードで保護する**で認証する方式なので、脆弱な方法であるPSKで接続しているクライアントが１つでもあれば、その情報を元に辞書攻撃が実施できます。同一ネットワークを利用する全てのクライアントがリスクにさらされます。

この点から見るとTransition modeのセキュリティ効果は低いです。WPA2で接続するクライアントが１つも無ければ安全ですが、そのような場合はOnly modeを使えば済む話です。

#### ダウングレード攻撃が成立しやすくなる

~~一部の端末は最初にWPA3 Transition modeで接続した無線LANと同一のSSIDを持つWPA2の無線LANに暗黙的に接続します。~~
WPA3-Personal Transition modeに設定されたクライアントは**規格上**、WPA2-Personalと同等のセキュリティが実施された(**PSK**の)無線LANに**暗黙的に接続**します。この挙動は後述のダウングレード攻撃に脆弱です。

具体的な端末がどのような挙動をとるかについての検証結果については次の章で詳しく触れます。

#### ダウングレード攻撃の概要

クライアントの設定や実装によっては、普段WPA3を使って接続している端末が攻撃者の立てた**同名のWPA2**の無線LANに**自動で**接続を試みてしまうことがあります。

通常、一般的な無線LANのクライアントは一度接続したESSに**自動で**接続します。各ネットワークの識別には **SSID** を使っており同じ名前のSSIDを持つESSは同じESSであると認識するわけです。

しかしながらSSIDは簡単に変更することができます。攻撃者が同じSSIDを持ったアクセスポイントを立てれば、端末は誤って接続してしまうのです。

**Evil twin attack** と呼ばれるような攻撃手法ではこの特性を利用して不正アクセスポイントに接続したクライアントに対して**中間者攻撃**を実施します。
しかしながらこの攻撃手法ではなりすまし対象のアクセスポイントの**パスワード**を知っている必要があります。

::: note info
Evil twin attackについて詳しく知りたい場合は、[Evil twin (wireless networks) - Wikipedia](https://en.wikipedia.org/wiki/Evil_twin_(wireless_networks)) や [CAPEC-615: Evil Twin Wi-Fi Attack (Version 3.9)](https://capec.mitre.org/data/definitions/615.html)を参照ください。
:::

WPA3ダウングレード攻撃では不正アクセスポイントとして、WPA2のアクセスポイントを立てます。正規の端末が誤ってこれに自動接続を試みてしまうと攻撃が成立します。

攻撃者がパスワードを知らないので接続は途中で失敗するわけですが、4-way handshakeのメッセージ#1, #2はやり取りされます。

この方法で、先程説明したハンドシェイクのキャプチャの**２つ目の方法**と全く同等の情報が得られることが分かります。

![capture-method-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/4559a78e-77a7-6eac-592f-9cb41d966379.png)
キャプチャ方法２（再掲）

よって、この情報を使って攻撃者はオフライン辞書攻撃を実施することができます。

この攻撃手法からの保護を提供するため、一般的な無線LANクライアントはESSの識別にSSIDに加え**実施されているセキュリティ**を参照します。
しかしながらその挙動は実装ごとにかなり異なります。これについては後の検証の章で触れます。

#### ダウングレード攻撃の対策
対策方法としては以下のようなものが挙げられます。

- 全端末がWPA3-Personalに対応する場合
    - Transition modeを無効にし、パスワードを変更する
- 混在環境の場合
    - **WPA2とWPA3のESSに分離**して、それぞれ**別のSSIDとパスワード**を設定する
        （セグメントを分離して別のポリシーで管理する）
    - WPA2に求められるものと同等の強度のパスワードを設定する

全ての端末がWPA3-Personalに対応している場合、Transition modeを使う必要はありません。後の章で触れますが、WPA3 Only modeで初めて接続した場合、一般的なクライアントはダウングレード攻撃を受け入れません。
ただしユーザがWi-Fiプロファイルを更新することを促すため、移行に際して**パスワードを変更**する必要があります。SSIDも変更するとより確実です。

混在環境では、**WPA2とWPA3のESSに分離**して管理するのが望ましいです。WPA2のネットワークに関してはより低い権限をもたせるなどです。ただし、パスワードを使い回しては意味がないのでそこは注意が必要です。
また、WPA2と同等の管理を行うことで保護を提供することもできます。WPA2-Personalもパスワードさえ守れればある程度安全な方式です。

これらのほか、別の対策技術としてWPA3のみを用いることを明示的に指定する技術である**Transition Disable**が存在しますが、対応していない端末も多いので、余り有効な対策とは言えないかもしれません。

とはいえ有効にすることによって何か相性の問題が発生して接続ができなくなるということはないと思われます。アクセスポイントがTransition Disableに対応している場合で、WPA3への移行が既に完了している場合はこれを有効にするといいでしょう。

#### WPA3 の規格上での取り扱い
※2024/06/18 追記部分

WPA3の仕様書である[WPA3 Specification](https://www.wi-fi.org/ja/discover-wi-fi/specifications)では、WPA3-PersonalにおけるTransition modeとOnly modeの運用方法について以下のように定義されています。

> **2.2 WPA3-Personal Only Mode**
When operating in WPA3-Personal Only Mode:
～ 省略 ～
2\. A STA **shall allow at least one** of the following AKMs **in the STA Network Profile**:
  a. AKM suite selector **00-0F-AC:8**
b. AKM Suite Selector **00-0F-AC:24**
When AKM suite selector 00-0F-AC:24 is allowed to be selected, the STA should also allow AKM suite selector
00-0F-AC:8 to be selected for interoperability.
Wi-Fi 7 STA's Network Profile shall allow AKM suite selector 00-0F-AC:24.
～ 省略 ～
4\. A STA's **Network Profile shall not allow** AKM suite selectors **00-0F-AC:2**, **00-0F-AC:4**, **00-0F-AC:6**, **00-0F-AC:19**
or 00-0F-AC:20 to be selected for an association.
～ 省略 ～
**2.3 WPA3-Personal Transition Mode**
2\. A STA's **Network Profile shall allow** at least AKM suite selectors **00-0F-AC:2 and 00-0F-AC:8**.
～ 省略 ～

ここでAKM SuiteとはPSKやSAEなどの認証・鍵管理の手順のセットのことです。AKM Suite selectorはAKM suiteを選択するための識別子で、IEEE 802.11-2020においては表9-151で定義されています。

以下にAuthentication Typeのみに着目して一部引用します。
| selector | authentication type |
| - | - | 
| 2 | PSK |
| 4 | FT authentication using PSK |
| 6 | PSK | 
| 8 | SAE |
| 19 | FT authentication using PSK |

24はIEEE 802.11-2020の段階では定義されていませんが、"SAE using group-dependent hash"だそうです。2020以降のいずれかの規格で定義されたのでしょう。

※引用元の表では、上に記した"authentication type" に加えて"key management" や "key derivation"といった列もあり、セレクタ2, 6や4, 19がそれぞれ全く同じものということはないです。

上記の内容を踏まえてSTAのプロファイルに求められる要件をまとめますと、以下のようになります。
- Only mode
    **SAEを許可**する必要がある
    **PSKを許可してはならない**
- Transition mode
    **PSKとSAEの両方を許可**する必要がある

重要なのは、WPA3の仕様に準拠したTransition modeのクライアントであれば、必ずPSKの認証方式を許可するということです。これにより、この動作モードのクライアントは全てWPA2-Personalへのダウングレード攻撃を受け入れることになります。

#### 節のまとめ
以上がWPA3のダウングレード攻撃/Transition modeに関する概要です。
- Transiton modeでは、**WPA2で接続する端末が１つでもあれば**辞書攻撃が実施できる
- Transition modeは**ダウングレード攻撃のリスクを上げる**
- WPA3ダウングレード攻撃では、**WPA2のネットワークに自動接続してしまうクライアント**を悪用する
- WPA2-PersonalとWPA3-Personalの混在環境では**別のSSIDとパスワードを持つ無線LANに分割して立てる**ことが推奨される
- **Transition Disable**という技術がある

## WPA3のダウングレード攻撃の成立要件に関する検証結果

WPA3のダウングレード攻撃がどのような条件下で成立するかについて、端末ごとによって異なるのではないかと考え、主要なOSがそれぞれどのような方法でこれらを処理するか調べてみました。

### 検証対象
検証対象のシナリオと端末をそれぞれ記します。

#### 検証したシナリオ
検証したシナリオは以下のとおりです。
初回接続時の規格の制限を保持する場合は管理者がより強い規格を使用するよう設定しても利用者の端末が弱いセキュリティを許可する設定のままになってしまうのではないかと考え、アップグレード後のおダウングレードのシナリオを検証しています。アップグレードは管理者によって、ダウングレードは攻撃者によって行われるものと考えて下さい。

- ダウングレードのシナリオ
    - O → 2
    - O → T
    - O → T → 2
    - T → 2
- アップグレード後のダウングレードのシナリオ
    - 2 → T → 2
    - 2 → O → 2
    - 2 → O → T
    - 2 → O → T → 2
    - 2 → T → O → 2
    - 2 → T → O → T
    - 2 → T → O → T → 2
    - T → O → 2
    - T → O → T
    - T → O → T → 2

ここで、2 = WPA2-Personal, T = WPA3-Personal Transition mode, O = WPA3-Personal Only modeを表します。

また、同じシナリオでTransition Disableを有効にした場合の挙動も確認しました。

#### 検証の対象とした端末
検証した端末は、以下のとおりです。OS(ハードウェア)の形式で示します。
- iOS 16 (iPhone 8)
- Android 14 (Google Pixel 8)
- Windows 11 Home Edition 22H2 (Buffalo WI-U2-150M)

なお、検証日は2024年2月19日です。

### 検証方法
大まかに以下の手順で実行します。
1. WPA2-Personal, WPA3-Personal Transition/Only mode の全てに対応するアクセスポイントを準備する
1. 検証対象の端末をアクセスポイントに接続する
1. 検証対象の端末の機内モードを有効化する
1. １のアクセスポイントの設定を別のセキュリティ規格を使用するように変更する
1. 検証対象の端末の機内モードを無効化する
1. 自動接続が行われたかどうかを記録する
1. ３に戻る

これを事前に決めた全てのシナリオを網羅するまで繰り返すような形になります。

#### アクセスポイントのハードウェア/ソフトウェア
アクセスポイントの構成は、以下のとおりです。

```bash,title:各種ハードウェア・バージョン情報・システムの状態など
$ lspci -s 01:00.0 -v
01:00.0 Network controller: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter (rev 30)
        Subsystem: AzureWave QCA9377 802.11ac Wireless Network Adapter
        Flags: bus master, fast devsel, latency 0, IRQ 133
        Memory at 91200000 (64-bit, non-prefetchable) [size=2M]
        Capabilities: <access denied>
        Kernel driver in use: ath10k_pci
        Kernel modules: ath10k_pci


$ uname -r
6.5.0-17-generic
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=23.10
DISTRIB_CODENAME=mantic
DISTRIB_DESCRIPTION="Ubuntu 23.10"

$ hostapd -v
hostapd v2.10
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2022, Jouni Malinen <j@w1.fi> and contributors

$ nmcli radio wifi off && nmcli radio wifi
disabled
$ rfkill unblock all && rfkill list
0: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no

```

hostapdはアクセスポイントを立てる際に使用するもので、これを使うと通常のWi-Fiアダプタをソフトウェア的に立てることができます。
NetworkManagerはhostapdと干渉するので、Wi-Fi機能をオフにしました。この操作を行うとソフトウェアブロックがかかってしまうので、rfkillでこれをアンブロックしました。

#### アクセスポイントの設定
アクセスポイントとして利用したhostapdの設定ファイルはそれぞれ、以下のように設定しました。インターフェースはコマンドライン引数を使って指定しました。

```title:WPA2-Personal
ssid=Test-AP

hw_mode=g
channel=1
ieee80211n=1

wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=password
rsn_pairwise=CCMP
ieee80211w=0
```

```title:WPA3-Personal Transition mode
ssid=Test-AP

hw_mode=g
channel=1
ieee80211n=1

wpa=2
wpa_key_mgmt=SAE WPA-PSK
wpa_passphrase=password
rsn_pairwise=CCMP
ieee80211w=1
```

```title: WPA3-Personal Only mode
ssid=Test-AP

hw_mode=g
channel=1
ieee80211n=1

wpa=2
wpa_key_mgmt=SAE
wpa_passphrase=password
rsn_pairwise=CCMP
ieee80211w=2
```

Transition Disableのシナリオでは、これらの設定ファイルの末尾に`transition_disable=0x01`の行を追加しました。

### 調査結果
結果は以下のとおりになりました。

![WPA3 Downgrade Attack 実験結果表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/0a90e754-cab5-b8b3-67f9-103f9d744387.png)

この表は以下のような方法で記述しています。
- 例えば "O2" は WPA3-Personal **O**nly mode → WPA**2**-Personal などのシナリオに対応する
- 太字で記載されたシナリオ (**O2**, **OT2**, etc...)
    WPA3-Personal Only mode から WPA2-Personal へのダウングレードを含むシナリオ
- `I` 暗黙的に接続される
- `E` 明示的な操作で接続可能
    設定画面より該当無線LANをタップする操作。パスワードの入力は不要
- `N` 明示的な操作で接続を試みると、新規プロファイルの作成を強制される
    パスワードの入力が必要
- `W` 明示的な操作で接続を試みると、警告画面が表示される
- `-` 前提条件が成り立たない  e.g. A→B→Cのとき、A→Bが暗黙的でない

#### 全体について言えること
全体について言えることは以下のようなことがあるでしょう。

- 多くのシナリオ/端末では**最初に接続したときのセキュリティによって挙動が決まる**
    Windowsの2Oと2TOのシナリオは例外
- **Only modeで最初に接続した場合、WPA2へのダウングレードは受け入れない**
- **最初に Only mode以外 で接続した場合、後からアップグレードしてもダウングレードを受け入れる実装がある**
- Transition Disableによって挙動が変わるのは**Androidのみ**である

#### Android 14 (Google Pixel 8)
Android ではユーザが各プロファイルで使用するセキュリティの設定はできませんが、自動的に選択されたセキュリティが何であるかを確認することができます。

![android-wifi-profile-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/170e015f-9b77-77a0-e5a6-faf298bfbe7a.png)

この画面を見ると、**WPA/WPA2/WPA3-Personal**と**WPA3-Personal** の２つの設定が内部的に用いられていそうだということが分かります。前者に設定されている場合はダウングレード攻撃が成立するであろうということが分かります。

また、AndroidはTransition Disableの機能に対応しています。Transition Disableが有効なネットワークに接続したあとでWPA2のアクセスポイントに接続しようとすると、以下のような警告画面が出ます。


![transition-disable-warning-mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/67bf87b2-0d7e-3e1c-668c-77ec9dd5ed6a.png)

#### iOS 16 (iPhone 8)
iOSでは暗黙的なダウングレードをほとんど受け入れませんでした。ただし、WPA3-Personal Transition modeからWPA2-Personalへのダウングレードは許されます。

また、注意すべき点としては、明示的に操作を行う（設定画面上のSSIDをタップする）と、特段の警告もなしに接続が開始されることです。

ユーザが不正アクセスポイントの近くで「Wi-Fi繋がらないな」などと言って設定画面からそのネットワークを選択すると、保存済みの情報に基づいてパスワードが自動で解決され、そのまま接続を試みてしまいます。
ここでタップしたアクセスポイントが普段より弱いセキュリティを実施しているということについて、ユーザの得られる情報はありません。

#### Windows 11
Windows 11では 2→T→O→2などTransition modeまたはWPA2で最初に接続するシナリオの場合、ダウングレードを受け入れます。

ただし、WPA2-PersonalからWPA3-Personal Only modeへのアップグレードの挙動は少し不思議で、直接のアップグレードでは成立しませんが、WPA3-Personal Transition modeを経由するとなぜかアップグレードに成功します。

Windows 11 では O→2や2→Oなどのシナリオでは警告画面が表示されます。この画面は以下のようなものです。

![windows-downgrade-warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/3d63962a-4b3a-cfa0-5015-e8bff351ade1.png)


### 結論

今回の検証でわかったこととして重要なのは、**WPA2-Personal / WPA3-Personal Transition modeで最初に接続した場合、ダウングレードを受け入れる端末が存在する**ということです。

例えば、以下のような現実のシナリオで、攻撃が成立することが考えられます。

1. WPA2-Personalで無線LANネットワークを構築した
    - この時点で、例えばAndroidを使用して接続するユーザAが存在する
1. 管理者はセキュリティ強化のために、WPA3-Personalに変更した
    - 移行性の観点から**SSIDとパスワードはそのまま**にした
    - ユーザAは移行後もこのネットワークを同一の端末で利用する

この状態で攻撃者が不正アクセスポイントを立てると、ダウングレード攻撃の条件が揃います。

攻撃までの流れを図にすると以下のようになります。

![attack-sequence-method-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627713/3ac4b80c-399d-32ea-f69d-caceed5ad5b6.png)

WPA2-Personalとして最初に接続した際、自動でプロファイルが生成されます。Androidの場合であれば、**WPA/WPA2/WPA3-Personal**として登録され、WPA2とWPA3の両方を受け入れるプロファイルが作成されます。

管理者がWPA3-Personalに変更した際、**SSIDとパスワードに変更がなければ**この端末は特段の設定変更なしに暗黙的に接続されます。

この状態で攻撃者がWPA2の不正アクセスポイントを立てると、端末はこのアクセスポイントに自動で接続を試み、攻撃が成立します。

対策としては、移行時にパスワード and/or SSID を変更することでプロファイルの更新をユーザに強制することができます。

# まとめ

WPA3のダウングレード攻撃についての解説と、その成立要件についての簡単な検証とその結果報告を行いました。最終的なまとめとしては以下の通りです。

- WPA2-Personalはオフライン辞書攻撃に脆弱なので、パスワードの強度を十分に設定する
- WPA3-Personal Transition modeはセキュリティ効果があまり高くないので注意
- WPA3-Personal Only modeへの移行時にはパスワードを変更する。SSIDも変更するとより確実

かなりひどい文章になってしまった気がしますが以上になります。誤った内容が含まれていたら指摘してくれると嬉しいです。