WPA2の脆弱性(KRACK)について(★★★)

[無線LAN(Wi-Fi, IEEE802.11)の開発依頼は、フィールドデザインまでお気軽にお問い合わせください。]

WPA2にも脆弱性があることが発表されました(WPAでも同じです)。ここではその脆弱性について説明します。

AESの「データパケットの暗号化」で説明したように、CCMPでは、PTKとMACアドレスはセッション中は固定ですので、PNによってAES暗号系列が決まってしまいます。PNは、パケット毎に1ずつ増加させていきます。PNは48bitありますので、1msに1packetを投げたとしても、9000年近くかかります。絶対に同じ値にならないように設計されていました。
しかし、IEEE802.11仕様書には、「4 way handshakeのMessage3が来た場合に暗号鍵をインストールしてください」と書かれてます。また、「新しい暗号鍵をインストールしたら、PNを1にしてください。」と書かれてもあります。
そういう仕様に基づいて、下記のようなシーケンスが発生するとします。

シーケンスを説明すると、

  1. APはMessage3をSTAに送り、STAはPTKをインストールします。それと同時にPN=1とします。
  2. STAが送ったMessage4が妨害者によりAPに届くのを妨害されます。
  3. STAは、4way handshakeが成功したと思っていますので、ユーザーデータ(例えば、TCP/IP, HTTPのデータ)を送り始めます。
  4. しかし、ここでも妨害者によりAPに届くのを妨害されます。
  5. APはしばらく経ってもMessage4が届かないので、Message3を再送します。
  6. STAは、PTKを再度インストールします。それと同時にPN=1とします。しかし、IP層など上位のレイヤとWPAのレイヤは独立で動作しているため、PTKがインストールされたことなど、上位のレイヤにはわかりません。
  7. STAは、続くユーザーデータをどんどん送信します。ところが、これらのユーザーデータのPNは、以前に送ったPNと同じになってしまっています。

最初に説明しましたように、PNが同じであると作られるAES系列が同じになってしまいます。
つまり、下記のような2つの暗号文があった時、AES系列1 = AES系列2になってしまいます。

  • 暗号文1=平文1 XOR AES系列1
  • 暗号文2=平文2 XOR AES系列2

上記の2式をXORを取ると、下記の式が成り立ってしまいます。

  • 暗号文1 XOR 暗号文2 = 平文1 XOR 平文2

今、暗号文1, 暗号文2は、無線で送信されてわかっていますので、平文1がわかってしまうと、平文2もわかってしまうということです。これだけでは、平文1がわからなければ、平文2はわからないので安全に思えますが、そうでもありません。
一般的には、通信の一番最初のパケットはARPやDHCPなど決まったパケットです。パケット長からもその内容を予想できてしまいます。そうなると、もう一方の平文2も解読ができてしまいます。
接続後の最初のシーケンスだけでは大した情報は得られないですが、KRACKの論文の中では、Deauthentication(切断)メッセージを偽造して送ると、その度に4 way handshakeを繰り返すので、いくらでも情報が盗めると書いてあります。
ここでなんでDeauthenticationメッセージを偽造できるんだという疑問が浮かびますが、なんとIEEE802.11の仕様では最近までDeauthentionフレームを含むマネージメントフレームには暗号化がかかっておらず、暗号化をかける方法もありませんでした。いくらでも中間者攻撃ができてしまいました。なお、最近のIEEE802.11ac対応のデバイスでは、PMF(Protected Management Frame)というマネージメントフレームを暗号化する仕様をサポートしてますので、この攻撃はできなくなっています。

KRACKの対処方法は、いろいろできますが、単純にSTA側で2回目のMessage3は捨てればいいだけです(相手のPNがヘッダーに入っているので1回目かはわかります)。