税務調査を装うメールを用いたValleyRATへの感染攻撃に関する注意喚起

目次

はじめに

SOCでは税務調査を装った攻撃メールを2025年12月に複数観測しました。これらの攻撃メールにはPDFファイルを装った悪性ファイルのダウンロードを促す内容が含まれており、受信者がファイルをダウンロードして実行することで最終的にValleyRAT(別名: Winos)に感染します。

税務調査を装った攻撃メール

2025年12月2日に、「税務書類のご確認のお願い」の件名で広範囲のばらまき型攻撃メールを観測しました。このメールは業界を問わずIIJサービスを利用している複数の顧客にて受信を確認しています。添付ファイルは無くすべての宛先で同一の本文が用いられていました。観測したメールは、いずれもDKIM認証が「body hash did not verify」で失敗しており、攻撃者が正規メールのDKIM署名を悪用した可能性があります。同様の攻撃メールはSNSなどで報告されており、PDFファイルの確認を促す旨の内容とGitHubのURLが含まれていたことが確認されています。このURLにアクセスするとEXEファイルを含むZIPファイルがダウンロードされます。

また、2025年12月22日にも、「税務調査事前通知書」の件名でばらまき型攻撃メールを複数の顧客で観測しました。同日のメールは時間帯に応じてメールの内容が変化しており、攻撃者がリンク先の変更などを実施した可能性があります。また、22日に観測したメールはDKIM認証は失敗しておらず、送信ドメイン認証は成功していました。こちらも、同様の攻撃メールがSNSなどで報告されており、PDFファイルの確認を促す旨の内容と短縮URLが含まれていたことが確認されています。このURLにアクセスすると外部のサイトへリダイレクトした後に、EXEファイルを含むZIPファイルがダウンロードされます。

いずれのメールも、リンク先でダウンロードしたZIPファイル内の資料ファイルに見せかけたEXEファイルを実行することで、最終的にValleyRATに感染します。税務関連の通知を装ったメールを起点としてValleyRATへの感染を狙う攻撃は、海外のセキュリティベンダーから報告されています(表-1)。今回の事例と同様に、税務関連の通知を装ったメールで受信者を誘導し、メール本文や添付されたPDFに含まれるリンクのクリックによりZIPファイルをダウンロードさせ、ZIPファイル内のEXEファイルを実行させることで最終的にValleyRATに感染する点が共通しています。

表-1 セキュリティ企業による類似報告例
報告時期 報告元 レポートタイトル 攻撃対象
2025年10月 Fortinet Tracking Malware and Attack Expansion: A Hacker Group’s Journey across Asia 中国、台湾、日本、マレーシア
2025年12月 CloudSEK Silver Fox Targeting India Using Tax Themed Phishing Lures インド

次項では、SOCで観測したメールからダウンロードされるファイルについて解析した内容を紹介します。

ValleyRATへの感染を狙った攻撃フロー

2025年12月2日及び22日にSOCで観測した税務調査を騙る攻撃は、いずれも専用のローダ型マルウェアを用いて最終的にValleyRATへ感染させるものであったことを確認しています。SOCではこのValleyRATをダウンロードするマルウェアを12月2日に初めて観測し、実行時にmz.datやmzy.datという名前のファイルを配置することから「mzLoader」と呼称しています。22日に観測した感染フローでは2日に観測したフローに加え、DLLサイドローディングや多数のアンチアナリシスが実装された新たなローダ型マルウェア、正規ソフトウェアを偽装する手法などが追加されました。SOCではこの新たなローダ型マルウェアを「TCLoader」と呼称しています。本レポートでは22日の観測情報を基に、ValleyRATへの感染フロー及び本攻撃で観測したTCLoaderとmzLoaderを主に解説します。

ValleyRATへの感染フロー

