KRACK Attacks: WPA2脆弱性の技術的な説明

This website presents the Key Reinstallation Attack (KRACK). It breaks the WPA2 protocol by forcing nonce reuse in encryption algorithms used by Wi-Fi.

情報源: KRACK Attacks: Breaking WPA2

弊社でもWi-Fiの技術を扱っていますので、WPA2の脆弱性について書かれているKRACKの論文を確認しました。影響についてはインターネットのいろいろなところで書かれてますので、技術的な点について説明をしたいと思います。
WPA2 CCMPでは、テンポラリー鍵(以下PTK)とPacketNumber(以下PN。48bit)とMACアドレスを種に、AESのアルゴリズムを動かしています。そのAESのアルゴリズムから暗号系列が出てきますので、それと平文のXORを取って、暗号文としています。

ここで、PTKとMACアドレスはセッション中は固定ですので、PNによってAES暗号系列が決まってしまいます。PNは、パケット毎に1ずつ増加させていきます。PNは48bitありますので、1msに1packetを投げたとしても、9000年近くかかります。普通の人には関係ない時間ですので、MAXまで行って、戻った時の心配はしなくてもよいです。絶対に同じ値にならないように設計されていました。
しかし、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の論文の中では、deauthenticate(切断)メッセージを偽造して送ると、その度に4 way handshakeを繰り返すので、いくらでも情報が得られると書いてあります。
接続後の最初のシーケンスだけでは大した情報は得られないですが、KRACKの論文の中では、Deauthentication(切断)メッセージを送ると、その度に4 way handshakeを繰り返すので、いくらでも情報が盗めると書いてあります。
ここでなんでDeauthenticationメッセージを偽造できるんだという疑問が浮かびますが、なんとIEEE802.11の仕様では最近までDeauthentionフレームを含むマネージメントフレームには暗号化がかかっておらず、暗号化をかける方法もありませんでした。いくらでも中間者攻撃ができてしまいました。なお、最近のIEEE802.11ac対応のデバイスでは、PMF(Protected Management Frame)というマネージメントフレームを暗号化する仕様をサポートしてますので、この攻撃はできなくなっています。

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

弊社では、Wi-Fiを始めとし、Bluetooth, 3G/LTE, LoRa等の無線通信に関する製品開発やサービス開発を行っております。無線に関するサービス、技術については、お気軽にお問い合わせください。