期待のネット新技術

脆弱性「FragAttack」を悪用する3つ目の攻撃シナリオとその手法

【利便性を向上するWi-Fi規格】特別編(3)

 【光Ethernetの歴史と発展】編も、そろそろ終盤に差し掛かったところではあるが、既報の通り、ニューヨーク大学アブダビ校のMathy Vanhoef氏が発見した、Wi-Fiのプロトコルそのものに起因する脆弱性の仕組みや対処法について、解説していきたい。

 ちなみに、今回の脆弱性は、2017年に11月に「WPA2/WPA」の脆弱性を発見して公表したMathy Vanhoef氏が、オープンソースのWi-Fiスタックを分析し、IEEE 802.11の規格を体系的に調査していく中で新たに発見したものだそうだ。

「利便性を向上するWi-Fi規格」記事一覧

脆弱なアクセスポイントとClientを想定そたFragment Cacheの汚染

 「FragAttack(Fragmentation and aggregation Attacks)」と名付けられた脆弱性における3つ目の攻撃手法は、前回も少しだけ触れたFragment Cacheを汚染(Poisoning)するというもの。前回紹介した攻撃手法と同様、WEP/CCMP/GCMPを利用している場合が対象だ(TKIPでも、再構成されたFrameの真正性が検証されない場合には有効となる)。

 攻撃には、やはりFragment Frameを利用する関係で、これも前回同様に被害者(Client)がFragment Frameを送信していることが必要となる。そして、これは比較的簡単に実現できる、ということは、前回説明した通りだ。

 この3つ目のシナリオは、以下の2つのケースを想定している。1つ目は脆弱なアクセスポイントで、これは「eduroam」や「Hotspot 2.0」などのホットスポットに用いられた脆弱なアクセスポイントを悪用するのが前提だ。こうしたネットワークは基本的に信用できないので、ユーザーは個々の認証鍵や暗号鍵を使って利用することが多いが、そうした場合でも今回の攻撃は有効である。

 2つ目のケースは脆弱なClientだ。これはやはりホットスポットや、会議室などのゲスト用ネットワークなど、攻撃者(Attacker)もパスワードを知っていると想定されるWi-Fiネットワークへ接続するケースだ。こうした状況において、ユーザーはセキュアなデータを基本的に送信しないと考えられるので、そうしたデータの通信は想定していない。

事前に盗んだアクセスポイントへの認証情報をもとに、Fragment Cacheへ汚染データを注入

 さて、Fragment Cacheの汚染について、実際の流れを見ていこう。まずAttackerは前もってClientからデータを盗み出しておく必要がある。その手順は以下に示すように3段階で行われる。

最初の手順は前回の延長といったもの。出典は"Fragment and Forge: Breaking Wi-Fi Through Frame Aggregation and Fragmentation"

 Stage 1で、AttackerはClientのMACアドレスを偽装してアクセスポイント(AP)へ接続する。上に書いたようにこのアクセスポイントへの認証情報は事前に取得済だから問題はない。

 Stage 2は、Clientがネットワークへ接続するためにAuth Frameを送信したときに始まる。AttackerはこのAuthフレームを奪取した上で、そのAuthフレームに含まれる先頭部分だけを抜き出し、暗号化してアクセスポイントへ送信する。これを受信したアクセスポイントがこのFragment Frameを復号。ClientのMACアドレスにつながるFragment Cacheへ、復号した結果を保存する。

 この後、Attackerは、Deauth Frameをアクセスポイントへ送信し、いったんネットワークから切断したのち、改めてClientとアクセスポイントの間で「Multi-Channel MitM(Man-in-the-Middle)」を確立する。

 問題はこのときのアクセスポイントの挙動だ。IEEE 802.11のSpecificationには、「Clientが切断または再接続された際に、Fragmentを削除すべし」という規定がない。この結果、Fragment Cacheには上の図でいうところの「Frag0(s)」がそのまま残ることになる。

 さて、Multi-Channel MitMが確立したらStage 3に入る。Attackerは、Clientからn+1番目のFragmentが送信されるのを待つ(その間は何もせずにClientとアクセスポイントの間の通信を仲介する)。n+1番目のFragmentが送信されたら、このFragmentの中のシーケンス番号を、先ほどStage 2の際で使った「s」に置き換えてアクセスポイントに送る。

 すると、アクセスポイントは、Fragment番号とシーケンス番号、MACアドレスが一致するということで、Fragment Cacheの内容に、今送られた内容を復号してつなぎ合わせることになる。その結果として、再構成されたFrameには、宛先がAttacker、ペイロードがユーザーのデータというIPパケットが含まれることとなる。これは、前回も掲載した以下と同じ図式だ。

 これを応用(?)したのがパケットインジェクションであり、ここから先は、アクセスポイントからClientへの通信に介入する格好となる。具体的には先のStage 2で、「Frag 0」に汚染データを注入することになる。この結果、Stage 3で2つ目のFragmentを受信してFrameの再構成を行うときに、汚染されたデータが追加されることになる。

 つまり、手法としてはFragment Cacheを汚染するかたちなのだが、実はちょっと面倒だ。この攻撃、Wi-Fiレベルでは成立しても、その上位ではね付けられるからだ。

 IPパケットやARPパケットなどにはパケットサイズを定義するフィールドがあるので、汚染データが追加されると、それを検出することが可能だ。その場合、不正パケットだとしてドロップされて終わりとなるわけだ。