12月22日に観測した感染フローを以下に示します。フロー図内の赤枠は12月2日に観測した感染フローです。2日の感染フローではmzLoaderをユーザに直接実行させる手法であった一方、22日ではTCLoaderを含む複数の実行モジュールを経由してmzLoaderが実行されています。なお、2日の攻撃におけるmzLoaderのファイル名は「税務調査表.exe」であり、いずれも税務調査を装うファイル名でユーザに対して実行を促すのは同様です。

図-1 ValleyRATへの感染フロー
図-1 ValleyRATへの感染フロー

税務調査を装うファイル

税務調査を装うフィッシングメールのリンクからダウンロードされるZIPファイル名は、メール本文のテーマに沿った税務調査に関するものです。

図-2 税務調査を装うZIPファイル
図-2 税務調査を装うZIPファイル

このZIPファイルにはZIPファイルと同名の実行ファイルとfusion.dllというファイル名のTCLoaderが含まれています。このfusion.dllのファイルには隠し属性が付いており、標準の設定ではWindowsのエクスプローラ上に表示されません。fusion.dllを表示するには隠しファイルの表示設定をエクスプローラに対して行う必要があります。隠しファイルの表示設定の有無について比較したものを図-3に示します。

図-3 隠しファイル表示設定の有無によるエクスプローラ上の表示の差異
図-3 隠しファイル表示設定の有無によるエクスプローラ上の表示の差異

実行ファイルである 査察の詳細です.exe はMicrosoft社が提供するILアセンブラ(Ilasm.exe)でマルウェアではありません。この実行ファイルはインポートテーブルにfusion.dllを含んでいるため、実行時にfusion.dllという名前のDLLファイルをロードして実行します。攻撃者はTCLoaderのファイル名を「fusion.dll」とすることで、ユーザが 査察の詳細です.exe を実行した際にTCLoaderを起動するようにしています。TCLoaderはDLLメイン関数内で図-4のコマンドを実行し、自身がエクスポートするEntryPoint関数をrundll32.exe経由で実行します。EntryPoint関数の配下に不正なコードが実装されています。

図-4 TCLoaderのエクスポート関数EntryPointを実行するコマンド
図-4 TCLoaderのエクスポート関数EntryPointを実行するコマンド

EntryPoint関数の主な機能はアンチアナリシスとシェルコードのダウンロード・実行です。複数のアンチアナリシス手法を用いて自身が解析されているかをチェックし、いずれかに引っ掛かる場合は以降の不正な処理を行わずに終了します。TCLoaderに実装されていたアンチアナリシス手法は、デバッガ検知、エミュレータ検知、サンドボックス回避を確認しています。

デバッガの検知

デバッガの検知手法では、デバッグ関連のWindows APIを使うパターンとハードウェアブレークポイントの設定有無をチェックをするパターンを確認しています。

    • IsDebuggerPresent関数とCheckRemoteDebuggerPresent関数によるプロセスのデバッグ状況のチェック
図-5 IsDebuggerPresent及びCheckRemoteDebuggerPresentによるデバッグチェック
図-5 IsDebuggerPresent及びCheckRemoteDebuggerPresentによるデバッグチェック
    • デバッグポートのチェック
図-6 NtQueryInformationProcessによるデバッグポートのチェック
図-6 NtQueryInformationProcessによるデバッグポートのチェック
    • ハードウェアブレークポイントの設定有無のチェック
図-7 ハードウェアブレークポイントのチェック
図-7 ハードウェアブレークポイントのチェック

エミュレータの検知

ZwIsProcessInJobとZwCompressKeyというMicrosoft社によってドキュメント化されていないAPIを呼び出します。TCLoaderはZwIsProcessInJobの呼び出し時、ジョブハンドルを指定する必要のある第二引数に定数を渡しています。

図-8 ZwIsProcessInJobの不正な呼び出し
図-8 ZwIsProcessInJobの不正な呼び出し

