はじめに
7-Zip のインストーラを騙って感染ホストをプロキシ化するキャンペーンが報告されており1 2,このキャンペーンで使用されたマルウェアのPDB (Program Database)パスの共通性やバイナリの類似度から他の偽インストーラやVPNアプリといった類似のキャンペーンが複数存在することが明らかにされています3.
本ブログでは7-Zip キャンペーンで使用されたインフラに焦点を当て,ドメインやサーバのオープンポート,http レスポンスの特徴を手掛かりに調査を行った結果,新たに確認したドメイン名とその調査方法について報告します.このドメイン名は7-Zip キャンペーンで確認された Windows ホストを標的とするWindows PE ファイルとは異なり,主に Android APK ファイルから参照されていたため,Android デバイスを標的にしていた可能性があります.
インフラの概要
まずは7-Zipキャンペーンで観測されたインフラの概要について説明します.使用されたサーバは4種類に分類できます.
| # | 種別 | 役割 | ドメイン名/IPアドレスの例 |
|---|---|---|---|
| 1 | Webサーバ | ユーザに Web アクセスを提供 | 7zip[.]com |
| 2 | ダウンロードサーバ | ユーザにマルウェア (プロキシウェア)を提供 | 7zip[.]cloud |
| 3 | ブートストラップサーバ | プロキシウェアに設定情報を提供 | soc.hero-sms[.]co |
| 4 | リレーサーバ | プロキシウェアにプロキシコントロールを提供 | 79.127.221[.]47 |
Webサーバは7-Zipの公式サイトに偽装し,7-Zipをインストールしようとするユーザを自サイトに誘導します.ダウンロードサーバは偽のインストーラをホスティングしており,ユーザのダウンロード要求に応じて偽インストーラをユーザに提供します.ユーザがこのインストーラを実行すると複数のファイルが展開され,最終的に C:\Windows\SysWOW64\hero ディレクトリにプロキシウェアがデプロイされます.
プロキシウェアはHTTP POST メソッドを用いてブートストラップサーバから設定情報を取得します.取得した設定情報にはその後に接続するリレーサーバーのIPアドレスやポート番号,通信ペイロードを暗号化するためのXOR 鍵の情報などが含まれています.リレーサーバと接続後,プロキシのあて先やリレーするデータをやり取りするプロキシコントロールチャネルを確立し,指定されたプロキシターゲットに接続してデータをリレーします.
ブートストラップ/ダウンロードサーバの特徴
今回のキャンペーンで使用されたブートストラップサーバおよびダウンロードサーバの名前解決には,Cloudflare が使用されていました.ドメインに登録されている NS レコードを調べると2種類のペアの値が使用されています.
このペアの値は今回のキャンペーンと関連するドメインを洗い出すために使用します.
| # | 種別 | ドメイン名 | NS レコード |
|---|---|---|---|
| 1 | ブートストラップサーバ | hero-sms[.]co smshero[.]co など12種類 |
armando.ns.cloudflare.com brynne.ns.cloudflare.com |
| 2 | ダウンロードサーバ | 7zip[.]cloud |
dorthy.ns.cloudflare.com jay.ns.cloudflare.com |
リレーサーバの特徴
リレーサーバのアドレスは13件報告されています4.ポート番号は主に1000もしく1002が使用されていますが,このポート番号は Censys や Shodan では確認できませんでした.しかし,それらのホストに共通している http サービスのポート番号と特徴的なレスポンスから Censys を使って同様のサーバの一覧を取得することができます.
リレーサーバに見られる共通的な特徴は下記のとおりです:
- 999/httpのレスポンスに「atuh」が含まれる
- 1300/httpと1301/httpのステータスコードが「710」である
一つ目の「atuh」は auth のタイポであると考えられます.同じポート番号に同じタイポが存在するという特徴がまず一つ発見されました.
二つ目のステータスコード「710」は,見慣れない値です.調べてみるとIBMのサイト5がヒットしますが,IBMが独自で定義しており,RFC 91106でも未定義の値です.この珍しいステータスコードが確認できることもリレーサーバの特徴の一つです.
この条件を用いて Censys で検索すると70台以上のリレーサーバ を発見することができました(台数は実行タイミングで若干の増減があります).このリレーサーバのアドレスは,別のキャンペーンやファイルを発見したときに本キャンペーンと関連するかどうか判断する指標の一つになります.
インフラのピボットによる新たなドメインの発見
先ほど述べたインフラの特徴を用いて周辺インフラをピボットする調査を行いました.まず着目したのは,ドメイン名の名前解決には Cloudflare が使用されているということです.Cloudflare を利用しているドメイン名では,NSレコードに Cloudflare が割り当てた権威DNSサーバのホスト名がペアで登録されます.Cloudflare のドキュメントによると,この NSレコードのペアの値は,同じアカウント内のすべてのゾーンで優先して同じペアが割り当てられる7という仕様になっており,同じアカウントを使っている場合,異なるドメイン名であっても同じNS レコードペアが割り当てられる可能性があります.NS レコードペアが一致しているからといって同じアカウントや運用者とは限りませんが,関連ドメイン名の洗い出しには使える指標であると考えています.実際,7-Zip のキャンペーンで使用された 7zip[.]cloud と類似キャンペーンで使用されたドメイン名 wirevpn[.]app, isharkvpn[.]com, snaptik[.]io ではペアの値が dorthy.ns.cloudflare.com jay.ns.cloudflare.com であったため,この手法によるピボットは効果がありそうと判断しました.
VirusTotal では, entity:domain ns_record:dorthy.ns.cloudflare.com ns_record:jay.ns.cloudflare.com というクエリを用いて検索することができます.検索結果の中には関係がなさそうなドメインも含まれていましたが,vpn や proxy といった単語を含むドメインや,レジデンシャルプロキシプロバイダと思われるドメインも多数見つかりました.その中には,本キャンペーンと関連のあるレジデンシャルプロキシプロバイダと報告されている 911Proxy のドメイン 911proxy[.]com も見つかりました3.その中でも特に注目すべきものとして,7zip[.]cloud とほぼ同じタイミングで作成されたドメイン名 installppi[.]co を発見しました.
次に installppi[.]co が本当に7-Zipのキャンペーンと関連づくのかを調査しました.この時に使用するのがリレーサーバの特徴を持つホストへの通信です.本ブログで紹介したリレーサーバの特徴はNSレコードよりもタイトな特徴であり,リレーサーバに接続している観測は,関連性の確度を高めます.
このドメインに通信するファイルの一つ x.cpe 8 (図の一番上のファイル) を取り上げて通信先を調べると,本ブログで紹介した特徴を持つリレーサーバの一つ 89.187.169[.]66:1000 に接続していたことが判明しました.このことから,x.cpe は7-Zip キャンペーンと同様のプロキシウェアである可能性があると判断し,調査を継続しました.
x.cpe の素性
x.cpe は2024/7/1 に最初に VirusTotal に投稿された Android APK ファイルです.7-Zip キャンペーンで配布された Windows PE とは異なるファイル形式であり,標的デバイスも異なることが分かります.AndroidManifest.xml では android:sharedUserId="android.uid.system" とシステムユーザ権限を要求しているため,何らかのデバイスにプリインストールされているアプリである可能性が考えられますが,パッケージ名や VirusTotal の情報を見てもわからなかったため,実際にAPK ファイルの中身を調べてみることにしました.
APKファイルを展開すると register_cmd.txt というファイルが見つかります.このファイルの中身は中国語のコメントおよび多数の cat コマンドとファイルパス,echo コマンドで構成されています.実行ホストの情報を収集するための設定ファイルのように見え,ファイルパスの中には,想定デバイスに関する文字列がいくつか見つかります.
一つ目は,amhdmitx です.この文字列で検索すると,あるGitHub リポジトリ9のソースコードがヒットします.このソースコードのコピーライトには Amlogic HDMI Transmitter 2.0 Driver と書かれており,このアプリが Amlogic 製 デバイスで使用されることが伺えます.次に, hdmitx20 という文字列を検索すると,Android TV のモジュールに関するソースコード hdmitx_set.c 10がヒットします.このことから,デバイスは Android TV であることが伺えます.最後に,中国語のコメントで //获取电视机的edid信息,日本語では「テレビの EDID 情報を取得する」と書かれています.EDID は接続先ディスプレイの情報を取得するために用いられるため,このデバイスが液晶画面を持つテレビ本体ではなく,テレビに接続される機器であると考えられます.これらの情報から Amlogic SoC (System-on-a-Chip) の Android TV セットトップボックスもしくはTV スティックのようなデバイスが連想されます.
さらに重要な手がかりとして,本APKは VirusTotal BADBOX 2.0 キャンペーンで IoC として報告されたドメイン 100ulife[.]com に通信していました11(本ドメインは現在Shadowserver によってシンクホールされているようです).BADBOX 2.0キャンペーンでは主に中国本土で製造されたAndroid TV デバイスが悪用されたと報告されており,本APKも BADBOX 2.0 キャンペーンと関連するAndroid デバイスで使用されるアプリであることが示唆されます.
プラグインのダウンロード
x.cpe を jadx を使って逆コンパイルしても installppi[.]co というドメイン名は確認できませんでした.解析の結果,役割は主にダウンローダであり cdn2.dc.100ulife[.]com からプラグインとして合計で5つの APK ファイルをダウンロードする様子が2024/7/1 投稿時点のパケットキャプチャから観測できました.
{
"code": "0000",
"data": [
{
"intervalTime": 3600000,
"md5": "5e98df49e6c5e539b865906a2fb93825",
"packageName": "com.app.mz.pgyhwn",
"status": 0,
"url": "http://cdn2.dc.100ulife[.]com/sdkfile/5e98df49e6c5e539b865906a2fb93825.apk?t=1719800964771&r=Z6ssVf1bHX8vJnpc&s=fde5532e5de75658805f55b3b90adb39",
"versionNo": 37
},
{
"intervalTime": 3600000,
"md5": "e831498ed78674290a0fa77c5abab8a9",
"packageName": "com.app.mz.lsdkn",
"status": 0,
"url": "http://cdn2.dc.100ulife[.]com/sdkfile/e831498ed78674290a0fa77c5abab8a9.apk?t=1719800965290&r=WSdmG4VVvntD773q&s=657f921ed333311c2a0454699f8ce516",
"versionNo": 24
},
{
"intervalTime": 3600000,
"md5": "e30c67fe8630260195a45bd683c12d1f",
"packageName": "com.app.mz.novasn",
"status": 0,
"url": "http://cdn2.dc.100ulife[.]com/sdkfile/e30c67fe8630260195a45bd683c12d1f.apk?t=1719800965929&r=hnbQAErvNBS2rEcp&s=6d96c499d0caea4ef5ed3a41a8492ff3",
"versionNo": 33
},
{
"intervalTime": 3600000,
"md5": "18ecb0b34c9f4538b860219cf47f71d7",
"packageName": "com.app.mz.popan",
"status": 0,
"url": "http://cdn2.dc.100ulife[.]com/sdkfile/18ecb0b34c9f4538b860219cf47f71d7.apk?t=1719800966735&r=FgxdElJEnko8uP4H&s=2e248a02b4ba5edc5704f25b26ac0405",
"versionNo": 3
},
{
"intervalTime": 3600000,
"md5": "945e3f5bd43ad73ffc5ef922c1449103",
"packageName": "com.app.mz.tvoversean",
"status": 0,
"url": "http://cdn2.dc.100ulife[.]com/sdkfile/945e3f5bd43ad73ffc5ef922c1449103.apk?t=1719800966804&r=M9erAikAzdOyzZ9z&s=7ce801d5ff76f664636c043150657648",
"versionNo": 12
}
],
"time": "1719801006727",
"message": ""
}
ダウンロードしたAPK の一つ com.app.mz.tvoversean 12はプロキシウェアであり, jadx で逆コンパイルすると installppi[.]co と 7-Zip キャンペーンで使用されたドメインである 7zip[.]cloud がURLとしてハードコードされていました.
package i;
import java.util.ArrayList;
public class a extends ArrayList<String> {
public a() {
add("https://ha.7zip[.]cloud/tv_v1/config/http");
add("http://ha.installppi[.]co/tv_v1/config/http");
}
}
このことから,インフラレベルだけでなくファイルレベルでも関連があることが分かりました.これらのドメインは設定情報を取得するためのブートストラップサーバとして利用されており,シンクホールされておらず現在もサーバはオンラインです.本ドメインを使用した活動が遅くとも約2年前から活動していた痕跡が確認されています.
おわりに
本ブログではWindowsホストへの感染を狙った7-Zip キャンペーンのインフラを起点に調査した結果,同キャンペーンで使用されたドメイン名と同じ Cloudflare の NS レコードペアを持つドメイン名からAPKファイルを発見しました.NS レコードペアが一致するだけではなく,そのAPKの通信先ホストにはリレーサーバの特徴を持つホストが含まれていました.これらの観測結果は,7-Zip キャンペーンとインフラ上の接点を持つレジデンシャルプロキシのリクルーティング活動が,Windows デバイスだけではなくAndroid デバイスも標的にしていた可能性を示唆しています.
レジデンシャルプロキシの脅威者は私たちが普段から使用している住宅回線をプロキシ化するために,様々な手法を用いて複数の攻撃キャンペーンを展開します.正規ソフトを騙ったマルウェアとして配布されるもの,無料のVPNアプリとして配布されるもの,そして本ブログで紹介したAndroid デバイスで使用されるアプリなどが挙げられます. 報告されたキャンペーンの関連をたどることで,新たなドメインやファイルといった指標から異なる手法を指し示す痕跡が見つかるかもしれません.
NICTでは今後もレジデンシャルプロキシの脅威や実態に関する調査および報告を継続する予定です.