マルウェア
攻撃グループ「Water Orthrus」がルートキットとフィッシングツールを用いて新たな活動を展開
最近に入り、攻撃グループ「Water Orthrus」が2種の新たな攻撃キャンペーンを活発に展開していることが判明しました。第一の攻撃キャンペーンでは、マルウェア「CopperStealth」を用いて標的端末にルートキットをインストールします。第二の攻撃キャンペーンでは、マルウェア「CopperPhish」によって標的端末からクレジットカード情報を窃取します。本稿では、両攻撃キャンペーンの構成や仕組みについて解説します。
トレンドマイクロでは2021年、攻撃グループ「Water Orthrus」がペイ・パー・インストール(PPI)のネットワークを通じてマルウェア「CopperStealer」を配布していることを確認しました。当該グループの活動を追跡調査した結果、これまで数回に渡ってマルウェアに機能改修を加えたことが判明しました。改修の内容や目的は多岐にわたり、例えば「ネット広告の強制埋め込み」、「個人情報の収集」、「暗号資産の窃取」などが挙げられます。弊社の見解として、Water Orthrusは、2019年に「Scranos」の名前で報告された攻撃キャンペーンに関与していると考えられます。
さらに弊社では2023年の3月、新たな2種の攻撃キャンペーンを発見し、使用されたマルウェアをそれぞれ「CopperStealth」、「CopperPhish」と名付けました。両マルウェアを解析した結果、Water Orthrusが用いたマルウェア「CopperStealer」に類似することが判明しました。この点より、これらのマルウェアは同一組織によって開発されたものであると同時に、新たな攻撃キャンペーンの実行者はWater Orthrusであると考えられます。
本稿では、CopperStealthとCopperPhishを用いた感染チェーンの詳細と、Water Orthrusによる過去の攻撃キャンペーンとの類似性について解説します。
マルウェア「CopperStealth」による攻撃キャンペーン
本攻撃キャンペーンが確認されたのは2023年3月8日のことであり、ある有名な中国語のソフトウェア共有Webサイトに掲載されたインストーラを経由して、マルウェア「CopperStealth」が配布されました。このマルウェアは中国のユーザを標的としたものであり、フリーのソフトウェアに偽装されていました。
CopperStealthによる感染チェーンでは、ルートキットがドロップ(作成)され、読み込まれます。このルートキットは、explorer.exeや他のシステムプロセスの內部にペイロードをインジェクト(埋め込み)します。次に、このペイロードは、追加のタスクをダウンロードして実行します。また、本ルートキットには、特定のレジストリキーに対するアクセスを監視してブロックする他、一部のプロセスやドライバの起動自体を阻止する機能も備わっています。
今回確認されたインストーラの以下の検体は、先述の通り、ソフトウェア共有Webサイトを通じて配布されました。
SHA-256:8a21eae144a23fffd35f8714964ff316caaa37fe464e8bbc143f4485119b5575
本Webサイトについては、マルウェアへの感染を引き起こす不正なインストーラを提供していることが、以前より報告されています。今回のインストーラは、起動するとまず、內部に定義されたエンコード済みの多数のURLをデコードし、そのURLからファイルを標的端末内にダウンロードして実行します。こうしてダウンロードされるファイルの1つが、今回「CopperStealth」として分類したドロッパ型マルウェアに相当します。
CopperStealth(独自のアルゴリズムによる暗号化を解除した後)には、「Hello World」の名前を持つエクスポート関数が定義されています。この名前は、前回のCopperStealerでも使用されていたものです。CopperStealthは起動するとまず、システムアーキテクチャが32ビットか64ビットのいずれであるかを判定します。続いて、判定結果に対応する「ドライバ」を、リソース内から抽出します。
続いて、ドライバサービスを新規に作成し、稼働状態にします。本サービスは、システムが起動する度に稼働するように設定されています。
ルートキット
ルートキットは、ファイルシステムのフィルタドライバとして登録されます。本ドライバのメイン・エントリポイント(関数「DriverEntry」)には、ドライバへの各種リクエスト「IRP_MJ_CREATE(作成)」、「IRP_MJ_READ(読み込み)」、「IRP_MJ_SHUTDOWN(停止)」に対応する処理が、それぞれ定義されています。
リクエスト「IRP_MJ_SHUTDOWN」に対して、ルートキットドライバは、自身のコピーをランダムな新規ドライバとして作成します。これは、レジストリの変更によって実現します。具体的には以下のレジストリのドライバ名を変更したり、
HKLM\SYSTEM\CurrentControlSet\Services
以下のレジストリに
HKLM\SYSTEM\CurrentControlSet\Control\SessionManager
次の値を追加することで、システム再起動時にドライバ関連ファイルが自動でコピーされるようになります。
PendingFileRenameOperations
リクエスト「IRP_MJ_READ」については、ファイルシステムへの読み込み操作を監視するために使用されます。今回の場合、ブロック対象のプロセス(360saf、kingsoft antivirus、360SD、Windows Defenderなど)が以下のフォルダ内のルートキット用SYSファイルや実行ファイルを読み込もうとすると、
\windows\temp
ルートキットドライバが強制的に以下のエラーメッセージを返します。これにより、当該ファイルへのアクセスは阻止されます。
STATUS_ACCESS_DENIED(アクセス拒否)
さらにルートキットは、レジストリへのアクセスを監視する「レジストリコールバック」の処理を登録します。この処理は、任意のスレッドがレジストリにアクセスしようとする度に呼び出され、実行されるものです。今回の場合、ルートキットの以下のレジストリパス配下のレジストリキーに対して
HKLM\SYSTEM\CurrentControlSet\Services\<ドライバ名>
以下の「削除」の操作が発生すると、登録済みのレジストリコールバックが強制的にエラーメッセージ「STATUS_ACCESS_DENIED」を返します。これにより、対象レジストリの削除は阻止されます。
「RegNtDeleteKey」や「RegNtDeleteValueKey」
また、ブロック対象プロセス(360safe.exe、360sd.exe、QQPCTray.exe、kxetray.exe)が起動中の場合、レジストリキーに対する「読み取り」の以下の操作に対しても、
「RegNtQueryKey」や「RegNtQueryValueKey」
レジストリコールバックが以下のエラーメッセージを返します。
STATUS_ACCESS_DENIED
以上の他、本ルートキットは「イメージ(実行形式データ)読み込み通知」の処理を登録します。この処理は、イメージ(.EXE、.DLL、.SYSなどの実行ファイルやバイナリデータ)がメモリ内に読み込まれる度に呼び出され、実行されるものです。その処理内容として、今回の場合、読み込み対象のイメージ名がハードコードされた文字列(\Fix\fixMBR.exe)と一致するかをチェックします。一致する場合、ドライバ內部に用意されたDLLライブラリを抽出します。次に、イメージをベースとして新規作成されるプロセスの內部に当該DLLをインジェクトする形で、これを起動します。なお、64ビット版のルートキットには、32ビット版DLLと64ビット版DLLが双方含まれています。
両バージョンとも、新規プロセス内にインジェクトされたDLLは即時に関数「ExitProcess」を利用して当該プロセスを停止します。
また、新規に読み込まれるプロセスが「ドライバ」に相当する場合、ルートキットはブロック対象として定義されているいくつかのバイト列を検索します。そのいずれかが見つかった場合、対象ドライバのエントリポイントを書き換え、以下のエラーメッセージが返されるようにします。
STATUS_ACCESS_DENIED
ブロック対象のドライバに含まれるバイト列は、下記の通りです。
- Beijing Huorong Network Technology Co., Ltd.
- Beijing Kingsoft Security Software Co., Ltd.
- Beijing Qihu Technology Co., Ltd.
- HuoRongBoRui (Beijing) Technology Co., Ltd.
- Qihoo 360 Software (Beijing) Co., Ltd.
最後にルートキットは、ペイロードをインジェクトするためのスレッドを起動します。ペイロードとして、今回調査した検体からは、「統計モジュール」と「タスクモジュール」の2種が確認されました。本スレッドでは、起動中の全プロセス一覧を取得(以下の関数を使用)し、
その中から「explorer.exe」の他、整合性レベルが「SYSTEM」で、かつ2種の権限「プロセスレベルトークンの置き換え」と「プロセスのメモリクォータの増加」を持つものを抽出します。さらに、感染後のシステム起動回数を保持する以下のレジストリ値に1を加算します。
HKLM\SOFTWARE\Microsoft\recount
起動回数が3以上となった場合、ルートキットはDLL内に埋め込まれている統計モジュールを復号(AESアルゴリズム)し、展開(7-Zip)します。続いて、展開したバイナリの所定箇所(「cnzz_url」で始まるプレースホルダ)に、統計用URLを書き込みます。最後に、書き換えた統計モジュールを「explorer.exe」の內部にインジェクトします。
「explorer.exe」へのインジェクトに成功すると、ルートキットはタスク用URL宛てにGETリクエストを送り、実行するタスクのコマンドを取得します。続いて、統計モジュールの時と同様、ルートキット内に埋め込まれているタスクモジュール中の指定箇所(「searching_magic_url」で始まるプレースホルダ)に、取得済みのタスク用コマンドを書き込みます。このタスクモジュールはAESで暗号化されてから、7-Zipで展開される必要があります。最後に、先に取得した整合性レベル「SYSTEM」に相当するプロセスの內部に、書き換え済みのタスクモジュールをインジェクトします。
統計モジュール
統計モジュールには、「cnzz(中国で最大規模のインターネット統計解析サービス)」の名前が付与されていますが、実際に当該組織との関係は一切ありません。本モジュールは、起動する度に、レジストリ「HKCU\Software\Microsoft\count_a0b1c2d3」内に用意されているカウント値を加算します。また、以下のURLにアクセスし、
hxxp://www.msftconnecttest.com/connecttest.txt
インターネットへの接続状況を判定します。接続が確認できた場合、一意な端末IDを取得した上で、統計情報を以下のURLに送信し、処理は終了します。
hxxp://[cnzz_url]&m=<端末ID>
なお、上記の「cnzz_url」として、「tongji(tǒng jì:統計)」の文字列が含まれているケースも確認されています。
タスクモジュール
タスクモジュールには「curl」の名前が付与されていますが、コマンド「curl(URLを指定してデータ通信を行うコマンドラインツール)」とは何らの関係もありません。本モジュールは、タスク用コマンドをBase64でデコードし、さらにDESアルゴリズムで復号します。復号に使用する鍵は「taskhost」、初期ベクトルは「winlogon」であり、前回の攻撃で使用されたものと同一です。復号後のタスク用コマンドはJSON形式で記述され、下記のキーおよび値のセットで構成されています。
ペイロードを一度限り実行するように指定(キー「onlyone」に対する値が「true」)された場合、URLのハッシュ値が以下のレジストリに記録されます。
HKLM\Software\Microsoft\<ハッシュ値>
また、起動回数の取得元は以下のレジストリであり、先述の通り、この値は統計モジュールによって更新されます。
HKEY_USERS\<セキュリティ識別子(SID)>\Software\Microsoft\count_a0b1c2d3
マルウェア「CopperPhish」による攻撃キャンペーン
2023年4月、マルウェア「CopperPhish」を展開する新たな攻撃キャンペーンが確認されました。このキャンペーンには地域的特性は見られず、マルウェアの配布元は、無料の匿名ファイル共有Webサイトの背後にあるPPIネットワークであることが判明しました。CopperPhishは認証情報のフィッシング用キットであり、永続化の手段として「確認コードの照合」、「認証情報の入力チェック」という2種の特徴的な手続きを実行します。両手続きにより、被害者が有効な認証情報を入力しない限り、CopperPhishの処理は終了することなく稼働し続けます。
CopperPhishの感染チェーンは、以下のSHA-256のPrivateLoaderを始めとするダウンローダを起点として始まります。
SHA-256:48211c6f957c2ad024441be3fc32aecd7c317dfc92523b0a675c0cfec86ffdd9
具体的な進行順序として、ファイル共有Webサイトにアクセスした被害者が、ダウロード用リンクに偽装された広告をクリックすると、PPIネットワークが用意した特殊なダウロードページに転送されます。この転送先でダウンロードされるファイルが、先述のPrivateLoaderに相当します。PrivateLoaderには、他の多くのマルウェアをダウンロードして実行する機能が組み込まれています。
今回のPrivateLoaderは、新しいドロッパ型マルウェア(弊社では「CopperPhish」として識別)をダウンロードして起動します。本ドロッパは、初期コンポーネントを復号して読み込みます。初期コンポーネントは、メインペイロードを作成して起動します。メインペイロードは、起動すると、以下のフォルダ内に複数のファイル(ロゴとQRコードのPNG画像、およびフィッシング用URLを含むHTMLページ)を作成します。
%APPDATA%\Roaming\Microsoft
なお、本メインペイロードには、前回のCopperStealerと同種の難読化が施されています。
上図のファイルはメインペイロードのリソース内に格納されます。このうちHTMLページについては、50の言語別でローカライズされたものが個別に用意されています。一方、PNG画像には文字情報が含まれないため、言語を問わず同じものが使用されています。
この後、メインのマルウェアは、「永続化」および「終了判定」を行う2つのスレッドをそれぞれ起動します。このうち「永続化スレッド」では、はじめにrundll32のプロセスを起動します。次に、ブラウザのウィンドウを表示させる簡易なプログラム(Visual Basicによる)を当該のrundll32にインジェクトします。
「終了判定スレッド」では、名前付きパイプに接続し、処理の終了を指示するメッセージ(文字列)が受信されるまで待機します。当該文字列の受信は、被害者が後述の「確認コード」を正しく入力したこと、そしてフィッシングが成功したことを意味します。この文字列の受信後、メインのプログラムは自身をアンインストール(作成したフィッシング用ファイルも削除する)した上で、処理を終了します。
「永続化スレッド」によって起動されたWebブラウザのプログラムは、Internet Explorerオブジェクトのインスタンスを読み込み、Webブラウザのコントロールクラス(SHDocVwCtl)によって当該インスタンスの動作を制御します。本プログラムはさらに、被害者がテキストフィールド「checkcode(詳細は後述)」に入力した値を読み取ります。その値が正しい場合、先に述べた名前付きパイプを通して、メインのペイロード宛てに終了指示のメッセージ(文字列)を送信します。
Webブラウザには、先に作成したHTMLやPNGによるフィッシング用ページが読み込まれ、Microsoft社のロゴ画像やQRコード、図15以降で述べた「確認コード」の入力用テキストフィールド「checkcode」が表示されます。確認コードは、QRコードのリンク先で認証情報が正しく入力されたことを確かめるために使用されます。本ブラウザのウィンドウは「最小化」や「閉じる」といった操作用のボタンが表示されないように調整されています。被害者は「タスクマネージャ」や「Process Explorer」からブラウザを一時的に閉じることができます。しかし、メインペイロードのプロセスを停止しない限り、「永続化スレッド」によって新規のブラウザが何度でも自動で再表示されます。このような仕組みにより、認証情報を入力して確認コードを取得しない限りは先に進めないような作りとなっています。
被害者がQRコードをスキャンすると、フィッシング用のURLが開かれ、ユーザ認証を求める内容が表示されます。
上図の「Continueボタン」を押下した後に表示されるWebページでは、クレジットカードの番号や有効期限、CVVコードをはじめとする機密情報の入力が求められます。
被害者が機密情報を入力し、そのチェック処理(クレジットカード番号の有効性などを検査)に通過すると、ユーザ認証成功のメッセージに加え、先述した「確認コード」の値が表示されます。この値を図19の画面上に入力すると、当該ブラウザが自動的に閉じられ、フィッシングツールのアンインストール処理が始まります。
以上に述べたフィッシングの手口は、簡易ながらも効果的なものと言えるでしょう。もしフィッシングページが標準的なブラウザウィンドウやタブ内に表示された場合、ユーザはそれを閉じて、元々行っていた作業に容易に戻ることが可能です。一方、今回は、「永続化」と「フィッシング画面の表示」を組み合わせた手段が使用されました。その対策自体は難しいものではありませんが、ウィンドウの表示を長引かせる効果は確かであり、表示を消したいという衝動に駆られた被害者が認証情報の入力に追い込まれる可能性は十分に考えられます。
「確認コードの照合」と「認証情報の入力チェック」は、単純にウィンドウを閉じたり偽情報を入力したりするといった被害者の試みを阻害するものであり、本フィッシングツールによる攻撃の成功率を高めている主因と言えるでしょう。
攻撃者の特定
今回報告した2種の攻撃キャンペーンは、前回の攻撃キャンペーンに対して下記の点で類似し、関連していると考えられます。
- ドロッパのステージで、前回と同じ暗号化方式を使用
- DES(Data Encryption Standard)による暗号化および復号時に、前回と同じ鍵(taskhost)や初期ベクトル(winlogon)を使用
- DLLのエクスポート関数として、同じ名前を使用(CopperStealerの後期バージョンと比較)
- 排他制御用ミューテックスとして、類似した命名規則を使用(前回は「exist_sign_cps」、「exist_sign_task_Hello001」、「exist_sign__install_r3」、今回は「exist_sign_redns」、「dl_exist_sign_cnzz」、「dl_exist_sign_sys」)
結論
本調査では、攻撃グループ「Water Orthrus」による2種の攻撃キャンペーンを分析し、その詳細を解明しました。今回Water Orthrusは、マルウェアを機能改修しているだけではなく、目的に合わせて攻撃の標的や内容を調整していることが分かりました。CopperStealthによる攻撃キャンペーンでは、中国国内の端末を標的として、ルートキット経由による各種マルウェアの配布に力が注がれています。一方、CopperPhishによる攻撃キャンペーンでは、世界各地の端末を標的として、クレジッドカード情報の窃取に力が注がれています。以上より、Water Orthrusは複数の目標を持って活動していると考えられます。また、本調査により、Water Orthrusの関心が個人情報から暗号資産に、さらにはクレジッドカード情報に変化していることが判明しました。
企業や組織がこの種の攻撃からシステムを保護するためには、セキュリティ対策を主体的に実施することが有用です。「Trend Micro Apex One™」では、挙動解析をはじめとする各種機能によって脅威を検知し、不正なスクリプトやインジェクション、ランサムウェア、ファイルレスによるメモリやブラウザへの攻撃を阻止します。また、「Apex One Endpoint Sensor」では、攻撃の文脈を読み取るエンドポイントの検知と応答(EDR)機能によって不審な活動を監視し、その原因となっているプロセスや事象を迅速に特定することが可能です。
侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡(IoC)はこちらで確認してください。
参考記事:
Water Orthrus's New Campaigns Deliver Rootkit and Phishing Modules
By: Jaromir Horejsi, Joseph C Chen
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)