Traps が Microsoft Office の数式エディタにおけるゼロデイ脆弱性 CVE-2018-0802 の悪用を阻止

By and

Category: Endpoint, Unit 42

Tags: , , ,

This post is also available in: English (英語)

概要

2017 年 11 月、Microsoft は数式エディタに含まれるリモートから悪用可能な脆弱性 (CVE-2017-11882) に手作業でパッチを適用しました。この数式エディタは文書に数学の方程式を記述できるようにするためのプログラムです。Unit 42 リサーチチームは、この脆弱性についての詳細な分析についてこちらのブログで説明しています。

これ以降も Microsoft は複数のセキュリティ ベンダから追加で報告を受けており、その報告によれば当該パッチ適用後も悪用可能な別の脆弱性が存在することがわかりました。Microsoft はこの別の脆弱性を CVE-2018-0802 として扱い、2018 年 1 月の月次セキュリティ更新プログラムでこの問題を修正しました。

この脆弱性は、FONT レコード内の長いフォント名をパースする際にスタックオーバーフローが発生する問題で、CVE-2017-11882 と類似しています。当該脆弱性を悪用すると、攻撃者はログオン中のユーザーのセキュリティコンテキストでコードを実行できるようになります。

本稿では、インターネット上で見つかったこの新しい FONT レコードの脆弱性を悪用する RTF ファイルについて説明します。最初の検体が見つかったのは 2018 年 1 月 3 日でした。つまり、Microsoft が修正プログラムを 2018 年 1 月 9 日に公開する前から攻撃者は CVE-2018-0802 をゼロデイ攻撃シナリオで活用していたことになります。

図 1 – 悪意のある検体で観測された攻撃フロー(図をクリックすると拡大します)
図 1 – 悪意のある検体で観測された攻撃フロー

図 1 は、悪意のある検体で観測された攻撃フローです。第一段階では、被害者が悪意のある RTF 文書を開きます。すると、当該文書が、埋め込みの「パッケージ」を使って、「Setup.zip」という名前の DLL をディスク上の「%TEMP%」ディレクトリ以下ににドロップします。この手法については McAfee のホワイトペーパーで説明されています。

第二段階では、この RTF ファイルに埋め込まれた 2 つの数式を EQNEDT32.exe (数式エディタ) がパースします。 1 つ目の数式は CVE-2017-11882 を悪用するためのもので、2 つ目は新しい Font の脆弱性 CVE-2018-0802 を悪用するためのものです。2 つの脆弱性が利用されているので、被害端末に両方の CVE に対応する修正プログラムが適用されている場合のみ、攻撃を防げることになります。

これら 2 つの数式のエクスプロイトにはシェルコードが含まれており、このシェルコードが第一段階でドロップされた DLL ファイル名を「%appdata%\Word\Startup\w.wll」に変更します。「%appdata%\Word\Startup」は、Microsoft Word 用プラグイン DLL を格納するための特別なディレクトリで、「winword.exe」は起動するつどこのディレクトリからプラグイン DLL を読み込みます。これによりマルウェアは永続性を確保できます。

「w.wll」は、「winword.exe」に読み込まれると、DLL 内に埋め込まれた本当のマルウェア ペイロードを「%programdata%\NetWork\tmp.exe」としてドロップし、実行します。

Traps がゼロデイの脅威を阻止する仕組み

Palo Alto Networks の Traps アドバンスト エンドポイント プロテクションは、マルウェアやエクスプロイトを多数の方法で阻止することで、こうした複雑な戦略をとる脅威からも保護することができます。Traps が導入された環境であれば、エクスプロイト防止機能によりまず EQNEDT32.exe 内での悪意のあるシェルコード実行が阻止されます。さらに、機械学習によるローカル分析機能により「%programdata%/NetWork/tmp.exe」の実行も阻止されます。 リサーチチームがインターネット上で観測した検体の中には、今回紹介した以外にも、「EQNEDT32.exe」経由でコマンドラインや PowerShell コマンドを実行させることで悪意のあるコードを実行させようとするものがありました。これらの手法も Traps の子プロセス実行制限機能で防止できます。

Traps がどのようにしてゼロデイ脆弱性や未知の脅威を防止するのかについての詳細情報はこちらを参照してください。