Video Screencast Help

Java の脆弱性の悪用

Created: 17 Aug 2012 11:14:25 GMT • Translations available: English
Chintan Trivedi's picture
0 0 Votes
Login to vote

Java SE は、プラットフォームに依存しないプログラミング言語です。あらゆるオペレーティングシステム(Windows および *nix ベース)で使用されており、Java のセキュリティ脆弱性が悪用される余地を広げています。ここ数カ月で悪用された Java のセキュリティに関する深刻な脆弱性をここで 2 つ検証します。

サンドボックス内のアプレット

Java アプレットはサンドボックスを使用して、オペレーティングシステムの特権付き機能や一部の特権付き Java コードへのアクセスを制限しています。そのため、どのプログラマが開発したアプレットも、コンピュータ上で悪質な活動を実行することなくブラウザ内で安全に動作することができます。これは、ファイルシステムに対する読み取りや書き込み、外部ホストに対するネットワーク接続の作成といった処理をアプレットが明示的に実行することができないためです。Java の脆弱性を悪用する攻撃者は、このサンドボックスによる制約を回避し、任意のコードを自由に実行するため、コンピュータを壊滅させるおそれがあります。

Java のセキュリティ問題の悪用は、ここ数年、大幅に拡大しています。これは、Java を悪用すると、アドレス空間配置のランダム化(ASLR)やデータ実行防止(DEP)などの Windows のセキュリティメカニズムを回避する必要がなく便利だからです。Java の脆弱性を悪用する唯一の目的は、マルウェアのダウンロードや実行のために、アプレットのサンドボックスの制約を回避することです。
 

図 1. パッチが適用された最近の脆弱性の件数

上の図は、最近の 2 つの Oracle Java SE クリティカルパッチアップデート(CPU)で修正された Java Runtime Environment の脆弱性の件数を示しています。

脆弱性に関する時系列

図 2. 最近の脆弱性に関する時系列

ここ 6 カ月の間に、データ型の混乱エラーに起因する Java のセキュリティ脆弱性として、Oracle Java SE に存在するリモート JRE コード実行の脆弱性(CVE-2012-0507)および Oracle Java SE に存在するリモートコード実行の脆弱性(CVE-2012-1723)の 2 つが悪用されています。Oracle では、これらの問題に対するパッチを、それぞれ 2012 年 2 月 14 日と 2012 年 6 月 12 日にリリースしています。これら両方の問題に関する技術情報は、更新のリリースから約 10 日後にインターネット上で公開されました。CVE-2012-0507 を悪用する攻撃は、更新のリリース後 1 カ月以上経過してから確認されましたが、CVE-2012-1723 を悪用する攻撃は、1 カ月も経たない内に攻撃が確認されています。

サンプルコード

CVE-2012-0507 の脆弱性(図 3)の発生原因は、期待される Object[] 型に配列がなっているかどうかをアプリケーションが正しくチェックできないためです。AtomicReferenceArray.set() メソッドを使用して任意の参照を配列に書き込んでいますが、型の安全性に違反しています。

図 3. CVE-2012-0507 のサンプルコード

CVE-2012-1723 の脆弱性(図 4)の発生原因は、Verifier が静的フィールドでの PUTFIELD 処理の検出に失敗するためです。この問題については以前のブログで説明しましたが、Symantec DeepSight をお使いのお客様は、Threat Analysis ドキュメントでより詳細な技術情報をご覧いただけます。

図 4. CVE-2012-1723 のサンプルコード

悪用

どちらの問題のサンプルでも、同じテクニックを使って脆弱性を悪用しています。つまり、getClass().getClassLoader() によって得られた ClassLoader オブジェクトで、データ型混乱の脆弱性を悪用して、ClassLoader のサブクラスによる混乱を作り出しています。ClassLoader の保護されたメソッド defineClass() を呼び出して、新しいパーミッションを持つ新しいクラスが動的に作成されます。

図 5. 新しいクラスとパーミッションの作成

通常、サンドボックス内で上記のプロセスは許可されません。
 

図 6. データ型混乱の脆弱性の悪用

最後に

次回予定されている Oracle Java SE クリティカルパッチアップデートは、2012 年 10 月 16 日です。Java の更新は、利用可能になり次第すぐに適用することをお勧めします。

シマンテックでは、CVE-2012-1723 の悪用の試みを、IPS 定義 Web Attack: Malicious JAR Download 2 および Malicious JAR Download で検出するとともに Trojan.Maljava!gen23 として検出します。また、CVE-2012-0507 の悪用の試みを IPS 定義 Web Attack: JRE Concurrency CVE-2012-0507 で検出します。

 

* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。