CVE-2023-36884、CVE-2023-36584 を悪用する 2023 年 7 月のエクスプロイト チェーンの詳解

A pictorial representation of a vulnerability like CVE-2023-36884, CVE-2023-36584,. A laptop screen displays lines of text. A magnifying glass examining the screen has within it a warning icon.

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

概要

ウクライナの NATO 加盟を支持するグループをターゲットとした 2023 年 7 月のキャンペーンの分析中、私たちは Microsoft の Mark-of-the-Web (MotW) セキュリティ機能をバイパスする新たな脆弱性を発見しました。セキュリティ コミュニティは、このアクティビティを、Storm-0978 として知られる親ロシア派 APT グループ (RomCom バックドアの使用にちなんで RomCom グループとしても知られる) に帰属させています。このグループは、非常に複雑でよく開発されたエクスプロイト チェーンによってターゲットをマルウェアに感染させていましたが、このエクスプロイト チェーンには Microsoft Office のリモート コード実行 (RCE) の脆弱性 (CVE-2023-36884) が使われていました。

弊社の調査からは、MotW をバイパスできる、CVE-2023-36884 に関連した新たなエクスプロイト技術が判明しました。Microsoft から弊社チームにはバグ報奨金が授与され、調査中に発見されたこの新しい脆弱性に対しては CVE-2023-36584 (CVSS スコア 5) が割り当てられました。

これらの攻撃ルアー (おとり) は、ウクライナの NATO 加盟を議論する 2023 年 7 月の NATO 首脳会議出席者向けの論点を偽装した、兵器化された Microsoft Word 文書でした。本稿は同ファイルを調査し、これまで公に議論されていなかった攻撃のエクスプロイト チェーンに関する技術的洞察を提供します。

パロアルトネットワークスのお客様は、本稿で解説した脅威からの保護と緩和を受けています。Cortex XDRPrisma Cloud は同エクスプロイト チェーンをエクスプロイトの初期段階、エクスプロイト後の段階の両方で検出・防止します。Unit 42 インシデント レスポンス チームも、本稿で取り上げた脅威をはじめ、さまざまな脅威への個別対応を提供しています。

関連する Unit 42 のトピック CVE-2023-36884, CVE-2023-36584

目次

ルアーの概要
CVE-2023-36584 につながる技術分析
Word 文書の詳細
エクスプロイト チェーン 第 1 段階
Windows 検索ハンドラーの悪用
Windows 検索ハンドラー ファイルの再作成
Windows セキュリティ ゾーンとそのほかの問題
新たな MotW バイパス - CVE-2023-36584
技術 #1: サーバーサイド ZIP スワップ - メタデータ TOCTOU
技術 #2: サーバー サイドの遅延 - クローズ処理
技術 #3: サーバー サイドの遅延 - 読み取り処理
Microsoft セキュリティ更新プログラムによる CVE-2023-36884 への対応
エクスプロイト チェーンの継続
ActiveX のアタック サーフェス (攻撃対象領域)
コマンド実行のためのセキュリティ ゾーンの昇格
SmartScreen のバイパス
初期の回避策
結論
IoC (侵害指標)
追加リソース

ルアーの概要

このエクスプロイト チェーンは次のルアーから始まります。

ファイル名 Overview_of_UWCs_UkraineInNATO_campaign.docx
SHA256 ハッシュ値 a61b2eafcf39715031357df6b01e85e0d1ea2e8ee1dfec241b114e18f7a1163f

ウクライナの脅威状況を監視していた私たちのチームは、2023 年 7 月 3 日に VirusTotal に初めて提出された興味深い Microsoft Word 文書 (.docx ファイル) を観測しました。文書名は「Overview_of_UWCs_UkraineInNATO_campaign.docx」で、そのファイル名と内容から、ウクライナの NATO 加盟を議論する 2023 年 7 月の NATO 首脳会議の参加者を狙ったものであることがわかります。

セキュリティ コミュニティは、このアクティビティを、Storm-0978 として知られる親ロシア派 APT グループ (RomCom バックドアの使用にちなんで RomCom グループとしても知られる) に帰属させています。以下の図 1 は、この文書のスクリーンショットを示しています。

画像 1 は、悪意のある Word 文書のスクリーンショットです。黄色の警告リボンは、文書が保護されたビューではないことを読者に警告しています。[Enable Editing (編集を有効化)] というボタンが表示されています。Ukrainian World Congress のロゴが表示されています。テキストは英語とウクライナ語です。文書のヘッダーには「Talking points for UW sees Ukraine in NATO Campaign」とあります。本文はウクライナが何のために戦っているのかについて語っています。
図 1. 悪意のある Microsoft Word のおとり文書 (ルアー)
VirusTotal は同文書が次の URL でホストされていることを示しています。

hxxps://www.ukrainianworldcongress[.]info/sites/default/files/document/forms/2023/Overview_of_UWCs_UkraineInNATO_campaign.docx

上記のリンクは、メールの本文に .docx ファイルへのリンクを含む電子メールによって同文書が配布された可能性が高いことを示唆しています。文書の作成日とドメイン ukrainianworldcongress[.]info の登録日はどちらも 2023 年 6 月 26 日です。このタイミングからして、2023 年 7 月の NATO サミットに出席する組織や個人を対象に、.docx ファイルへのリンクを貼った電子メールベースのキャンペーンを行ったことが示唆されます。

