このページの本文へ

Black Hat USA 2016/DEF CON 24 ラスベガス現地レポート 第1回

あらゆる通信ハイジャックが可能になるNetBIOS脆弱性、Black Hat USA 2016で報告

95から10までの全Windowsに影響、「BadTunnel」脆弱性とは何か

2016年08月08日 13時00分更新

文● 谷崎朋子 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 20年以上も前から使われてきた、Microsoft Windowsの標準プロトコル。8月4日、米国ラスベガスで開催されたセキュリティカンファレンス「Black Hat USA 2016」では、そんな“いにしえの技術”の一部に脆弱性が存在することが発表された。

 この脆弱性はWindows 95からWindows 10までの全OS、さらにInternet ExplorerやMicrosoft Officeの全バージョンに影響を与えるもので、悪用すれば、Windowsのあらゆるネットワーク通信を乗っ取ることも可能だという。

毎年、幅広い分野のセキュリティ脆弱性が報告されることで注目される「Black Hat USA」

NetBIOSに起因する「BadTunnel」脆弱性はなぜ生じたのか

 「BadTunnel」と命名されたこの脆弱性は、NetBIOSの名前解決サービス「NBNS(NetBIOS Name Service)」の仕様に起因する。NBNSは、Windowsネットワーク内の名前解決(指定されたコンピューター名に対応するIPアドレスを応答する)を行う、いわばDNSのようなサービスだ。

 NBNSには、名前解決を行う際に送信する「NBクエリー」と、指定したファイル共有パスにアクセスできない場合に送信する診断用の「NBSTATクエリー」の2種類がある。いずれも137ポートを宛先ポートとして使用し、NBSTATクエリーのほうは送信元も137ポートだ(NBクエリーはランダム)。

 また、トランザクションID(NetBIOSのパケットを識別するためのID)は連番で、かつNBクエリー/NBSTATクエリーが共通のカウントを使うよう設定されているため、どちらか一方のパケットから、他方のパケットのトランザクションIDを推測できる。

 「DNSでは、(送信元)ポートやトランザクションIDをランダム化することでセキュリティを担保しているが、NBNSはそれがない。そもそもNBNSは同一ネットワーク内(LAN内)で利用することを想定しているので、(あまりセキュリティを考慮していない)この仕様でも問題はなかった」。同脆弱性を発見したTencentのヤン・ユー氏はこう説明する。

TencentのXuanwu Labでディレクターを務めるヤン・ユー氏

WPADと組み合わせれば全通信がハイジャック可能に

 ここでひとつ重要なポイントが、NBSTATクエリーのやり取りを行う際には一定時間、双方の137ポート間で通信路が確立されるという点だ。

 ユー氏が述べるとおり、NBNSはLAN内の通信を前提に設計されているのだが、仮に片方のマシンがファイアウォールの内側(LAN)、もう片方がファイアウォールの外側(インターネット)にあり、ファイアウォールの内→外へセッションを張ることができた場合(NBNS通信がブロックされていない場合)には、外→内への通信もできる危険な“トンネル”が出来てしまうわけだ。

 ファイアウォールに穴が開けば、攻撃にも利用できる。特に、自動プロキシ設定機能の「WPAD(Web Proxy Auto-Discovery)」が乗っ取られた場合は深刻だ。WPADは、プロキシサーバーの設定ファイルをWPADサーバーから取得し、Windows PCに自動設定する機能である。「WPAD乗っ取り攻撃」の全体像は、次のような流れになる。

「BadTunnel」脆弱性とWPADによるプロキシ自動設定を組み合わせた攻撃方法

-1)ターゲットに対して、攻撃者マシンへのWindowsネットワーク共有パス(「\\10.10.2.2\BadTunnel」など)が書かれたメールを送る。

-2)それをクリックしたターゲットPCは、共有ファイルにアクセスするため、攻撃者マシンの139ポートまたは445ポート宛てにSYNパケットを送信。
 同時に、プロキシ設定の自動取得が有効であれば、WPADサーバーの名前解決のためにNBクエリーをブロードキャストを開始し、レスポンスを待ちうける。

-3)攻撃者は、ターゲットPCからのSYNパケットの受信を拒否する。

-4)ターゲットPCは「接続に問題がある」と考え、診断のためにNBSTATクエリーを攻撃者マシン宛てに送信する。
 これにより、ターゲットPCと攻撃者マシンを結ぶ“トンネル”が一定時間、確立される。ファイアウォールは、内→外への通信なので干渉しない(内→外への137ポート通信を明示的にブロックしていなければ)。

-5)攻撃者は、先ほどの“トンネル”を介して、同じ137ポートを使うNBクエリーに応答できる。
 NBクエリーはLAN内にのみブロードキャストされており、別ネットワークにいる攻撃者にはトランザクションIDはわからないが、NBSTATクエリーのトランザクションIDと連番なので推測できる。

-6)攻撃者は「攻撃者マシンがWPADサーバーである」と嘘のレスポンスを返す。これによりターゲットPCは攻撃者マシンに誘導され、攻撃者が用意した偽のプロキシサーバー設定ファイルを読み込むことになる。

 以上の流れで、攻撃者はターゲットネットワーク内でプロキシ設定の自動取得を有効にしているマシンすべてに対し、偽のプロキシサーバーを設定させることに成功する。

 PCに偽のプロキシが設定されてしまうと、Webアクセスだけでなく、Windows Updateサービス、Microsoft CryptoAPI証明書リストの更新まで、すべてのネットワーク通信がその偽プロキシを経由することになる。つまり、あらゆる通信を監視したり、乗っ取ったりしてしまうことができる。

 ユー氏は、今年3月にマイクロソフトのバグ発見報奨金プログラムを通じて同この脆弱性を報告し、5万ドルの報奨金を獲得している。

 ユー氏の報告を受け、マイクロソフトでは2016年6月、Windowsへの修正アップデート(パッチ、MS16-077)をリリースし、ファイル共有パスへのアクセスに失敗してもNBSTATクエリーを送信しない、WPADの名前解決でNBNSを使用しないといった修正を行った。まだ同パッチを適用していない場合は、できるだけ早急に適用すべきだ。

 すぐにはパッチを適用できない、あるいはサポートが終了したOS(Windows XPなど)を使用しているといった場合は、ファイアウォールで内→外の137ポート通信をブロックする、NetBIOSを無効化する(Windowsネットワーク共有サービスを使わない場合)、WPADの取得元URLを固定するかプロキシの「設定を自動的に検出する」を無効にするといった次善策が推奨される。

Windowsのプロキシ設定画面

カテゴリートップへ

この連載の記事