はじめに
2017 年 4 月の公開以来、CVE-2017-0199 は悪意のある Office ドキュメントで多用されてきました。攻撃者はこの脆弱性を利用して、RTF ドキュメント内に Ole2Link オブジェクトを含め、Microsoft Word が HTA アプリケーションを開いて解析するときにリモート コードを起動できます。
この最近のキャンペーンでは、Word のユーザ プロンプトの回避、あるいは別のメカニズムによるコード実行の開始を目的として、攻撃者は CVE-2017-0199 を以前のエクスプロイト CVE-2012-0158 と組み合わせていました。これは新しいコンセプトをテストするための試験的な実行にすぎなかったかもしれません。いずれにせよ、攻撃者は、攻撃の効果が想定よりもずっと小さくなる間違いを犯しました。
ペイロードの分析により、Ole2Link エクスプロイトが他のドキュメント タイプを起動する可能性が明らかになり、また、少なくとも 1 つの脅威アクターによる厳密なテスト手順が不足していることもわかりました。
攻撃者が既知の警告メカニズムを回避する方法を見つけ出そうとしていることは明らかです。開かれている文書に関するセキュリティ上の問題をユーザに警告させないためです。このブログの投稿では、単一の感染チェーンからこの 2 つのエクスプロイトを組み合わせた攻撃を試みて失敗した場合に何が起こるかを分析します。
この攻撃は失敗に終わりましたが、新たに武器として用いるファイル タイプを起動してユーザ プロンプトを回避する手段として、CVE-2017-0199 を使用しようとする攻撃者の実験の水準を示しています。この攻撃はあまり成果が出なかった実験に終わるかもしれませんが、まだ具体化されていない将来の攻撃の兆候にもなり得ます。
標準的な CVE-2017-0199 のエクスプロイト
CVE-2017-0199 を利用する一般的な攻撃は、悪意のある RTF ドキュメントを配布する E メール キャンペーンで構成されます。この脆弱性は Ole2Link が埋め込まれたオブジェクトを処理するコードに存在します。RTF ドキュメントに Ole2Link が含まれていると、Word 内で他のリモート ドキュメントを読み込むことが可能になります。
標準的な CVE-2017-0199 のフロー
リモートの OLE2Link が HTML アプリケーション ファイル(HTA ファイル タイプ)をポイントしている場合、脆弱性のある Word やワードパッドは、ユーザがリモート コンテンツを含めないように選択していても、このアプリケーションを解析して実行します。CVE-2017-0199 が利用されていると推測できる兆候は、ユーザに表示されるこの Word プロンプトです。
CVE-2017-0199 のエクスプロイト試行の前にユーザに表示される Word プロンプト
修正された CVE-2017-0199 のフロー
Talos チームが分析した修正済みエクスプロイトのフローでは、この攻撃の開始地点は悪意のある添付ファイルを含む電子メール メッセージでした。電子メールには、添付されたドキュメントを開いて読むようにユーザに仕向ける一般的なソーシャル エンジニアリングの手口が使用されていました。知らない「パートナー」から送られた添付ファイルを発注書と記すのは、大量配布されるマルウェアのソーシャル エンジニアリングとして非常に一般的な手口です。
修正された攻撃を実行する電子メール メッセージ
電子メール メッセージに添付されたドキュメントは、hxxp://multplelabs [dot] com/ema/order.doc でホストされているリモート ドキュメントへの Ole2Link を含む RTF ファイルです。この場合、攻撃のパケット キャプチャで観測されたリモート ドキュメントの MIME コンテンツ タイプは想定されるアプリケーション/hta ではなく、アプリケーション/msword でした。よって、攻撃者が何を達成しようとしているのか解明するために、もう少し詳しく調査したいと思いました。
最初に驚いたのは、CVE-2017-0199 のエクスプロイトでよく見られるプロンプトが表示される前に、分析に使用した脆弱性のあるバージョンの Word がクラッシュしたことです。Word はプロンプトを表示する代わりにダウンロードしたドキュメントの変換を開始してハングし、最終的にはメモリ アクセス障害でクラッシュしました。
プロンプトなしで Word がクラッシュ
このクラッシュは、CVE-2017-0199 を使用した最初のエクスプロイトの段階ではなく、CVE-2012-0158 を使用した 2 番目の段階で引き起こされました。ここで、MSComctlLib.ListViewCtrl.2 ActiveX コントロールに埋め込まれたシェルコードを見ていきます。これは CVE-2012-0158 の明らかな証拠となります。このシェルコードは、ROP チェーンから始まり、脆弱性が生じたときに実行を開始するシェルコードが後に続きます。シェルコードの第一段階は、ROP チェーンがシェルコードの残りの部分を含むメモリ ブロックに適切なアクセス許可を設定した後に実行されます。
CVE-2012-0158 の第一段階のシェルコード
この段階で、アプリケーションのクラッシュが引き起こされます。攻撃者は、確実な品質保証プロセスを備えていないか、もしくは自動生成された CVE-2012-0158 のエクスプロイトを CVE-2017-0199 と一緒に含めた場合に何が起きるのかを把握する技術的な専門知識がなかったようです。
シェルコードは複数の API アドレスの解決から開始します。ゼロから開始して次の開いているファイル ハンドルごとにハンドル数を 4 つずつ増分し、開いているファイルのハンドル数を総当たりすることで、開いているすべてのファイルを調査します。ハンドルが存在する場合、シェルコードはパラメーターとしてファイル ハンドルを引き受ける GetFileSize API を使用してファイル サイズを確認しようとします。ファイル サイズが予想される範囲内に一致する場合は、シェルコードがメモリ内にマップしてファイル タイプのチェックを実行します。
ファイルのサイズのチェックとファイル タイプの特定
このシェルコードは、見つかったファイルが RTF ファイルの場合に、すべての必要条件が満たされており、識別された RTF ファイルにはシェルコードの次の段階が含まれている、という誤った想定をします。シェルコードがファイル サイズとファイル タイプの要件を満たしていると想定すると、次の段階のシェルコード マーカーを検索するため、マップ済みのファイルの読み取りを開始します。今回のテストでは、元の CVE-2017-0199 のエクスプロイト ファイルがまだメモリ内に存在するので見つかることはありません。このファイルは、最初の段階のシェルコードが検索する条件をどちらも満たしています。CVE-2017-0199 のエクスプロイト ファイルが CVE-2012-0158 のドキュメントより前に開かれており、このファイルのハンドルの方が小さいため、シェルコードによって最初に読み取られます。
シェルコードの次の段階のマーカーを検索する第一段階のシェルコード
シェルコードは、ドキュメントの長さを超えた読み取りを正しく処理せずに、間違ったドキュメント内にある次の段階のマーカー 0xfefefefefeffffffff を検索します。このため、割り当てられたメモリ ブロックを超えてメモリ コンテンツを読み取ることで、最終的にメモリ保護エラーが発生します。
攻撃者がもう少し技術的に精通していたならば、この問題を認識し、リモート コンテンツをロードするプロンプトをエンドユーザに表示させることなく、この 2 つのエクスプロイトがうまく連携するように簡単に修正できたでしょう。
考えられる修正として、ファイル サイズの制限を少し厳しくする 1 バイトの修正で、元の CVE-2017-0199 のファイル サイズを除外することが挙げられます。もう 1 つの方法は、少しだけ複雑になりますが、RTF 内で次の段階のマーカーが見つからない状況を適切に処理して、ファイル サイズの条件を満たしている別の RTF ドキュメントが標的の Word プロセスですでに開かれていると想定することです。
大変興味深いことに、CVE-2012-0158 のエクスプロイトを含むドキュメント内のシェルコードは、他に開いている RTF ファイルがない場合は問題なく実行されるため、万全を期すために残りの部分を分析しました。
第二段階のシェルコード
第二段階のシェルコードはもう少し複雑で、ntdll.dll 内で必要な API 関数を見つけることから始めます。この API 関数を使用して、中断状態の svchost.exe のインスタンスを起動し、最終的に実行可能なペイロードを起動する最後の「ダウンロードおよび実行」のシェルコードの段階で元のエントリ ポイントを上書きします。
ntdll.dll の API を検索し、最後の段階を挿入して svchost.exe プロセスを再開
svchost.exe に挿入される最後のシェルコードの段階は、UrlDownloadToFile API を使用して、コマンド アンド コントロール(C&C)サーバから実行可能ファイルを name.exe というファイル名で一時ファイル フォルダにダウンロードし、最後のペイロードを起動する ShellExecute 関数を呼び出します。
ダウンロードと実行段階
ダウンロードされた実行可能なペイロードは、古い Ramnit バージョンをドロップするパック済みの VB ドロッパーですが、観測される C&C サーバへのトラフィックに基づいて、Lokibot も実行します。Ramnit は有名な、情報を盗む自己複製型のボットです。ユーザやセキュリティ製品からその存在を隠すためのルートキットも含まれており、すでに十分に解明されています。このマルウェアの詳細な分析は、このブログの投稿の範囲外です。Ramnit ファミリは、古いにもかかわらずいまだに Talos でよく遭遇するマルウェア ファミリです。このケースでの攻撃者の意図は Lokibot 攻撃を起動することだったかもしれませんが、分析の途中でサンプルが Ramnit のファイル感染コンポーネントによって感染していました。
multplelabs.com の DNS のアクティビティ
マルウェアと C&C サーバをホストするドメインは 2016 年 10 月に登録されていました。感染サイトの可能性があり、他のいくつかの Lokibot のキャンペーンで使用されたようです。このドメインの DNS のアクティビティには、2 回の目立った急上昇が見られますが、感染したシステムから C&C サーバへの通信の増加を示す新たなアクティビティがなかったため、おそらく失敗した 2 つのスパム キャンペーンを示しています。
DNS のアクティビティは、攻撃失敗の理由を解説する私達の調査結果を裏付けています。
まとめ
CVE-2017-0199 は、スパム キャンペーンで配布される悪意のあるドキュメントで最も多く使用される脆弱性のエクスプロイトの 1 つです。以前の調査からわかるように、CVE-2017-0199 は CVE-2012-0158 よりも攻撃者に人気があります。
このブログの投稿では、単一の感染経路からこの 2 つのエクスプロイトを組み合わせた攻撃を試みたときに何が起こるかを分析しています。このキャンペーンでは、攻撃者は意図した Ramnit ペイロードのダウンロードと実行が阻止される大きなミスを犯しました。
試行された組み合わせ攻撃の各段階
そもそもなぜ攻撃者が新しいエクスプロイトと古いエクスプロイトの組み合わせを使用したのか疑問が残ります。標的となるシステムにこのエクスプロイトのいずれかのパッチが適用されていれば、この組み合わせは実行されません。さらに、標的となるシステムが CVE-2012-0158 に対して脆弱であれば、攻撃者はこの脆弱性を標的とする単独のエクスプロイトを使用する方がはるかに簡単です。
考えられる仮定は、標的となるエンドユーザに疑いを抱かせる可能性のあるプロンプトの表示を Word で回避するために、この組み合せを使用したということです。別の可能性は、Word 文書の Ole2Link および HTA ファイルのダウンロードの組み合わせで起動する可能性がある行動検出システムを避けるために、攻撃者がこの組み合わせを利用したことです。
この攻撃は失敗に終わり、攻撃者によるテストや品質管理手順が不十分であった可能性を示しています。ただし、ユーザ プロンプトを回避する手段として CVE-2017-0199 を使用し、新たに武器として用いるファイル タイプを起動させようとする攻撃者の実験の水準を示しています。この攻撃はあまり成果が出なかった実験に終わるかもしれませんが、まだ具体化されていない将来の攻撃の兆候にもなり得ます。
カバレッジ
Advanced Malware Protection(AMP)は、これらの攻撃者によるマルウェアの実行を阻止するのに最適です。
CWS や WSA の Web スキャニングは、悪意のある Web サイトへのアクセスを阻止し、それらの攻撃に使用されたマルウェアを検出します。
電子メール セキュリティは、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。
高度なセキュリティを備えた NGFW、NGIPS、および Meraki MX などのネットワーク セキュリティ アプライアンスにより、今回の脅威に関する悪意のあるアクティビティを検出できます。
AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を組み込みます。
Umbrella は悪意のあるアクティビティに関連付けられているドメインの DNS 解決を防止します。
Stealthwatch は、ネットワーク スキャニング アクティビティ、ネットワーク伝達、および CnC インフラストラクチャへの接続を検出し、これらのアクティビティについて管理者にアラートを発行します。
IOC
ドキュメント
5ae2f13707ee38e4675ad1bc016b19875ee32312227103d6f202874d8543fc2e – CVE-2017-0199
6a84e5fd6c9b2c1685efc7ac8d763048913bad2e767b4958e7b40b4488bacf80 – CVE-2012-0158
実行可能ファイル
351aec22d926b4fb7efc7bafae9d1603962cadf0aed1e35b1ab4aad237723474
f34e5af97ccb3574f7d5343246138daf979bfd1f9c37590e9a41f6420ddb3bb6
43624bf57a9c7ec345d786355bb56ca9f76c226380302855c61277bdc490fdfe
d4fbca06989a074133a459c284d79e979293625262a59fbd8b91825dbfbe2a13
URL
hxxp://multplelabs[dot]com/ema/order.doc – CVE-2012-0158
hxxp://multplelabs[dot]com/ema/nextyl.exe – dropper
hxxp://multplelabs[dot]com/freem/50/fre.php – Lokibot C2
本稿は 2017年8月14日に Talos Group のブログに投稿された「When combining exploits for added effect goes wrong」の抄訳です。