このファイルが最初に VirusTotal に送信されたとき、62 ある AV エンジンのうち 27 のエンジンがこのファイルに悪意があると識別しました。このルアーが弊社顧客に送信された証拠は見つからなかったものの、これと関連する脆弱性のカバレッジを確実なものにするため、私たちは詳細分析を実施しました。

この調査から CVE-2023-36584 という新たな脆弱性が判明しました。本稿の以下のセクションで、詳細な技術分析を提供し、完全なエクスプロイト チェーンの各ステップを詳しく解説します。

CVE-2023-36584 につながる技術分析

調査は Overview_of_UWCs_UkraineInNATO_campaign.docx の精査から始め、つづいてエクスプロイト チェーンの残りのステップをさらに詳しく検証していきます。

Word 文書の詳細

Microsoft Office 文書は、犯罪者がマルウェアを配布するさいによく使う攻撃手法です。この脅威に対し、Microsoft は MotW というセキュリティ機能を実装しています。この機能は、信頼できない配布元からの Office 文書について、さまざまな機能を制限するものです。

Windows はこのタグのついたファイルを高リスクと識別します。MotW でタグ付けされたファイルは、潜在的に危険であることを示す SmartScreen プロンプトを生成します。

今回の .docx ファイルの場合、Word 文書に MotW のタグが付かなければエクスプロイトは成功し、保護ビューが無効になります。私たちはこの文書を調査し、CVE-2023-36884 を含む完全なエクスプロイト チェーンを探索しました。

CVE-2023-36884 がこの特定のルアーによってどのようにエクスプロイトされたかを理解するには、まず Microsoft Word の Open XML ファイル形式 (このケースでは MS-DOCX (.docx) ファイル) の実装を理解する必要があります。

MS-DOCX ファイルは圧縮された ZIP アーカイブです。このアーカイブのなかには仕様を定義するファイルが複数入っていて、これらのファイルを使って Word 文書が表示されます。このうちの 1 つが word/document.xml という XML ファイルです。これが MS-DOCX ファイルの中核となる XML コンポーネントで、このなかには文書のテキストと書式設定が入っています。

Microsoft Word で MS-DOCX ファイルを表示すると、文書のコンテンツのほとんどは word/document.xml によってインポートされます。

今回の .docx ルアーの場合、word/document.xml は altChunk (インポートされた外部コンテンツのアンカーとも呼ばれる) を使ってコンテンツをインポートします (図 2)。

画像 2 は、word document.XML のスクリーンショットのスニペットです。この ID は AltChunkId5 です。
図 2. word/document.xmlからのスニペット

この altChunk 要素は、リッチ テキスト フォーマット (RTF) のような別のフォーマットを使うコンテンツをインポートできます。図 2 が示すように、この .docx ファイルの word/document.xml には、altChunk と呼ばれる要素があります。この要素が、識別子 AltChunkId5 を使い、外部コンテンツとのリレーションシップ (r) を示しています。 この識別子は word/_rels/document.xml.rels にあるリレーションシップ ファイルで定義されています。

画像 3 は、タイプ ターゲットと Word の XML.rels の識別子の間のリレーションシップを宣言するコードのスクリーンショットです。
図 3. word/_rels/document.xml.rels からのスニペット

図 3 に示した document.xml.rels のスニペットは、インポートされたターゲットを word/afchunk.rtf ファイルと識別しています。

この RTF ファイル afchunk.rtf には、2 つの悪意のある Object Linking and Embedding (OLE) オブジェクトが含まれています。最初の OLE オブジェクトは、objautlink RTF コントロール ワードで設定された OLE autolink タイプを使用します。objautlink コントロール ワードの後ろの objupdate コントロール ワードは、オブジェクトの表示前にオブジェクトを更新させます (図 4)。

画像 4 は、オブジェクトを強制更新するコントロール ワードを含むコードのスクリーンショットです。赤の下線が引かれています。
図 4. word/afchunk.rtf からの objautlink のスニペット

図 4 に示すように、このオブジェクト クラスは Word.Document.8 として定義され、そのデータはヘッダーに LinkedObject 構造体を含んでいて、その後ろには 16 進文字を表す ASCII テキストが続いています。

私たちは Didier Steven 氏の rtfdump.py ツールを使って、さらに afchunk.rtf を検査しました。下の図 5 は、先に図 4 で示した objautlink スニペットの 16 進数 (hex) のアウトプットを示したものです。このアウトプットからこの LinkedObject 構造体をより明確に確認できます。

画像 5 は、最初の悪意のある OLE オブジェクトの Python コード出力のスクリーンショットです。紫色で強調表示されているのは、フォーマット ID を持つ OLEVersion です。赤で強調表示されているのはクラス名です。緑色で強調表示されているのはトピック名です。
図 5. rtfdump.py による最初の悪意のある OLE オブジェクトのアウトプット

この 16 進ダンプからは、\\104.234.239[.]26\share1\MSHTML_C7\file001.url というサーバー メッセンジャー ブロック (SMB) プロトコルを使う、悪意のある URL が判明します。

rtfdump.py を使って afchunk.rtf を調べたところ、xmlfile クラスを使う別の悪意のある OLE オブジェクトが見つかりました。この OLE オブジェクトのヘッダーには、EmbeddedObject 構造体が含まれていました。この埋め込みオブジェクトは、URLMoniker を含む複合文書で、hxxp://74.50.94[.]156/MSHTML_C7/start.xml という URL から XML ファイルをロードします (図 6 に青で示した部分)。