この場合ZwIsProcessInJobはエラーコード「STATUS_OBJECT_TYPE_MISMATCH(0xC0000024)」を返して失敗します。APIの本来の用途として使用されておらず、エミュレータでは未実装のAPIが呼び出された際に動作を停止する場合があることから、この実装はエミュレータによる実行を検知する目的があると考えます。図-9はバイナリエミュレータであるspeakeasyで実行した時のAPI呼び出しのログです。ZwIsProcessInjobが呼び出されたタイミングで処理が止まることが確認できます。

図-9 speakeasyにおけるZwIsProcessInJobの実行ログ
図-9 speakeasyにおけるZwIsProcessInJobの実行ログ

サンドボックス回避

無意味な処理を行うdo-whileループが実装されています。このループ処理の実行時間が160秒未満の場合は以降の処理に進まない実装になっています。ループ内には10秒待機するSleepが含まれ、かつループは18回実行されるため、必ず160秒を越えることになります。このことから、このdo-whileループの目的は不正な処理を行うまで一定時間待機することでサンドボックスでの解析の時間切れを狙ったものと考えます。

図-10 サンドボックス回避を行うコード
図-10 サンドボックス回避を行うコード

なお、TCLoaderは以下のURLに対して順にリクエストを送り、いずれかのリクエストが成功した場合にそのリクエスト送信日時情報を取得して、do-while文の実行時間の算出に利用しています。

  • http://worldtimeapi.org/api/ip
  • http://timeapi.io/api/Time/current/zone?timeZone=UTC
  • http://www.google.com/

mzLoaderを実行するまでのフロー

全てのアンチアナリシスチェックを完了すると、TCLoaderは攻撃者の用意したサーバからシェルコードをHTTPプロトコルでダウンロードしてメモリに展開し、新規スレッドを作成してシェルコードを実行します。

図-11 シェルコードをダウンロードするHTTPリクエスト
図-11 シェルコードをダウンロードするHTTPリクエスト

このシェルコードはダウンローダであり、攻撃者の用意したサーバからwps_installer.exeという名前の実行ファイルをHTTPプロトコルでダウンロードして%TEMP%フォルダ(C:\Users\〈ユーザ名〉\AppData\Local\Temp)に配置した後に実行します。

図-12 wps_installer.exeをダウンロードするHTTPリクエスト
図-12 wps_installer.exeをダウンロードするHTTPリクエスト

wps_installer.exeはKingsoft社が提供するOfficeソフトウェアスイートであるWPS Officeに偽装したマルウェアです。このマルウェアはmzLoaderのローダであるwps_installer.tmpを実行し、続けてwps_installer.tmpはmzLoaderと正規のWPS Officeのインストーラであるwps_wid.exeを C:\wps_temp_install に配置した後に両者を実行します。デスクトップ画面上には図-13に示すWPS Officeのインストール画面が表示される一方で、バックグラウンドではmzLoaderが実行されます。

図-13 WPS Officeのインストール画面
図-13 WPS Officeのインストール画面

mzLoaderの動作フロー

mzLoaderのマニフェストには「requireAdministrator」が設定されており、管理者権限での実行を前提としたものになっています。

図-14 マニフェストの内容
図-14 マニフェストの内容

mzLoaderはコマンドラインで指定されたオプションとWindowsサービスへの登録状態を確認し、処理内容を変更します(図-15)。

図-15 条件による挙動の違い
図-15 条件による挙動の違い

初回実行の場合、以下の条件を満たすため、mzLoaderは永続化処理を行います。
1 オプションに「-service」が含まれない
2 自身の名前と同じサービス名が登録されていない

mzLoaderは永続化処理として自身の複製をC:\Users\Public\Documents\〈ランダムな文字列〉.exeとして作成します。複製処理時に実行されたコマンドラインを以下に示します。

  • “C:\Windows\System32\cmd.exe” /c copy “C:\Users\Public\Documents\mz.dat” /B+ “C:\Users\Public\Documents\mzy.dat” /B C:\Users\Public\Documents\〈ランダムな文字列〉.exe