業務中はVPNで社内LANへ、業務外ではホットスポットへつなぐノートPCに対する攻撃シナリオ

 そこでシナリオでは、もう少し複雑な構成が想定されている。例えば、会社貸与のノートPCなどを考えたとき、業務などに関してはVPNなどを用いて会社の社内ネットワークへつなぐが、業務時間外には、同じノートPCをホットスポットにつないでネットサーフィンをする、といった使われ方だ。

 こうした場合の攻撃のシナリオは、以下のようなものになる。

Clientへの攻撃は、今まで取り上げてこなかったが、基本は同じだ。出典は"Fragment and Forge: Breaking Wi-Fi Through Frame Aggregation and Fragmentation"

 まずStage 1で、Attackerは会社のMACアドレスを詐称し、しかもホットスポットのアクセスポイントのSSIDを広告(advertise)することで、Clientに「会社につながっているアクセスポイント」と誤解させることから始まる。

 するとClientは(アクセスポイントに接続しているつもりで)実際にはAttackerに接続する。しばらくはAttackerとClientの間で通信が行われるが、この際にAttackerは汚染データをFragmentのかたちでClientに送り付ける。Clientはそれを自身のFragment Cacheへと格納するわけだ。

 ところでAttackerは、アクセスポイントを装っていても肝心の認証などは一切できないし、外部にもつながらない。このため、最終的にはClientからDeauth Frameが送られ、いったんセッションは終了する。ただ、このとき、ClientのFragment Frameには、先ほど送った「汚染されたFragment」が残ったままである(理由は上と同じ)。

 さて、この後、Attackerは改めてClientが信頼されるアクセスポイント(例えば会社のアクセスポイント)へ接続するのを待ち、上と同じようにMulti-Channel MitMを確立する。この段階でAttackerは、Clientとアクセスポイントの間の全てのパケットをそのまま仲介するが、この際にStage 1で利用したシーケンス番号「s」を利用しないようにする。

 そしてアクセスポイントがパケット番号nのFragmentに続き、パケット番号n+1のFragmentをClientに送ったタイミングで介入。フラグメント番号を「s」へと置き換えてClientに送る。ClientはこのFragmentと、先にAttackerから送られてFragment Cacheに残っていたFragmentを組み合わせることになる。

 こうすると、Clientのネットワーク層は、後から送ったデータ(先ほどの図でいう「Frag 1」)はPadding Bytesとして破棄し、(汚染された)「Frag 0」の内容を処理することになる。こうして、汚染されたデータの注入が完成するわけだ。これを利用し、例えばClientに悪意のあるDNSサーバーを使わせるといった攻撃が可能になる。この攻撃は、Clientが信頼できるネットワーク(上の例で言えば会社のアクセスポイント)に接続されている間は実行できるわけだ。

FragAttackにおける攻撃手法をスマートフォンやPCなどで実際に試すと?

言うまでもなく赤が問題あり、緑が問題なし。ここにはResulted in crashなどはないが、下の図では出てくる

 さて、3種類の基本的な仕組みは、ここまでに解説した通りだが、ドキュメント「Fragment and Forge: Breaking Wi-Fi Through Frame Aggregation and Fragmentation」には、実際の攻撃手順やその結果、対処法などについても言及されているので解説していこう。

 最初は攻撃の実験結果について。まずはVanhoef氏らが集めたさまざまなターゲットに対する攻撃結果についての表だ。これは、それぞれの機種がデフォルトの状態でテストを行った結果とのことだ。

 そして以下の左が、16種類のWi-FiカードをWindows(W)およびLinux(L)で使った場合、右の表が7種類をFreeBSD(F)およびNetBSD(N)で試した結果だ。次回はこれらについて、もう少し細かく解説していこう。

A-MSDUはLinuxが見事に全滅しており、一概にWindowsの方が問題が多いとも言いにくい。出典は"Fragment and Forge: Breaking Wi-Fi Through Frame Aggregation and Fragmentation"
FreeBSDやNetBSDは、そもそも対応ドライバーのある製品が減っている。ちなみに上の7つはClient Mode、下の4つはAccess Point Modeでの振る舞い
大原 雄介

フリーのテクニカルライター。CPUやメモリ、チップセットから通信関係、OS、データベース、医療関係まで得意分野は多岐に渡る。ホームページはhttp://www.yusuke-ohara.com/