画像 6 は、2 番目の悪意のある OLE オブジェクトの Python コードによるアウトプットのスクリーンショットです。赤で強調表示されているのは、埋め込みオブジェクトです。紫色で強調表示されているのは、複合文書のマジック バイトです。緑色で強調表示されているのは、URLMoniker の GUID です。青色で強調表示されているのは URL です。
図 6. rtfdump.pyによる 2 つめの悪意のある OLE オブジェクトのアウトプット

エクスプロイト チェーン 第 1 段階

このエクスプロイト チェーンに関する初期調査の結果、2023 年 7 月 12 日 に @zcracga 氏が以下のフローチャートを作成し、@r00tbsd 氏がこれを共有しました (図 7)。このフローチャートは、このエクスプロイト チェーンの解説で通るさまざまな段階の視覚化に便利です。

画像 7 はエクスプロイト チェーンのフローチャートです。リモートでホストされている OOXML へのリンクから始まります。多くのレイヤーを経て、最終的にダウンローダーの VBScript が取得されるまで続きます。
図 7. エクスプロイト チェーンのフローチャート。出典: @r00tbsd 氏による投稿 (作成は @zcracga 氏)

私たちが最初に関心を持ったのは、afchunk.rtf 内の悪意のある OLE オブジェクトのもつ 2 つの URL です。前述のように、これらの OLE オブジェクトは、以下の URL からのコンテンツを要求します。

  • \\104.234.239[.]26\share1\MSHTML_C7\file001.url
  • hxxp://74.50.94[.]156/MSHTML_C7/start.xml

Windows クライアントが SMB サーバーに接続すると、このクライアントは認証のために Windows NT LAN Manager (NTLM) のクレデンシャル (資格情報) を送信します。つまり、被害ホストが \\104.234.239[.]26\share1\MSHTML_C7\file001.url の URL にアクセスすると、被害者の NTLM クレデンシャルがホスト名、ユーザー名とともに攻撃者の制御下にある SMB サーバーに漏えいします。収集された情報は、後の攻撃チェーンで使われます。

図 8 は file001.url 内に埋め込まれた HTML コードを示しています。

画像 8 は、file001.url に含まれる HTML コードのスクリーンショットです。
図 8. file001.url からのスニペット

file001.url を調べると、UName 変数には被害者のユーザー名が含まれています。これは、攻撃者が制御する SMB サーバーが、被害者の漏えいした NTLM クレデンシャルから集めたユーザー名です。図 8 に示した変数 d が空でない場合、エクスプロイト チェーンはユーザー名を攻撃者の渡す値と連結します。連結された結果は、file001.zip という名前のファイルに含まれる 2222.chm という CHM ファイルへのパスの作成に使われます。

エクスプロイト チェーンのこの段階では、2222.chm は存在していません。あるいはこれは、攻撃者が使うほかのエクスプロイトの一部なのかもしれません。file001.url の詳しい動作は 2222.chm と密接に関連しているため後で説明します。

afchunk.rtf の 2 番目の悪意のある OLE オブジェクトは、hxxp://74.50.94[.]156/MSHTML_C7/start.xml からファイルを取得します。この start.xml ファイルには、同じサーバーとディレクトリー パスから RFile.asp という名前の別のファイルをロードするための iframe が含まれています。以下の図 9 は、RFile.asp を参照する start.xml の iframe スニペットを示しています。

画像 9 はコード スニペットのスクリーンショットです。これは iframe の開始タグと終了タグで、RFile.asp が含まれています。
図 9. start.xml からのスニペット

RFile.asp は以下のように定義されたその攻撃に固有のパスを持つ別のファイルをサーバー上にロードする役割を担っています。

  • file[:]//104.234.239[.]26/share1/MSHTML_C7/1/<ip>_<id>_file001.htm?d=<ip>_<id>_

このパスは、<ip> という被害者のグローバル IP アドレスと、5 桁の識別子 <id> から組み立てられます。私たちは、このファイルを file001.htm として参照します。

画像 10 は、iframe の開始タグと終了タグを含む HTML コードのスクリーンショットです。iframe にはソース ファイルが含まれています。
図 10. RFile.asp からのスニペット

Windows 検索ハンドラーの悪用

file001.htm の主な役割は JavaScript の実行です (図 11 のコード スニペット参照)。

画像 11 は、多くの関数と timeout コマンドを含むコードのスクリーンショットです。
図 11. file001.htm からのスニペット

file001.htm の JavaScript は iframe を使ってファイルを複数ロードします。この JavaScript はまず、被害者の IP アドレスと、file001.search-ms という文字列で終わる 5 桁の識別子からなるファイル名で、保存された検索ファイルをロードします。私たちはこのファイルをファイル名の最後の部分である file001.search-ms として参照します。

この後、URL に .zip_k* という文字列を使う 3 つの HTTP リクエストが続きます。見たところこの動作には、タイミング処理ないし no-op 処理以外の価値はないようです。

最後に、MSHTML が file001.search-ms を再ロードしてから redir_obj.htm をロードします。