この複製処理は自身を2つのファイル(mz.datとmzy.dat)に分割し、copyコマンドで連結するという特徴的なものでした。分割したdatファイルの内訳は、mz.datが「MZ」というDOS Headerのマジックナンバーのみを保持し、mzy.datがそれ以外のデータを保持します。この処理はアナリストに対する解析妨害の一種であると考えられます。

図-16 C:\Users\Public\Documentsに生成された複製ファイル
図-16 C:\Users\Public\Documentsに生成された複製ファイル

自身の複製を作成後、mzLoaderはWindowsサービスへの永続化を行います。サービスの作成にはCreateServiceW関数を使用し、主に以下の内容をサービスとして登録します。サービスの登録が完了すると、複製ファイルに-serviceオプションが付加された状態で自動実行されるようになります(表-2)。

表-2 Windowsサービスへの登録内容
項目 内容
サービス名 〈永続化されたファイル名と同じランダムな文字列〉
実行されるコマンドライン C:\Users\Public\Documents\〈ランダムな文字列〉.exe -service
起動種別 自動実行
実行権限 Local system

Windowsサービスへの登録の後、mzLoaderは登録したサービスをscコマンドで実行します。

  • “C:\Windows\System32\cmd.exe” /c timeout /t 1 /nobreak && sc start “〈ランダムな文字列〉”

登録したサービスを開始後、mzLoaderはdelコマンドで自身の実行ファイルと複製に利用したmz.datとmzy.datを削除します。

  • “C:\Windows\System32\cmd.exe” /c timeout /t 4 /nobreak && del /f /q “〈mzLoaderのファイルパス〉” && del “C:\Users\Public\Documents\mz.dat” && del “C:\Users\Public\Documents\mzy.dat”

次にWindowsサービスから実行されるmzLoaderは「-service」付きで実行されます。図-15のフローチャートより、「-service」付きで実行されたmzLoaderは自身の子プロセスとしてmzLoaderを「-service」なしで実行します。

Windowsサービスから実行されたmzLoaderの子プロセスとして実行されたmzLoaderは、自身の中に暗号化状態で保持していたシェルコードをメモリ上に展開・実行します。このシェルコードは自身が展開されたメモリ内から文字列「codemark」を探し、そこを目印としてマルウェア内のデータにアクセスします。このデータの中からC2サーバのアドレス情報を取得してC2サーバへTCP通信を行い、マルウェアをダウンロード・実行します。SOCで解析した時には既にC2サーバは稼働していませんでしたが、mzLoaderが保持していたシェルコードに格納されたデータがZscaler社の公開しているValleyRATのダウンローダのコンフィグと類似していることから、ダウンロードされるマルウェアはValleyRATであったと結論付けています。

図-17 既知のValleyRATのダウンローダとの比較
図-17 既知のValleyRATのダウンローダとの比較

IoCs

IP Address

  • 8[.]222[.]142[.]243
  • 118[.]107[.]13[.]96
  • 216[.]118[.]251[.]214

Hash

  • mzLoader
    • f28937dfad91851338210021a0a015ddc1cd16c053115444e8c07ef4a6a31ff6
    • e989f8161cbc97bb204b0f9b655cff408ae729b227d2338d26d0a8850b7fb4ae
  • TCLoader
    • 8597faea1e71e44803b503913e399006626b9f70b54815f20b779b39befa592b

おわりに

本記事では、SOCで観測した税務調査を装ったメールを用いた攻撃と展開される悪性ファイルについて紹介しました。今回観測した悪性ファイルと同様の特徴を持つマルウェアは継続してマルウェア検査サイト上で確認しており、今後も同様の攻撃が継続する可能性があるため注意が必要です。また、国税庁では2025年9月からメールを含めたオンラインツールが順次導入されていますが、メールでの通知は納税者が希望をした場合にのみ実施されます 1。資料の確認を求めるメールを受信した場合は安易にクリックやダウンロードされたファイルの実行をせず、まずは事実確認を行うなど、冷静に対応するようご注意ください。