VBScript エンジンのメモリ解放後使用脆弱性「CVE-2018-8373」を利用する新しい攻撃を確認

トレンドマイクロは、2018 年 9 月 18 日、本ブログで 8 月 29 日に解説したメモリ解放後使用(Use After Free、UAF)の脆弱性「CVE-2018-8373」を利用する別の攻撃を確認しました。CVE-2018-8373 は、比較的新しいバージョンの Windows に搭載された Internet Explorer(IE)の VBScript エンジンに影響を与えます。Microsoft はすでに、2018 年 8 月の月例セキュリティ更新プログラムにおいて、CVE-2018-8373 を修正しているため、この脆弱性攻撃は、更新済みの IE に対して無効です。影響を受けるバージョンの詳細はこちらを参照してください。

前回確認された同じ脆弱性を利用するマルウェアは、シェルコードを実行するためにシステムコール「NtContinue」の「CONTEXT」構造体に細工します。新しく確認された検体は、代わりに、VBScript エンジンの「SafeMode」フラグを変更することにより、「Shell.Application」オブジェクトがスクリプトを実行するための権限を取得します。この脆弱性攻撃の実行手法は、脆弱性「CVE-2014-6332」および「CVE-2016-0189」に対する攻撃手法に類似しています。

シェルコードを実行するために「SafeMode」フラグを変更するコード

図 1:シェルコードを実行するために「SafeMode」フラグを変更するコード

実行ファイルをダウンロードおよび実行する PowerShell コード

図 2:実行ファイルをダウンロードおよび実行する PowerShell コード

■「SafeMode」フラグを変更して攻撃を実行

VBScript エンジンは、Shell.Application オブジェクトや Wscript.Shell オブジェクトを使用してスクリプトを実行する際、SafeMode フラグを確認し、実行可能かどうか判定します。もし VBScript エンジンがセーフモードでない場合、Shell.Application または Wscript.Shellオブジェクトは、シェルコードを直接実行することが可能です。

SafeMode フラグを確認するコード

図 3:SafeMode フラグを確認するコード

更新プログラムが適用されているサポート対象の IE では、この脆弱性攻撃は無効です。実際には、最新の IE(IE 11)の VBScript エンジンでは、 SafeMode フラグはすでに「COleScript+0x174」に存在しないため、更新プログラム未適用であってもこの攻撃が成功することはありません。各 Windows OS における最新バージョンの IE 以外は、2016 年 1 月以降サポート対象外となっていることに留意してください。

SafeMode フラグの位置

図 4:Windows 10 の SafeMode フラグの位置(左)
Windows 7 の SafeMode フラグの位置(右)
どちらも SafeMode フラグの位置が変わっている

■別の脆弱性を利用する攻撃コードも確認

CVE-2018-8373 を利用する攻撃コードが埋め込まれた Web サイトからは、VBScript エンジンの別の脆弱性「CVE-2018-8174」を利用する攻撃コードも確認されました。

同じ Web サイトにホストされていた別のファイルが脆弱性「CVE-2018-8174」を利用

図 5:同じ Web サイトにホストされていた別のファイルが脆弱性「CVE-2018-8174」を利用

■「CVE-2018-8373」を修正する更新プログラムの概要

Microsoft はすでに、2018 年 8 月の月例セキュリティ更新プログラムにおいて、CVE-2018-8373 を修正しています。

前回のブログ記事で解説したように、CVE-2018 8373 を利用する攻撃では、まず「VBScript!AccessArray」関数が配列要素のアドレスをスタックに格納します。次に、「VBScript!AssignVar」関数がスクリプト内の「Default Property Get」関数を呼び出し、配列の長さを変更します。これにより、「VBScript!AccessArray」関数によってスタックに格納されたアドレスがそのまま残っている状態で、対応する配列要素のメモリが開放され、メモリの解放後使用が発生します。

更新プログラム適用後は、「Vbscript!AssignVar」関数の前に現在の配列をロックする「SafeArrayLock」関数が追加され、「Default Property Get」関数によって配列の長さを変更することができないようになっています。

■侵入の痕跡(Indicator of Compromise、IoC)

「CVE-2018-8373」を利用する攻撃に関連する SHA256 値は以下の通りです。

  • 96bdf283db022ca1729bbde82976c79d289ec5e66c799b3816275e62e422eb50

関連する不正な URL は以下の通りです。

  • hxxp://www[.]myswcd[.]com/vol/m3[.]html
  • hxxp://www[.]myswcd[.]com/vol/m2[.]htm

参考記事:

翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)