何を意図してのことなのかがすぐにはわからないので、これらのリクエスト順序は目を引きます。関連するネットワーク トラフィック例からのタイムスタンプに基づいて、私たちはこのイベント順序が、.zip_k*ファイルを遅延メカニズムとして使うことで、サーバー サイドの処理を通じたバイパスを達成したものと推測しました。図 12 は、Wireshark でフィルタリングされたトラフィックのパケット キャプチャ (pcap) を示しており、HTTP GET リクエストの 1 つとその HTTP 応答の間の 2 秒の遅延をハイライトしています。

画像 12 はある表のスクリーンショットです。列のタイトルは、Time (時間)、Source (送信元)、Destination (宛先)、Protocol (プロトコル)、Length (長さ)、および Info (情報) です。赤い四角形内で強調表示されているのは、行 5 と行 6 のタイムスタンプです。
図 12. zip_k.asp を使ったリクエストに対するレスポンスの遅延。出典: VirusTotal

redir_obj.htm というファイルを調べていたさい、私たちは以下の図 13 に示したコード スニペットを見つけました。このコードは、最初の SMB 接続で取得した漏えい済みのホスト名とユーザー名をそれぞれ CompNameUName という変数として使うローカル パスからファイルをロードします。これが file001.zip ファイルに含まれている 1111.htm という HTML ファイルを開くのに使われます。

画像 13 は、HTML ファイルを開くために使われるコード スニペットのスクリーンショットです。
図 13. redir_obj.htm からのスニペット

Windows 検索ハンドラー ファイルの再作成

私たちは Windows ファイル エクスプローラーを使い、.search-ms というファイル拡張子を指定して、空の保存済み検索ファイルを作成しました。その目的は、2222.chm を含む ZIP ファイルの展開場所をコントロールして、このエクスプロイト チェーンがどのように機能するかを示すことです。私たちはファイル エクスプローラーで検索を開始し、その結果を保存しました。これにより .search-ms ファイルが生成されました。この保存された検索ファイルを空のテンプレートとして使えば、このエクスプロイト チェーンが使う検索ハンドラー ファイルの動作を再現できます。

Windows システム ファイルの Windows.Storage.Search.dll.search-ms ファイルを処理します。図 11 に示した JavaScript の iframe が redir_obj.htm ファイルをロードしますが、この redir_obj.htm ファイル内で指定したディレクトリーに ZIP ファイルをうまく展開するには、いくつか変更を加えてやる必要があります。

まず、include 要素はネットワーク パスとしてローカル パスを含む必要がありますし、attributes="128" という変数として実装した FILE_ATTRIBUTE_NORMAL を使う必要があります (図 14)。

画像 14 は、zip ファイルの展開をトリガーするコート スニペットのスクリーンショットです。
図 14. 基本の .search-ms ファイルを変更して ZIP の展開をトリガー

次に、autoListFlags 属性は、下位から 2 番目のビットをオンにする必要があります。これは以下の図 15 に示した方法で実装されます。これにより、ZIP アーカイブの内容を含む完全な検索が行われます。

画像 15 は、zip アーカイブ内での検索を可能にするコードのスクリーンショットです。
図 15. Windows.Storage.Search.dll でのサンプルの .search-ms の処理

この時点で .search-ms ファイルを処理すると、ターゲット マシン上の次のパスにディレクトリーが作成されます。

  • C:\Users\[USERNAME]\AppData\Local\Temp\[Temp1_zip_filename]

その後、ZIP ファイルの内容がこのディレクトリーに展開されます。

ファイル .search-ms が、以前に SMB から漏えいしたホスト情報に基づいて、ZIP ファイルの格納と内容の展開を処理します。

私たちのケースでは結果として、ZIP ファイルから 1111.htm2222.chm という 2 つのファイルが展開されたことが確認されました。

これと同様の動作は、Office に存在する過去の RCE 脆弱性のエクスプロイト (CVE-2021-40444) でも観測されました。この攻撃は、攻撃者が Microsoft Compressed Archive (CAB) におけるパス トラバーサル展開の不具合をエクスプロイトし、マシン上の予測可能なパスに HTML ファイルを展開するという同様の目的を達成しうるものでした。

今回の 1111.htm ファイル、2222.chm ファイルの検討に入る前に、まず Windows のセキュリティ ゾーンについて理解しておきましょう。

Windows セキュリティ ゾーンとそのほかの問題

Windows セキュリティゾーン (「Internet Explorer セキュリティゾーン」、「URL セキュリティゾーン」の名前でも知られる) とは、Microsoft がさまざまなソースから発信されたファイルのパーミッションを決定するのに使うメカニズムです。通常、インターネットから取得したファイルは「インターネット ゾーン」からのものとして識別され、アクセス許可が制限されるように MotW のタグが付けられます。

このデータは対象ファイル内で Zone.Identifier という名前のついた代替データストリーム (ADS) に格納されており、ファイルのセキュリティ ゾーンはこれを使って示されます。「インターネット ゾーン」からのファイルは ZoneId の値が 3 (セキュリティゾーン 3) になります。

残りのエクスプロイト チェーンを成功させるには、1111.htm ファイルと 2222.chmファイルの両方の Zone.Identifier ADS で ZoneId 値が 1 と識別されねばなりません。ところがここで問題が発生します。ZIP のコンテンツはリモート パスからダウンロードされ、.search-ms によって展開されているので、ZoneId の値は 3 になり、このコンテンツには自動的に MotW のタグが付けられてしまいます。

