Microsoft が 2017 年 11 月 14 日にCVE-2017-11882のパッチを発行してから 1 週間も経たないうちに、FireEye は攻撃者が Microsoft Office の脆弱性を悪用して中東の政府機関を標的にしていることを確認しました。この活動は、目的を達成するためにカスタム PowerShell バックドアを使用して、APT34 と呼ばれるイランのサイバー スパイ脅威グループと疑われるものによって実行されたと評価しています。
APT34 は、主にイランの国家利益に利益をもたらす偵察活動に重点を置いた長期的なサイバー スパイ活動に関与していると考えられ、少なくとも 2014 年から活動を続けています。政府、エネルギー、化学、電気通信の分野で事業を展開しており、主に中東での事業に重点を置いています。 APT34 は、イランへの言及を含むインフラストラクチャの詳細、イランのインフラストラクチャの使用、および国家の利益と一致するターゲティングに基づいて、イラン政府に代わって活動していると評価しています。
APT34 は公開ツールと非公開ツールを組み合わせて使用し、多くの場合、侵害されたアカウントを使用してスピア フィッシング操作を実行し、ソーシャル エンジニアリング戦術と組み合わせることもあります。 2016 年 5 月、マイクロソフトは、中東地域の銀行を標的としたスピア フィッシング キャンペーンの詳細を説明するブログを公開しました。このキャンペーンは、マクロ対応の添付ファイルを使用して POWBAT マルウェアを配布していました。現在、そのキャンペーンは APT34 によるものであると考えています。 2017 年 7 月には、マルウェア内の文字列に基づいて、POWRUNER と呼ばれる PowerShell ベースのバックドアと、BONDUPDATER と呼ばれるドメイン生成アルゴリズム機能を備えたダウンローダーを使用して、中東の組織を標的とする APT34 を観測しました。バックドアは、 CVE-2017-0199を悪用する悪意のある .rtf ファイルを介して配信されました。
この最新のキャンペーンでは、APT34 は最近の Microsoft Office の脆弱性 CVE-2017-11882 を利用して、POWRUNER と BONDUPDATER を展開しました。
APT34 に関する完全なレポートは、 MySIGHT カスタマー コミュニティで入手できます。 APT34 は、グループ「OilRig」に関連する公開レポートと大まかに一致しています。個々の組織はさまざまなデータ セットを使用して攻撃者を追跡する可能性があるため、活動の分類が完全に一致しない可能性があります。
CVE-2017-11882: Microsoft Office スタック メモリ破損の脆弱性
CVE-2017-11882 は Microsoft Office のいくつかのバージョンに影響を与え、悪用されると、メモリ内のオブジェクトを不適切に処理した結果、リモート ユーザーが現在のユーザーのコンテキストで任意のコードを実行できるようになります。この脆弱性は、2017 年 11 月 14 日にマイクロソフトによってパッチが適用されました。完全な概念実証 (POC) は、脆弱性の報告者によって 1 週間後に公開されました。
この脆弱性は、数式の挿入と評価に使用される Microsoft Office のコンポーネントである古い数式エディター (EQNEDT32.EXE) に存在します。数式エディターは、オブジェクトのリンクと埋め込み (OLE) テクノロジを使用して Office ドキュメントに埋め込まれています。 Office アプリケーションの子プロセスではなく、別のプロセスとして作成されます。巧妙に細工された数式が数式エディタに渡されると、データのコピー中にデータ長が適切にチェックされず、スタック メモリが破損します。 EQNEDT32.exe は古いコンパイラを使用してコンパイルされており、アドレス空間レイアウトのランダム化 (ASLR) (メモリ破損の脆弱性の悪用を防ぐ技術) をサポートしていないため、攻撃者はプログラムの実行フローを簡単に変更できます。
分析
APT34 は、被害組織に送信された悪意のあるスピア フィッシング メールの添付ファイルとして、悪意のある .rtf ファイル (MD5: a0e6933f4e0497269620f44a083b2ed4) を送信しました。悪意のあるファイルは CVE-2017-11882 を悪用して、スタック上のメモリを破壊し、悪意のあるデータをスタックにプッシュします。その後、マルウェアは関数アドレスを EQNEDT32.EXE からの既存の命令のアドレスで上書きします。上書きされた命令 (図 1 に表示) は、「WinExec」関数を呼び出す 00430c12 の命令に示されているように、kernel32.dll から「WinExec」関数を呼び出すために使用されます。
悪用後、「WinExec」関数が正常に呼び出され、現在ログオンしているユーザーのコンテキストで子プロセス「mshta.exe」が作成されます。図 2 に示すように、プロセス「mshta.exe」は、hxxp://mumbai-m[.]site/b.txt から悪意のあるスクリプトをダウンロードして実行します。
実行ワークフロー
悪意のあるスクリプトは、一連の手順を経て正常に実行され、最終的にコマンド アンド コントロール (C2) サーバーへの接続を確立します。エクスプロイト ドキュメントから始まる一連のイベント全体を図 3 に示します。
- 悪意のある .rtf ファイルは、CVE-2017-11882 を悪用します。
- マルウェアは、関数アドレスを EQNEDT32.EXE からの既存の命令で上書きします。
- このマルウェアは子プロセス「mshta.exe」を作成し、hxxp://mumbai-m[.]site/b.txt からファイルをダウンロードします。
- b.txt には、hxxp://dns-update[.]club/v.txt からドロッパーをダウンロードするための PowerShell コマンドが含まれています。また、PowerShell コマンドは、ダウンロードしたファイルの名前を v.txt から v.vbs に変更し、スクリプトを実行します。
- v.vbs スクリプトは、4 つのコンポーネント (hUpdateCheckers.base、dUpdateCheckers.base、cUpdateCheckers.bat、および GoogleUpdateschecker.vbs) をディレクトリ C:ProgramDataWindowsMicrosoftjava にドロップします。
- v.vbs は、証明書サービスの一部としてインストールされる正規の Microsoft コマンドライン プログラムである CertUtil.exe を使用して、base64 でエンコードされたファイル hUpdateCheckers.base および dUpdateCheckers.base をデコードし、hUpdateCheckers.ps1 および dUpdateCheckers.ps1 をステージング ディレクトリにドロップします。 .
- cUpdateCheckers.bat が起動され、GoogleUpdateschecker.vbs 永続化のためにスケジュールされたタスクが作成されます。
- GoogleUpdateschecker.vbs は、5 秒間スリープした後に実行されます。
- cUpdateCheckers.bat と *.base がステージング ディレクトリから削除されます。
図 4 には、実行ワークフロー セクションに関連する v.vbs スクリプトの抜粋が含まれています。
実行ワークフロー セクションに記載されている手順が正常に実行されると、タスク スケジューラは毎分 GoogleUpdateschecker.vbs を起動し、次に dUpdateCheckers.ps1 および hUpdateCheckers.ps1 スクリプトを実行します。これらの PowerShell スクリプトは最終段階のペイロードです。これらには、ドメイン生成アルゴリズム (DGA) 機能を備えたダウンローダーと、C2 サーバーに接続してコマンドを受信し、追加の悪意のあるアクティビティを実行するバックドア コンポーネントが含まれています。
hUpdateCheckers.ps1 (POWRUNER)
バックドア コンポーネントである POWRUNER は、C2 サーバーとの間でコマンドを送受信する PowerShell スクリプトです。 POWRUNER は、タスク スケジューラによって毎分実行されます。図 5 には、POWRUNER バックドアの抜粋が含まれています。
POWRUNER はまず、ランダムな GET リクエストを C2 サーバーに送信し、応答を待ちます。サーバーは、「not_now」またはランダムな 11 桁の数字で応答します。応答が乱数の場合、POWRUNER は別のランダム GET 要求をサーバーに送信し、応答を文字列に格納します。次に、POWRUNER は格納された乱数応答の最後の桁をチェックし、値をコマンドとして解釈し、そのコマンドに基づいてアクションを実行します。コマンド値と関連するアクションを表 1 に示します。
指示 |
説明 |
アクション |
0 |
サーバー応答文字列にはバッチ コマンドが含まれています |
バッチ コマンドを実行し、結果をサーバーに送り返す |
1 |
サーバーの応答文字列はファイル パスです |
ファイル パスを確認し、ファイルをサーバーにアップロード (PUT) します。 |
2 |
サーバーの応答文字列はファイル パスです |
ファイル パスを確認し、ファイルをダウンロード (GET) します。 |
表 1: POWRUNER コマンド
コマンドの実行に成功すると、POWRUNER は結果を C2 サーバーに送り返し、実行を停止します。
C2 サーバーは、PowerShell コマンドを送信して、被害者のシステムのスクリーンショットをキャプチャして保存することもできます。 「fileupload」コマンドが発行されると、POWRUNER はキャプチャしたスクリーンショットの画像ファイルを C2 サーバーに送信します。図6は、C2サーバーから送信されたPowerShellの「Get-Screenshot」関数を示しています。
dUpdateCheckers.ps1 (BONDUPDATER)
APT34 による最近の進歩の 1 つは、DGA を使用してサブドメインを生成することです。ハードコーディングされた文字列「B007」に基づいて命名された BONDUPDATER スクリプトは、カスタム DGA アルゴリズムを使用して、C2 サーバーと通信するためのサブドメインを生成します。
DGA の実装
図 7 は、サンプル ドメイン (456341921300006B0C8B2CE9C9B007.mumbai-m[.]site) が BONDUPDATER のカスタム DGA を使用して生成される方法の内訳を示しています。
- これは、次の式を使用して作成されたランダムに生成された数値です。 $rnd = -join (Get-Random -InputObject (10..99) -Count (%{ Get-Random -InputObject (1..6)}));
- この値は 0 または 1 です。最初は 0 に設定されています。最初に解決されたドメイン IP アドレスが 24.125.XX で始まる場合、1 に設定されます。
- 最初は 000 に設定され、DNS 要求ごとに 3 ずつ増加します
- システム UUID の最初の 12 文字。
- 「B007」ハードコードされた文字列。
- ハードコーディングされたドメイン「mumbai-m[.]site」
BONDUPDATER は、結果の DGA ドメインを解決しようとし、IP アドレスの解決に基づいて次のアクションを実行します。
- %temp% の場所に一時ファイルを作成します
- 作成されたファイルには、解決された IP アドレスの最後の 2 オクテットがファイル名として含まれます。
- BONDUPDATER は、ファイル名の最後の文字を評価し、表 2 にある対応するアクションを実行します。
キャラクター |
説明 |
0 |
ファイルにはバッチコマンドが含まれており、バッチコマンドを実行します |
1 |
一時ファイルの名前を .ps1 拡張子に変更します |
2 |
一時ファイルの名前を .vbs 拡張子に変更します |
表 2: BONDUPDATER アクション
図 8 は、BONDUPDATER の DGA 実装のスクリーンショットです。
実行時に観察される、生成されたサブドメインの例には次のものがあります。
143610035BAF04425847B007.ムンバイ-m[.]サイト
835710065BAF04425847B007.ムンバイ-m[.]サイト
376110095BAF04425847B007.ムンバイ-m[.]サイト
ネットワーク通信
図 9 は、POWRUNER バックドア クライアントとサーバー間のネットワーク通信の例を示しています。
この例では、POWRUNER クライアントがランダムな GET リクエストを C2 サーバーに送信し、C2 サーバーは乱数 (99999999990) を応答として送信します。応答は「0」で終わる乱数であるため、POWRUNER は別のランダム GET 要求を送信して、追加のコマンド文字列を受信します。 C2 サーバーは、Base64 でエンコードされた応答を返します。
図 10 に示すように、サーバーが文字列「not_now」を応答として送信した場合、POWRUNER はそれ以上の要求を停止し、実行を終了します。
バッチ コマンド
POWRUNER は、C2 サーバーからバッチ コマンドを受信して、システムからホスト情報を収集することもあります。これには、現在ログインしているユーザー、ホスト名、ネットワーク構成データ、アクティブな接続、プロセス情報、ローカルおよびドメインの管理者アカウント、ユーザー ディレクトリの列挙、およびその他のデータに関する情報が含まれる場合があります。バッチ コマンドの例を図 11 に示します。
POWRUNER / BONDUPDATER の追加使用
APT34 は、2017 年 7 月に POWRUNER と BONDUPDATER を使用して、中東の組織を標的にしました。2017 年 7 月、FireEye Web MPS アプライアンスは、APT34 POWRUNER / BONDUPDATER ダウンローダー ファイルを取得してインストールする要求を検出し、ブロックしました。同月、FireEye は、悪意のある .rtf ファイル (MD5: 63D66D99E46FB93676A4F475A65566D8) を使用して、別の中東組織を標的とする APT34 を観測しました。 CVE-2017-0199 を悪用したもの。このファイルは、以下から悪意のあるファイルをダウンロードするための GET 要求を発行しました。
hxxp://94.23.172.164/dupdatechecker.doc。
図 12 に示すように、dupatechecker.doc ファイル内のスクリプトは、同じサーバーから dupatechecker.exe という名前の別のファイルをダウンロードしようとします。このファイルには、マルウェアの作成者によるコメントも含まれていますが、これはセキュリティ研究者にとって明らかな挑発のようです。
dupatechecker.exe ファイル (MD5: C9F16F0BE8C77F0170B9B6CE876ED7FB) は、BONDUPDATER と POWRUNER の両方をドロップします。これらのファイルは C2 の proxychecker[.]pro に接続します。
展望と影響
APT34 による最近の活動は、APT34 が独自の開発リソースに潜在的にアクセスできる有能なグループであることを示しています。過去数か月の間に、APT34 は少なくとも 2 つの公開された脆弱性 (CVE-2017-0199 および CVE-2017-11882) に対するエクスプロイトを迅速に組み込むことができました。 中東の組織を標的にする。 C2 に DGA を組み込むなど、マルウェアを継続的に更新しようとする APT34 の取り組みは、検出を抑止するための戦略を追求するというグループのコミットメントを示していると評価しています。 APT34 は、中東地域のエンティティへのアクセスを追求し続けるため、マルウェアと戦術を進化させ続けると予想されます。
IOC
ファイル名 / ドメイン / IP アドレス |
MD5 ハッシュまたは説明 |
CVE-2017-11882 エクスプロイト ドキュメント |
A0E6933F4E0497269620F44A083B2ED4 |
b.txt |
9267D057C065EA7448ACA1511C6F29C7 |
v.txt/v.vbs |
B2D13A336A3EB7BD27612BE7D4E334DF |
dUpdateCheckers.base |
4A7290A279E6F2329EDD0615178A11FF |
hUpdateCheckers.base |
841CE6475F271F86D0B5188E4F8BC6DB |
cUpdateCheckers.bat |
52CA9A7424B3CC34099AD218623A0979 |
dUpdateCheckers.ps1 |
BBDE33F5709CB1452AB941C08ACC775E |
hUpdateCheckers.ps1 |
247B2A9FCBA6E9EC29ED818948939702 |
GoogleUpdateschecker.vbs |
C87B0B711F60132235D7440ADD0360B0 |
hxxp://ムンバイ-m[.]サイト |
パウランナーC2 |
hxxp://dns-update[.]club |
マルウェア ステージング サーバー |
CVE-2017-0199 エクスプロイト ドキュメント |
63D66D99E46FB93676A4F475A65566D8 |
94.23.172.164:80 |
マルウェア ステージング サーバー |
dupdatechecker.doc |
D85818E82A6E64CA185EDFDDBA2D1B76 |
dupdatechecker.exe |
C9F16F0BE8C77F0170B9B6CE876ED7FB |
プロキシチェッカー[.]プロ |
Q2 |
46.105.221.247 |
mumbai-m[.]site と hpserver[.]online を解決済み |
148.251.55.110 |
mumbai-m[.]site と dns-update[.]club を解決済み |
185.15.247.147 |
dns-update[.]club を解決しました |
145.239.33.100 |
dns-update[.]club を解決しました |
82.102.14.219 |
ns2.dns-update[.]club & hpserver[.]online & anyportals[.]com を解決済み |
v7-hpserver.online.hta |
E6AC6F18256C4DDE5BF06A9191562F82 |
dUpdateCheckers.base |
3C63BFF9EC0A340E0727E5683466F435 |
hUpdateCheckers.base |
EEB0FF0D8841C2EBE643FE328B6D9EF5 |
cUpdateCheckers.bat |
FB464C365B94B03826E67EABE4BF9165 |
dUpdateCheckers.ps1 |
635ED85BFCAAB7208A8B5C730D3D0A8C |
hUpdateCheckers.ps1 |
13B338C47C52DE3ED0B68E1CB7876AD2 |
googleupdateschecker.vbs |
DBFEA6154D4F9D7209C1875B2D5D70D5 |
hpserver[.]オンライン |
C2 |
v7-anyportals.hta |
EAF3448808481FB1FDBB675BC5EA24DE |
dUpdateCheckers.base |
42449DD79EA7D2B5B6482B6F0D493498 |
hUpdateCheckers.base |
A3FCB4D23C3153DD42AC124B112F1BAE |
dUpdateCheckers.ps1 |
EE1C482C41738AAA5964730DCBAB5DFF |
hUpdateCheckers.ps1 |
E516C3A3247AF2F2323291A670086A8F |
anyportals[.]com |
C2 |
参照: https://www.mandiant.com/resources/blog/targeted-attack-in-middle-east-by-apt34
Comments