hgot07 Hotspot Blog

主に無線LANや認証連携などの技術についてまとめるブログです。ネコは見る専。

1X認証でPAPを使ってはいけない

???「知ってる。パスワードが平文で送られるからでしょ?」

現場猫「でもサーバ認証があれば大丈夫っしょ、へーきへーき」

 

それでは、現場をご覧ください。

RADIUSサーバが平文パスワードを受け取っている様子

\ User-Password = "piyopiyo" /

頭ではわかっていても、実際に目の当たりにすると迫力が違います。

この時の端末側の設定は、以下のとおりです。

端末側でPAPを設定している例

 

まずはサーバ認証

無線LAN802.1X認証で用いられる EAP (Extensible Authentication Protocol) のうち、EAP-TTLSやPEAPでは、端末と認証サーバ (RADIUSサーバ) の間で互いを認証してTLS接続を確立する Phase 1 と、IDとパスワードを用いたユーザ認証を実施する Phase 2 の二段階の認証があります。

IDとパスワードのやりとりはTLSトンネルで保護された通信路で行われるので、一旦TLS接続が確立すれば、第三者に盗聴される危険性は無くなります (暗号強度のレベルで)。しかし、ここで接続しようとしている基地局と、その裏にある認証サーバは、正規のものでしょうか?端末からサーバを認証するのが、よく「サーバ認証」と呼ばれている処理です。

EAP-TTLSは、サーバ認証を行うことが前提の認証方式です。ところが、端末によっては、サーバ認証を実施しない設定も可能です。手動設定の場合は特にそうですが、なんと、Wi-Fiプロファイルをネットから流し込むようなプロビジョニングでさえ、サーバ認証が有効にならないケースがあります。見つけたところには注意喚起していますが、たぶんあちこちあるでしょう。

というわけで、サーバ認証が無効な場合、偽の認証サーバによってパスワードが窃取される危険性があります。サーバ認証が確実ではないことも想定しておく方が安全です。

 

Phase 2認証の方式

Phase 2認証には、PAP (Password Authentication Protocol) や MSCHAPv2 (Microsoft Challenge-Handshake Authentication Protocol Version 2) などが指定できます。PEAPでは原則としてMSCHAPv2を使います。

それでは、なぜ、パスワードをサーバに平文で伝えるなどという、PAP なんていう代物が生き残っているのでしょうか。EAP-TTLSと言えばPAPというぐらい、どういうわけかメジャーな選択肢になっていました🤔

一昔前の EAP-TTLS の実装で MSCHAP や MSCHAPv2 がまともに動かなかったことが、大きな要因の一つと考えられます。10年ほど前、MSCHAPv2の壊れた実装が市場に流通していて、大変困ったことがあります。

RADIUSサーバの裏にあるデータベースに、MSCHAPv2で使える形式 (NTLM) のパスワードが格納されておらず、平文もないという状況で、どうしても802.1X認証が使いたいという事例もあります。

冒頭のキャプチャ画像にあるとおり、PAPでは端末がRADIUSのUser-Password属性に平文パスワードを詰めてサーバに送ってしまうので、サーバからパスワードが丸見えになります。MSCHAPv2では、端末が保持しているパスワードと、サーバが保持しているパスワードがそのまま相手に送られることはなく、チャレンジ - レスポンスという形でやり取りが進みます。厳密にはMSCHAPv2にも脆弱性が知られているのですが、何もないPAPより、解読の時間稼ぎにはなるでしょう。

 

PAPの悪用例

サーバ側で平文のパスワードが容易に取得できるとなれば、パスワードを窃取する以外にも、様々な攻撃が可能になります。

例えば、端末から送られてきたUser-Passwordの値をそのまま使って、802.1Xの認証を不正に成功させる (Access-Acceptを返す) ことができます(*1)。すると、攻撃者は、自分のLANに端末を接続させて、MITM (中間者) 攻撃や、端末への直接の攻撃が可能となります。

2022年の Wireless Global Congress における FBI の話によれば、暗号化の実装が進んだお陰で難易度が高くなった「盗聴」よりも、基地局や端末などのデバイスの「脆弱性を突く」ことの方が、現実的な攻撃手段とのことです。つまり、攻撃者のLANに端末が接続させられることは高リスク😱 と言えるでしょう。

 

*1 FreeRADIUSの場合、設定ファイルに数行追記するだけで実装可能。

 

対策

とにかく、サーバ認証を確実に行うことが第一です

その上で、サーバ認証が行われない場合に備えて、PAPを使わないようにすることでしょう。

 

EAP-TLS使えよ!」
ごもっともなのですが、それは運用の手間とのバランスの話になるかと思います。(きちんとrevokeまで作り込んでいますか?)

 

おしまい