ほかにも 2 つ、エクスプロイト成功のために対処すべき問題があります。

  • 問題 1: .search-ms を使った Windows 検索が完了すると、[Temp1_zip_filename] ディレクトリーが削除されてしまう。これにより、一時ディレクトリー内にファイルをロードするさい競合状態が発生する。
  • 問題 2: デフォルトでは Windows は CHM ファイルの内容を検索しない。今回、このエクスプロイト チェーンの一部として 2222.chm ファイルが必要だが Windows Search の既定の設定を使うとこのファイルは ZIP アーカイブから展開されない。

新たな MotW バイパス - CVE-2023-36584

CVE-2023-36884 を使ったこのエクスプロイト チェーンの分析中、弊社チームは、別のエクスプロイト ベクトルを発見しました。これには Microsoft により CVE-2023-36584 が割り当てられ、私たちはバグ報奨金を授与されました。

Windows Search は、検索中に ZIP アーカイブ内のすべてのファイルを反復処理します。Windows Search は、各ファイルのファイル拡張子をチェックして、その内容も検索する必要があるかどうかを判断します。その場合、Windows Search はファイルを一時ディレクトリーに書き込み、そこに MotW を追加します。

この実装は競合状態発生の可能性をはらんでいます。展開されたファイルをディスクに書き込んでから、それを MotW タグでマーキングするまでには短いタイムラグがあります。このタイムラグ中に Windows Search を遅延させれば、競合状態が解消され、結果的に MotW をバイパスできるようになります。

CVE-2022-41049 をエクスプロイトする過去の技術では、ZIP アーカイブ内のファイルに読み取り専用属性を追加することで MotW を回避していました。こうすれば Zone.Identifier ADS への変更を回避でき、展開されたファイルに MotW タグをマーキングできないようになります。この技術が私たちにインスピレーションを与え、MotW バイパスの発見につながりました。

技術 #1: サーバー サイドの ZIP スワップ - メタデータ TOCTOU

サーバー サイドでの処理により、これらの問題を解決できます。私たちは、ZIP アーカイブがリモート サーバーからダウンロードされるさいに悪用しうる Time-Of-Check to Time-Of-Use (TOCTOU: チェックの時間から使用の時間まで) という脆弱性を見つけました。

Windows はシステムファイル zipfldr.dll を使って ZIP アーカイブのコンテンツを展開します。この Windows DLL ファイルは、ZIP アーカイブのコンテンツを展開し、ディスクに保存しつつ、ZIP ファイルのヘッダーを読み取ってデータをメモリーにキャッシュしています。この zipfldr.dll は API を公開しているのですが、この API を使えば、ZIP アーカイブ内のファイル インデックスを指定することで、対象ファイルを展開できます。

zipfldr.dll を使って ZIP アーカイブのコンテンツを展開するさいは、展開されるファイルのヘッダーが、キャッシュされたメモリーから読み取られます。これを利用すれば、展開されるファイルが MotW を受信できないようにするシナリオを作りだせます。

ファイル ヘッダーの読み取り後、zipfldr.dll による展開の前に、リモート サーバー上の ZIP ファイルを別の名前のファイルを格納する ZIP ファイルに置き換えてやれば、MotW は書き込まれなくなります。

この技術が機能する理由は、urlmon.dll が、最初に読み取ったファイル パスを使い、メモリーにキャッシュされた ZIP ヘッダーから MotW を書き込むためです。これにより、対象ファイルへの MotW 書き込みをバイパスできるようになります。

この技術は、CVE-2023-36884 のエクスプロイトに関する前述の 2 つの問題を解決してくれます。ほかの方法だと展開に失敗する .chm ファイルがうまく展開されますし、ファイルはすぐには削除されません。

以下の図 16 は、Process Monitor (procmon) というツールで、2222.txt という名前の代替ファイルを作成しようとして失敗したようすを示したものです。この状態になれば、保存しておいた 2222.chm に対する MotW タグの付与を回避できます。

画像 16 は、TOCTOU 脆弱性を使った MOTW バイパスのスクリーンショットです。赤い四角形で強調表示されているのは、WriteFiles、CloseFiles、SetBasicInformationFile の行です。
図 16. TOCTOU 脆弱性を使った MotW バイパスのデモンストレーション

私たちには、これが攻撃者が元のエクスプロイト チェーンで使った技術とまったく同じものであると確認することはできません。ですが、VirusTotal が最初のルアー .docx をサンドボックス分析したさいの振る舞いログを確認すると、1111.txt という名前のファイルが作成されていることがわかります。これば 1111.htm というファイル名を反映した代替ファイル名である可能性があり、前項の技術 #1 で論じたものと同じ手法が使われた可能性があります。

技術 #2: サーバー サイドの遅延 - クローズ処理

最初の技術の発見で追加調査の余地が生まれ、それが MotW の書き込みを大幅に遅らせうる 2 つの追加技術の発見につながりました。このシナリオでは MotW 属性の書き込みが阻止され、セキュリティ ゾーン 1 の別スレッドからのファイル実行が可能になります。

ZIP アーカイブからのファイル展開後かつ Zone.Identifier ADS への MotW 書き込み前に、攻撃者の制御する SMB サーバーからのタイミング遅延を挟むことが可能です。それができるのは SMB2 プロトコルのクローズ処理のおかげです。このクローズ処理は、SMB ベースのファイル転送を終了させるクローズ リクエストクローズ レスポンスで構成されています。

