2015年7月、イタリア企業「Hacking Team」が攻撃を受け、400Gバイト以上のの機密情報が漏えいしたことが報道されています。この企業は、合法的に通信を傍受するためのソフトウェアを販売していることで知られ、政府や法執行機関が使用している可能性があります。なお、Hacking Team は、これまでに人権抑圧国家との取引はないと述べています。
Hacking Team から漏えいしたとされている情報は、現在インターネット上に公開されています。漏えいした情報のほとんどが Hacking Team の業務内容となっていますが、製品の販売先に関しては企業の公式発表と矛盾しているようです。また、漏えいした情報の中には、攻撃を実行するためのツールが含まれていました。そして、こうしたツールには、Adobe Flash Player や Windows に存在する脆弱性を利用したエクスプロイトコードが含まれていました。
漏えいした情報には、少なくとも 3つのエクスプロイトコードが含まれていました。そのうち 2つが Flash Player の脆弱性を利用するもので、もう 1つは Windows のカーネルに存在する脆弱性を利用するものです。両Flash Player の脆弱性のうち1つには、CVE識別子「CVE-2015-0349」が割り当てられており、パッチもリリースされています。
Adobe Flash Player の脆弱性を利用したエクスプロイトコードの 1つについて、漏えいした情報内では、「過去4年間で最も美しい Flash Player に存在する脆弱性」と述べられています。Flash Player の脆弱性のうち1つおよび Windows のカーネルに存在する脆弱性について、CVE識別子がまだ割り当てられていません。パッチもリリースされていないため、ゼロデイ脆弱性の状態になっています。
図1:漏えいした情報内での脆弱性に関する言及
■今回の脆弱性について
漏えいした情報には、Windows の電卓を起動する Flashのゼロデイ脆弱性の「Proof-of-concept(PoC、概念実証型エクスプロイト。実際に有効な攻撃ができることを実証している攻撃コード)」と、実際の攻撃のシェルコードを含む公開バージョンが含まれていました。
トレンドマイクロは、POC に今回のゼロデイ脆弱性に関する詳細を記述した「Readme」が含まれていることを確認しました(図2)。この添付文書によると、この脆弱性は、Adobe Flash Player 9 以降のバージョンに影響し、デスクトップ版およびメトロ版の Internet Explorer(IE)、Chrome、Firefox、Safari などすべてに影響を与えます。
図2:漏えいした情報内での脆弱性に関する言及
■根本原因の解析
「Readme」は、この脆弱性の根本原因についても言及しています。これは、クラス「ByteArray」に存在する「Use After Free(解放後使用)」の脆弱性です。下記で簡単に説明します。
- 「ByteArray」オブジェクト「ba」のとき、「ba[0] = object」のような割当を実行すると、このオブジェクトの関数「ValueOf」を呼び出す
- 関数「ValueOf」は上書きすることができるため、オブジェクト関数「ValueOf」の「ba」の値を変更することが可能になる
- 関数「ValueOf」のメモリ「ba」を再割当てした場合、関数「ValueOf」が呼び出された後、「ba[0] = object」が元のメモリを保存し、使用するため、解放後使用が生じる。
■公開バージョンのエクスプロイトコードの解析
解放後使用の脆弱性を利用した攻撃によって、Vector.<uint> の length項目を破壊し、プロセス内で任意のメモリ読み込みおよび書き込みが可能になります。これにより、エクスプロイトコードは以下を実行することができるようになります。
- プロセス内の「kernel32.dll」のベースアドレスを検索し、その後「VirtualProtect」のアドレスを取得
- 「ByteArray」内に含まれるシェルコードのアドレスを取得
- 「VirtualProtect」を呼び出し、シェルコードのメモリを変更して実行可能にする
- AS3コードには定義された「Payload」と名付けられた空の static関数がある
- 関数オブジェクトのアドレス「Payload」を検出し、その後、関数オブジェクト「Payload」が持つ正規の関数コードのアドレスを取得
- 正規の関数コードのアドレスをシェルコードのアドレスに書き換える
- AS3で static関数「Payload」を呼び出す。これにより、シェルコードが呼び出される
- シェルコード実行後、static関数のアドレスをリセットする
弊社では、このエクスプロイトコードが利用する手法により、static関数コードのアドレスを上書きすることで Microsoft のセキュリティ機能「Control Flow Guard」を回避することを確認しました。
■トレンドマイクロの対策
この脆弱性を利用した攻撃はまだ確認されていないため、ユーザは過度に懸念する必要はないでしょう。弊社では、必要に応じて今後も引き続き情報を提供していきます。
弊社のネットワーク挙動監視ソリューション「Trend Micro Deep Discovery(トレンドマイクロ ディープディスカバリー)」をご利用のユーザは、サンドボックスや「Script Analyzer」エンジンによりこの攻撃を検知することが可能です。また、ブラウザ向け脆弱性利用対策技術「ブラウザガード」は、弊社のネットワーク端末向けセキュリティ対策製品に搭載されています。また、弊社のクラウド型セキュリティ基盤「Trend Micro Smart Protection Network」の「Webレピュテーション」技術により、このエクスプロイトコードを拡散させる不正URL へのアクセスをブロックします。
参考記事:
- 「Unpatched Flash Player Flaws, More POCs Found in Hacking Team Leak」
by Peter Pi (Threat Analyst)
【更新情報】
2015/07/07 | 22:58 | その後の解析の結果、CVE番号が割り当てられていない脆弱性は、2つの Flash Player のうち 1つの脆弱性および、Windows のカーネルに存在する脆弱性であることが判明し、本文中を更新しました。 |
翻訳:品川 暁子(Core Technology Marketing, TrendLabs)