「Angler EK」が利用する最新の脆弱性は「CVE-2015-0359」でない可能性

「Angler exploit kit(Angler EK)」は、Adobe Flash Player に存在するさまざまな脆弱性を利用することで知られるエクスプロイトキットです。このエクスプロイトキットは、Adobe が 2015年4月にセキュリティ情報で修正プログラムを公開した脆弱性「CVE-2015-0359」を対象に入れ始めているという報告がありましたが、トレンドマイクロは、報告された脆弱性とは別の脆弱性「CVE-2015-0313」が利用されている可能性を確認しました。

「CVE-2015-0359」は「ByteArray::Write」がスレッドセーフでないために起こる「競合状態」の脆弱性で、この脆弱性を利用するためには多くのワーカーが必要です。しかし、弊社が解析した検体では、「Angler EK」が利用している脆弱性は「domainMemory」に関連した「Use After Free(解放後使用)」となっており、利用がより簡単です。このことから、「Angler EK」は修正プログラムが公開されている既知の脆弱性を利用している可能性が浮上してきました。

■実行フロー
弊社が確認した Adobe Flash Player に存在する脆弱性を利用した攻撃の実行フローは、「CVE-2015-0359」ではなく、「CVE-2015-0313」で利用された実行フローと非常によく似ています。

  1. オブジェクト「shareable ByteArray」は、「setSharedProperty」を呼び出すことにより、メインスレッドとワーカースレッド間に共有されるように設定される。
  2. このオブジェクトメモリ「shareable ByteArray」を「domainMemory」に設定する。
  3. ワーカースレッドは、「getSharedProperty」を呼び出すことにより、ワーカーが共有したプロパティを通じてオブジェクト「shareable ByteArray」を取得する。実行フローは Adobe Flash Player のバージョンによって異なる。Flash Player のバージョンが「CVE-2015-0313」に脆弱な場合、「ByteArray::Clear」を呼び出す。そうでない場合は、「ByteArray::WriteBytes」を呼び出す。

図1:新しい脆弱性と「CVE-2015-0313」の違い
図1:新しい脆弱性と「CVE-2015-0313」の違い

この新しい脆弱性が「CVE-2015-0313」と異なる点は、基本となるバッファを変更するために「ByteArray::WriteBytes」を呼び出すことです。この変更が「domainMemory」に通知されないため、「domainMemory」は解放されたメモリを指し続けます。こうして「解放後使用」の脆弱性が利用され、攻撃者は、解放されたメモリアドレスから、読み込みや書き込みといった本来備わっている命令を利用することができます。実際のところ、脆弱性を利用するために呼び出される関数が異なる以外は、今回の脆弱性は「CVE-2015-0313」の脆弱性と同じです。

■トレンドマイクロの対策
なぜ、「Angler EK」に利用された新しいエクスプロイトコードが「CVE-2015-0359」を対象にしたと報告されたかは不明です。おそらく、「CVE-2015-0359」に対する修正プログラムが、今回の「解放後使用」の脆弱性も偶然に修復したからかもしれません。「競合状態」の脆弱性も関数「ByteArray::WriteBytes」を利用していることを考慮すると、その可能性が高いと思われます。

弊社は Adobe と協働し、この脆弱性の詳細を確認中です。

なお、今回確認された検体の SHA1 ハッシュ値は以下のとおりです。

  • E0C46A5BF1F98C0BF5F831E7AD1881502809DA93

協力執筆者:Brooks Li および Joseph C. Chen

参考記事:

 翻訳:品川 暁子(Core Technology Marketing, TrendLabs)