クライアントは、転送されたファイルから全データを受信すると、SMB クローズ リクエストをサーバーに送り返して SMB クローズ レスポンスを待ちます。ファイルの転送は終わっていますが、クライアントがクローズ レスポンスを受信するまで転送処理は完了しません。これは同期処理なので、長時間遅延する場合があります。

下図 17 の procmon のリストは、111.222.111[.]20 の SMB サーバーが servised.zip というファイルを転送後、次の処理までに 30 秒遅延しているようすを示しています。これは、クローズ リクエストとクローズ レスポンスの間に 30 秒の遅延があることを示します。

この 30 秒という時間帯において、1111.htm ファイルは MotW が書き込まれていないセキュリティ ゾーン 1 のファイルです。30 秒後、クローズ レスポンスがようやく送信されると処理が続行され、MotW が 1111.htm に書き込まれます。

画像 17 は、MOTW をバイパスする遅延クローズのスクリーンショットです。赤い四角形で強調表示されているのは、CloseFile 行と CreateFile 行です。
図 17. 遅延クローズを使った MotW バイパスのデモンストレーション

技術 #3: サーバー サイドの遅延 - 読み取り処理

ZIP アーカイブから大きなファイルを転送する場合、Windows はリモート共有からファイルの一部を読み取り、そのデータをディスク上のローカル ファイルに追記してから、ファイルがディスクに完全に書き込まれるまでの間、リモート共有から追加部分を読み取ります。ファイルの最後にランダムなデータを追加して使用可能な状態を維持してやれば、SMB サーバーからのファイルの書き込みを遅延させ、Windows がファイルに MotW を付与するまでの時間を稼げます。このファイルは読み取りと書き込みを行う dwShareMode で開かれているので、書き込み処理中、このファイルを利用できます。

そこで私たちは処理を 10 秒遅延させてこの理論をテストしてみました (図 18)。

画像 18 は、MOTW バイパスの読み取り遅延のスクリーンショットです。赤い四角形で強調表示されているのは、ReadFile 行です。
図 18. 読み取り遅延を使った MotW バイパスのデモンストレーション

Microsoft セキュリティ更新プログラムによる CVE-2023-36884 への対応

このエクスプロイト チェーンを開発した攻撃者は、SMB ファイルの転送中に使われる一時保存用のローカル ファイル パスが予測可能であることを知っていました。ですが、Microsoft による 2023 年 8 月のセキュリティ更新の後は、Will Dorman 氏をはじめとするリサーチャーが、一時保存されたローカル ファイル名に Universally Unique Identifier (UUID) が追加されてパスがランダムになったことを報告しています。私たちもそれを確認しました (図 19)。

画像 19 は、Microsoft の 2023 年 8 月のセキュリティ更新後に一時保存されたローカル ファイル パスのスクリーンショットです。行には、ファイルの作成、クエリー、基本情報、すべての情報のクエリーなどが含まれます。
図 19. Microsoft の 2023 年 8 月のセキュリティ更新後の一時保存用ローカル ファイル パス

上の図 19 に示すように、私たちの検証中に一時保存されたファイルには、UUID 文字列の 90be3adb-6ec5-4f3f-bdd8-1e22ee6c326c が、一時保存用ローカル ファイルのディレクトリー パスに含まれていました。

ZIP アーカイブの SMB ファイル転送処理中、zipfldr.dllCTempFileNameArray::_TryCreatingInPath を呼び出す CTempFileNameArray::GetTempLocation 関数を呼び出して一時フォルダーを作成します。

BinDiff を使って更新プログラムが適用されたバージョンのzipfldr.dll の変更点を確認したところ、CTempFileNameArray::_TryCreatingInPath 関数に目を引く新たなコードブロックが見つかりました (図 20)。

画像 20 は、UuIDCreate を呼び出すコードのブロックです。
図 20. UuidCreate の呼び出し

Microsoft は UuidCreate の呼び出しを追加していて、パスが新しい UUID から作られていなければ、ZIP アーカイブからのコンテンツ展開は失敗します。

更新プログラム適用バージョンの zipfldr.dll のもう 1 つ興味深いアップデートが、ExtractZipToFile 関数で見つかりました。ファイル展開後に新たなコードが追加されていて、これがファイル書き込み直後に MotW を追加しています。SetFileAttributes が失敗した場合、そのファイルは削除されます (図 21)。

画像 21 は、2 つのコード ブロックのスクリーンショットです。これは DeleteFileW の呼び出しです。
図 21. DeleteFileW の呼び出し

エクスプロイト チェーンの継続

Microsoft の 2023 年 8 月のセキュリティ更新プログラムにより、このエクスプロイト チェーンは緩和されましたが、このエクスプロイト チェーンのほかのステップは修正されないままでした。

ActiveX のアタック サーフェス (攻撃対象領域)

セキュリティ ゾーン 1 でファイルを実行すると、ActiveX コントロールに対するポリシーがより寛容になり、ActiveX のアタック サーフェス (攻撃対象領域) が広がります。これにより、悪意のあるコードの実行に悪用されうる、古い ActiveX コードの実行が可能になります。

ActiveX のアタック サーフェスが広がれば、このエクスプロイト チェーンで次のステップをトリガー可能です。以下の図 22 は、1111.htm からのコード スニペットを示していますが、これが次のステップにつながります。

