ニュース
Broadcom Wi-Fiの脆弱性「Broadpwn」詳細。ワームの悪夢再び
~Wi-Fiをオンにしているだけで突かれる可能性、Galaxy/Nexus/iPhoneなどが標的に
2017年7月28日 18:58
セキュリティ研究者のNitay Artenstein氏は26日、BroadcomのWi-Fiチップ「BCM43xx」ファミリに任意のコードを実行できる脆弱性「Broadpwn」の詳細を発表した。悪用されれば、2000年前後に流行した“ワーム”の悪夢が再来すると警鐘を鳴らしている。なお、Appleの「iOS 10.3.3」および「macOS Sierra 10.12.6」ではこの脆弱性が修正されている。
BroadcomのBCM43xxファミリは、SamsungのGalaxy S3からS8までのすべての製品およびGalaxy Note 3、GoogleのNexus 5/6/6X/6P、そしてiPhone 5以降のすべてのiPhoneに入っており、これらのデバイスを対象にこの脆弱性が悪用される可能性がある。
BCM43xxのチップは、Cortex-R4マイクロコントローラ、および独自のプロセッサをベースとしており、前者はMACおよびMLMEレイヤーをハンドルし、後者は802.11物理層を担う。起動時には、Cortex-R4側でプログラムがRAMに読み込まれる。しかしこのRAM領域はASLR(Adress Space Layout Randomization:アドレス空間配置のランダム化)およびDEP(Data Execution Prevention)の機能がなく、すべての領域にRWX(読み込み/書き込み/実行)パーミッションが与えられていたという。そこでNitay氏はこのRAM領域でプログラムが実行できないかどうか研究した。
このCortex-R4はHNDRTEと呼ばれる“ミステリアスな”独自のリアルタイムOSを動作させている。HNDRTEのソースコードはプロプライエタリで、公開されていない。しかし以前、VMG-1312と呼ばれるBroadcomのチップセットを使用したWi-Fiルーターで、BroadcomはLinux向けのオープンソースドライバとともにプロプライエタリのドライバのソースコードを流出しており、そのなかから糸口を見つけることにしたという。
もう1つの課題は、攻撃するターゲットと同じネットワーク内にいない状態で、どうやってWi-Fiチップ内に侵入するかであった。そこで研究者らはIEEE 802.11アソシエーションの挙動に着目した。
IEEE 802.11は暗号化通信が行なわれる前にも通信が行なわれている。それがアクセスポイントを探している段階だ。端末はまずアクセスポイントに対してプローブリクエストを投げ、アクセスポイントからレスポンスが返される。そのあと、サポートされている暗号化タイプや802.11の機能などを含むデータもやりとりされる。実際の暗号化通信はこのシーケンスのあとに行なわれるため、このシーケンスでMACアドレスやSSIDを偽装したり、認証を経ずにバグを引き起こすことが可能になる。
Broadcomは802.11のさまざまなプロトコル、およびファームウェア自体のさまざまな機能を容易に処理するために、モジュラー構造でこのシーケンスを実装しており、それが「wlc_attach_module」である。そしてこの中の関数を絞り込んでいったところ、トラフィックの優先順位を設定するワイヤレスマルチメディアエクステンション(WMM)の関数「wlc_iem_add_parse_fn」にバグを見つけた。
このプログラムで、バッファ「current_wmm_ie」が大きさ「ie」のデータを保持するのに十分な大きさであることを確認せずに、関数「memcpy()」を呼び出した。研究者が実際に試したところ、current_wmm_ieは44バイト分のメモリをアロケートしたが、ieの最大サイズは255バイトで、211バイト分オーバーフローしたという。
オーバーフローしたコードは「wlc_pm_st」の型となり、省電力モードに入る、もしくは省電力モードを続けるといった電力管理状態を表示する。しかし、この構造体内でデータを上書きしてもシステムがクラッシュしない領域、そしてSSID文字列を保持していた隣接する構造体の領域を合わせても44バイトしかなく、有意義なプログラムを置くことはできない。
そこで研究者たちは、さきほどの領域を実際のプログラムにジャンブするスタブとして、実際プログラムのペイロードとしてより大容量なリングバッファ(スキャンしたSSIDの情報を保持指定おく場所)に置くことにした。
最後は、Broadcomのチップから脱してメインのアプリケーションプロセッサ上のコード実行に昇格することだが、現在主に3つのアプローチが考えられている。
1.Broadcomのカーネルドライバのバグを見つけること。ただしこの方法は困難であり、下手すればシステムがクラッシュしてしまい意味がない。
2.PCI Expressバスを使いカーネルメモリを直接読み書きする。
3.攻撃対象がHTTPS以外のサイトを参照するのを待ち、Wi-Fiチップから悪意のあるURLにリダイレクトする。ただしWebブラウザごとにエクスプロイドチェーンを用意する必要がる。
現在の研究対象は主に3番となっており、すでに研究者は暗号化されていないHTTPトラフィックを発見する関数を見つけている。
ブログの最後で、このBroadpwnは初めての「Wi-Fiワーム」であると位置づけた。同研究で、混雑した都市部で約1時間モニタリングしたところ、Probe Requestで数百のSSID名を盗聴し、このうち約70%がBroadcomのWi-Fiチップであったという。このため、Broadpwnを悪用したプログラムがもし出回れば、数日間の内に巨大な影響を及ぼすだろうとしている。