2013年に入り、Javaに存在する脆弱性が攻撃者により多用される事例を多く確認しています。そして、2013年8月下旬、複数のセキュリティ関係者により Java のネイティブレイヤに存在する脆弱性「CVE-2013-2465」および「CVE-2013-2471」を利用するエクスプロイトコードが明らかにされました。トレンドマイクロは、こうした Java のネイティブレイヤを狙うエクスプロイトコードが2013年に入り頻繁に確認されていることから、こうしたエクスプロイトコードについてより詳しく調査することにしました。また、2013年のセキュリティカンファレンス「CanSecWest」でのハッキングコンテスト「Pwn2Own」で、Joshua Drake 氏は、Windows 8 上で動作する Java 7 で利用可能な脆弱性「CVE-2013-1491」を指摘しました。さらに脆弱性「CVE-2013-1493」は、「Blackhole Exploit Kit」といったエクスプロイトキットに頻繁に利用される脆弱性となります。
こうしたエクスプロイトコードがなぜ一般的に攻撃に利用されているのでしょうか。それを知るためには、まず Java の構造を理解することが役に立ちます。Java を狙うエクスプロイトコードは、Java のレイヤに存在する脆弱性を利用するエクスプロイトコードと、Java のネイティブレイヤに存在する脆弱性を利用するエクスプロイトコードの 2つの種類に分けることができます。
|
図1 は、Java のセキュリティモデルを示しています。Java のレイヤ内の脆弱性を突くエクスプロイトコードは、実際には、Java のレイヤランタイムに存在する脆弱性を利用します。そしてこれによりアプリケーションは、セキュリティマネージャを回避することができ、高い権限の機能を呼び出すことが可能となります。これらのエクスプロイトコードには次の特徴があります。
同じように、Java のネイティブレイヤ内の脆弱性を突くエクスプロイトコードは、実際には Java のネイティブ・レイヤ・ランタイムに存在する脆弱性を狙います。これらのエクスプロイトコードは、「ASLR」や「DEP」といった OS レベルの防御システムを回避する必要があるため、作成がより困難です。それに加え、Java のネイティブレイヤに存在する脆弱性を利用するエクスプロイトコードの作成には、より高度な技術が必要となります。
|
以前は、Javaの レイヤに存在する脆弱性がより一般的なものでしたが、現在は異なります。2013年以前は、Java ネイティブレイヤの脆弱性に対して、3 対 1 の割合で Javaのレイヤ内の脆弱性が利用されていました。しかしながら 2013年以降、より多くのネイティブレイヤの脆弱性が利用されるようになりました。この原因は何でしょうか。
しかしながら2013年は、攻撃者たちは、ネイティブレイヤの脆弱性を利用する能力を明らかに持っているように見受けられます。そして脆弱性を利用する 2つの手法が増えてきているのを確認しています。
その 1つは、Java の配列の長さ(array length)のオーバーフローを利用し、java.beans.Statement オブジェクトのクラス「AccessControlContext」のメンバを変更する手法です。これを実行するには、以下の手順が必要です。
手順 1. Java の Array オブジェクトをヒープ領域に作成する。
|
手順 2. Java のネイティブレイヤ内の脆弱性をトリガする。Array オブジェクトの length プロパティは、非常に大きな値にオーバーフローされる。
|
手順 3. 攻撃者は、Array オブジェクトを利用し、以下のバッファを正確に取得または設定することが可能になる。攻撃者たちは、以下の AccessControlContext オブジェクトを示す java.beans.Statement オブジェクトの ACCフィールドを変更することができる。一般に ACCフィールドは、AccessControlContext オブジェクトへの常時アクセス許可を示すために変更される。これにより、感染PC 上で任意のコードを実行させることができるようになる。
|
この脆弱性利用の手法は、脆弱性を引き起こすために利用可能なバッファと、同じヒープ領域に上書きが必要なバッファの両方を必要とします。これを行うには、ある程度の知識と技術が必要です。これに加え、「Pwn2Own 2013」で情報漏えいおよび ROPシェルコード攻撃が実演されました。この攻撃は、Java のネイティブレイヤ内の脆弱性を狙い、ROPシェルコードを構築し、実行コンテキストを乗っ取ることでモジュール・ベース・アドレスを取得します。トレンドマイクロでは、2013年は同様のエクスプロイトコードが確認されると予想しています。
弊社では、現在および将来の Java の脆弱性の影響を減らすため、ユーザに Java の使用を慎重に判断する必要性と、常に更新された Java を使用することを強く推奨しています。
トレンドマイクロのサーバ向け総合セキュリティ製品「Trend Micro Deep Security(トレンドマイクロ ディープセキュリティ)」ををご利用のお客様は、以下のフィルタを適用することにより、今回記事で言及した各脆弱性「CVE-2013-2465」「CVE-2012-4681」「CVE-2012-1723」)を利用する攻撃から保護されます。
参考記事:
by Jack Tang (Threats Analyst)
翻訳:木内 牧(Core Technology Marketing, TrendLabs)