画像 22 は、Web ブラウザー コントロール内で 1111.htm がリロードされるコード スニペットのスクリーンショットです。
図 22. WebBrowser コントロール内での 1111.htm のリロード

この 1111.htm のコードは非表示のポップアップを 1 つ作成し、その中で ActiveX の WebBrowser コントロールを実行します。この WebBrowser コントロールがラッパーとなり、Windows ベースのアプリケーション内での Web ブラウジング機能が可能になります。開発者はよく、この ActiveX コントロールを使って HTML ビューアーをアプリケーションに埋め込んでいます。

コマンド実行のためのセキュリティ ゾーンの昇格

セキュリティ ゾーン 1 だと MotW の回避や ActiveX のアタック サーフェスの拡大が可能になりますが、ファイルをセキュリティ ゾーン 0 に昇格すればコマンド実行が可能になります。セキュリティ ゾーン 0 としてタグ付けされたファイルは「ローカル マシン」ゾーンのファイルになります。「ローカル マシン」ゾーンは最も信頼されたゾーンで、許可されうる最大のアクセス権限を与えられます。

この段階で、この WebBrowser コントロールは、ゾーン 1 にあるネットワーク パスから、同じページのローカル パスにページをリダイレクトします。ファイル 1111.htm はローカル パスからロードされたので、セキュリティ ゾーン 0 で実行されます。

次に 1111.htmms-its を呼び出して 2222.chm をロードします (図 23)。

画像 23 は、1111.htm によって 222.chm に読み込まれたコードのスクリーンショットです。
図 23. 1111.htm2222.chm をロード

Windows では、この ms-its ハンドラーを使って Microsoft Compiled HTML Help (CHM) ファイルを表示しています。この機能は itss.dll というモジュールで実装されていて、それが展開された 2222.chm ファイルをロードします。

以下の図 24 は、HTML Help Workshop2222.chm ファイルを閲覧してそのコンテンツを表示させたものです。

画像 24 は、HTML Help Workshop プログラムのスクリーンショットです。Log1 には 2222.chm の内容が表示されています。これには、コンポーネントのパス、コンパイルされたバージョン、バイト サイズなどの情報が含まれています。
図 24. 2222.chm のコンテンツを HTML Help Workshop で表示したところ

この CHM ファイルには file1.htm という名前のファイルが含まれていて、これが file1.mht にリダイレクトされます (この処理は Microsoft のインターネット メッセージング API の一部である inetcomm.dll が行う)。次に、file1.mhtshowHelp メソッドを使って fileH.htm をロードします。そして fileH.htmfileH.mht にリダイレクトされ、最終的に fileH.mht は図 25 に示したスクリプトを実行します。

画像 25 は、スクリーンショットに含まれるファイルを開く HTML コード スニペットです。この図はスクリプトを実行する URL を表示しています。
図 25. fileH.mht のスニペット - コードが open 関数を呼び出す

図 25 の fileH.mht のコード スニペットは、window.open メソッドを使って ShellExecuteExW API を呼び出し、以下の場所にあるファイルを開きます。

  • file[:]//104.234.239[.]26/share1/MSHTML_C7/ex001.url

SmartScreen のバイパス

図 25 の ex001.url という名前のインターネット ショートカット (URL) ファイルは、file[:]/104.234.239[.]26/share1/MSHTML_C7/ex001.zip/file001.vbs を指しています。

ダウンロードされた file001.vbs ファイルには、SmartScreen の保護をバイパスするように設計された、悪意のある Visual Basic スクリプト (VBS) が含まれています。

URL ファイルがリモートの UNC パス を指している場合、その URL ファイルはそのパスから返されたコンテンツをダウンロードして実行します。このコンテンツを実行すると ShellExecuteW API が呼び出され、それにより CheckSmartScreen 関数がトリガーされて、ユーザーに確認を求めるプロンプトが表示されます (図 26)。

画像 26 は、ウィンドウのセキュリティ警告のスクリーンショットです。Open file security warning. We can't verify who created this file. Are you sure you want to open this file?A warning icon. This file is in a location outside your local net work. Files from locations you don't recognize can harm your PC. Only open this file if you trust the location. VBS スクリプトのファイル名tファイルの種類が表示されています。From (送信元)と、開くかキャンセルするかのオプションも表示されています。
図 26. SmartScreen の警告

ただし、これらのファイルは ZIP アーカイブ内に存在していることから、すこし違った動作フローになります。エクスプロイト チェーンのなかで file001.vbs というファイルがダウンロードされ、MotW が付与されてユーザーのローカル一時ディレクトリーに展開されますが、ポップアップ警告は表示されず、これがただちに実行されます。このようすを以下の図 27 の procmon によるリストに示します。

画像 27 は、WScript.exe が起動したさいのスクリーンショットです。この起動をしめす行が青で強調表示されています。
図 27. Wscript.exe はただちに起動され SmartScreen をうまくバイパスできる

上の図 27 が示すように、ファイル ex001.zip はリモート ディレクトリーから取得され、file001.vbs がこの ZIP アーカイブから展開されます。プロセス イベント リストの後半には、wscript.exe の Process Create エントリーが見つかります (青でハイライト表示) が、これが VBS ファイルを実行しています。

このバイパスも Will Dormann 氏が X (旧 Twitter) で解説していたものです。これはリグレッション バグの可能性があります。というのも、Microsoft は 2016 年に似たような問題を修正済みだからです

初期の回避策

CVE-2023-36884 の脆弱性の修正前に Microsoft は以下の緩和策を公開していました。

クロス プロトコル ナビゲーションを無効にすると、URI スキーム間のナビゲーションはできなくなります。この緩和策は、先の 図 9 と図 10 で述べた RFile.asp からのリダイレクトを防止します。

結論

悪意のある .docx ファイルから始まった、ウクライナの NATO 加盟を支持するグループを狙った 2023 年 7 月のキャンペーンの分析からは、当初報告されていたよりも複雑なエクスプロイトが明らかになりました。私たちの分析からは、このエクスプロイト チェーンが 20 ステップを超えるものであることが明らかになりました。このなかでは、CVE-2023-36884 のほか、Microsoft Office や Windows の保護をバイパスする追加の脆弱性も使われていました。

Microsoft から弊社チームにはバグ報奨金が授与され、調査で発見されたこの新しい脆弱性に対して CVE-2023-36584 が割り当てられました。

パロアルトネットワークスのお客様は、以下の方法でこれらのエクスプロイトに対する保護と緩和を受けています。

  • Cortex XDRをご利用のお客様は、これらのエクスプロイトからの保護を、その発見以前から受けていました。
  • Prisma Cloud は、CVE-2023-36884CVE-2023-36584 のエクスプロイトを含むクラウド アプリケーションのデプロイを検出・防止できます。これらのエクスプロイトからの保護はデフォルトで有効です。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてご連絡いただくか、下記の電話番号までお問い合わせください (ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル:866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200

パロアルトネットワークスのお客様がこのエクスプロイト チェーンからどのように保護を受けているかについての詳細は、CVE-2023-36884 に関する以前の記事を参照してください。

パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。

IoC (侵害指標)

2023 年 7 月のキャンペーンのルアー Overview_of_UWCs_UkraineInNATO_campaign.docx と関連する以下のファイルを VirusTotal に投稿済みです。これらのファイルの一部の SHA256 ハッシュは、感染ごとに異なることにご注意ください。

読み取り: SHA256 ハッシュ - ファイル名

  • a61b2eafcf39715031357df6b01e85e0d1ea2e8ee1dfec241b114e18f7a1163f - Overview_of_UWCs_UkraineInNATO_campaign.docx
  • 0896e7c5433b2d426a30a43e7f4ef351fa870be8bd336952a0655392f8f8052d - word/document.xml
  • b5731baa7920b4649add429fc4a025142ce6a1e1adacb45850470ca4562d5e37 - word/_rels/document.xml.rels
  • e7cfeb023c3160a7366f209a16a6f6ea5a0bc9a3ddc16c6cba758114dfe6b539 - afchunk.rtf
  • 3d0dae359325e8e96cf46459c38d086279865457379bd6380523727db350de43 - file001.url
  • 48142dc7fe28a5d8a849fff11cb8206912e8382314a2f05e72abad0978b27e90 - start.xml
  • bfe3ebcc92a4a7d294b63ce0d7eba6313980d982709a27b337abe32651b63856 - file001.zip
  • c94e2bfd4e2241fed42113049c84ac333fcff340cc202afe8926f8e885d5fca3 - 2222.chm
  • f08cc922c5dab73f6a2534f8ceec8525604814ae7541688b7f65ac9924ace855 - 1111.htm
  • cdc39ce48f8f587c536450a3bd0feb58bf40b59b310569797c1c9ae8d28b2914 - RFile.asp
  • fd4fd44ff26e84ce6587413271cf7ff3960471a55eb0d51b0a9870b577d66f4a - file001.htm
  • 4fc768476ee92230db5dbc4d8cbca49a71f8433542e62e093c3ad160f699c98d - redir_obj.htm
  • 0adb2734a1ca0ccaf27d8a46c08b2fd1e19cb1fbd3fea6d8307851c691011f0f - file1.htm
  • 7a1494839927c20a4b27be19041f2a2c2845600691aa9a2032518b81463f83be - file1.mht
  • 20f58bd5381509072e46ad79e859fb198335dcd49c2cb738bd76f1d37d24c0a7 - fileH.htm
  • ee46f8c9769858aad6fa02466c867d7341ebe8a59c21e06e9e034048013bf65a - fileH.mht
  • c187aa84f92e4cb5b2d9714b35f5b892fa14fec52f2963f72b83c0b2d259449d - ex001.url

この調査で参照された以下のネットワーク パスは 2023 年 7 月のルアーと関連するものです。

  • \\104.234.239[.]26\share1\MSHTML_C7\file001.url
  • \\104.234.239[.]26\share1\MSHTML_C7\ex001.url
  • file[:]//104.234.239[.]26/share1/MSHTML_C7/1/
  • file[:]//104.234.239[.]26/share1/MSHTML_C7/ex001.zip/file001.vbs
  • hxxp://74.50.94[.]156/MSHTML_C7/start.xml
  • hxxp://74.50.94[.]156/MSHTML_C7/zip_k.asp?d=
  • hxxp://74.50.94[.]156/MSHTML_C7/zip_k2.asp?d=
  • hxxp://74.50.94[.]156/MSHTML_C7/zip_k3.asp?d=
  • hxxps://www.ukrainianworldcongress[.]info/sites/default/files/document/forms/2023/Overview_of_UWCs_UkraineInNATO_campaign.docx

追加リソース