マルウェア

GALLIUM、新ツールPingPullで通信・政府・金融業種へ標的を拡大

Clock Icon 3 min read

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

概要

Unit 42は最近、PingPullという検出困難な新しいリモートアクセス型トロイの木馬を発見しました。PingPullを使っているのは標的型攻撃グループ(APT)のGALLIUMです。

Unit 42は複数のAPTグループの関連インフラを継続的に監視していますが、GALLIUM(別名Softcell)は東南アジア、ヨーロッパ、アフリカで事業を営む通信事業者を標的にすることで名前が知られるようになりました。このグループの地理的な標的選定、特定分野への関心、技術習熟度に加え、既知の中国系脅威アクターが使うマルウェアや戦術・技術・手順(TTP)を使用することから、業界では同グループがおそらく中国の国家支援型攻撃グループであろうと評価されています。

ここ1年は通信事業者のほか金融機関や政府機関にも対象が広がっており、この間私たちは、アフガニスタン、オーストラリア、ベルギー、カンボジア、マレーシア、モザンビーク、フィリピン、ロシア、ベトナムにまたがる数々の組織と、GALLIUMのインフラとの間に複数のつながりを確認しています。とりわけ重要なのが、同グループによる新たなリモートアクセス型トロイの木馬「PingPull」の使用が確認されたことです。

PingPullは、コマンド&コントロール(C2)にICMP、HTTP/HTTPS、raw TCPの3つのプロトコルを利用できます。ICMPトンネルの使用はとくに目新しい手法ではありませんが、PingPullはICMPを使うことでC2通信を検出されにくくしています。というのも、ネットワーク上でICMPトラフィックの検査を実施している組織はほとんどないからです。本稿では、この新しいツールの内容詳細とGALLIUMグループの最近のインフラについて解説します。

パロアルトネットワークスのお客様は、脅威防御Advanced URL FilteringDNSセキュリティCortex XDRWildFireのマルウェア解析を通じて、本稿で説明する脅威から保護されています。

本稿に関連して観測されたテクニック、本稿に関連してとるべき行動指針 (CoA)、侵害指標(IoC)に関する全容は、Unit 42 ATOMビューアからご確認ください。

関連する Unit 42 のトピック Advanced persistent threats

目次

PingPull マルウェア
ICMPの亜種
HTTPSの亜種
TCPの亜種
インフラ
保護と緩和策
結論
追加リソース
IoC

PingPullマルウェア

PingPullはVisual C++で記述されています。脅威アクターはPingPullを使うことでコマンドを実行したり侵入先ホスト上のリバースシェルにアクセスしたりできます。PingPullにはC2通信にICMP、HTTP/HTTPS、raw TCPの3種類のプロトコルを使用する亜種が存在しますが、これらは機能的には同じです。どのような通信を行う場合でも、PingPullの各亜種は、次の構造を持つカスタム文字列を組み立ててC2に送信します。この文字列はC2サーバーが侵害先システムを一意に識別するために使用すると考えられます。

PROJECT_[実行ファイル名(大文字表記)]_[コンピュータ名(大文字表記)]_[IPアドレスの16進表記(大文字表記)]

PingPullは各亜種とも以下の説明をもつサービスとして自身をインストール可能です。

Provides tunnel connectivity using IPv6 transition technologies (6to4, ISATAP, Port Proxy, and Teredo), and IP-HTTPS. If this service is stopped, the computer will not have the enhanced connectivity benefits that these technologies offer.

この記述は正規のiphlpsvcサービスと完全に同一です。PingPullはサービス名にIph1psvcを使い、表示名にIP HelperではなくIP He1perを使うことで、この正規サービスを意図的に模倣しようとしています。また、PingPullのサンプルのなかには、これと同じ説明をもち、サービス名がOnedriveであるものも確認されています。

PingPullの3つの亜種は、コマンドハンドラで利用できるコマンドが同じです。以下表1に示すコマンドからは、PingPullがファイルシステム上でさまざまな活動を行えること、またcmd.exeをアクターのリバースシェルにしてコマンドを実行できることがわかります。

コマンド 説明
A ストレージボリュームを列挙(A: Z:)する。
B フォルダ内容の一覧表示
C ファイルを読み出す
D ファイルを書き込む
E ファイルを削除する
F ファイルを読み出して16進数形式に変換する
G 16進数形式から変換してファイルに書き込む
H ファイルをコピーし、作成時間、書き込み時間、アクセス時間を元のファイルと一致するように設定する
I ファイルを移動し、元のファイルと一致するように作成、書き込み、アクセス時間を設定する
J ディレクトリを作成する
K ファイルにtimestompを実行して痕跡を削除する
M cmd.exeでコマンドを実行する

表 1. PingPullのコマンドハンドラで利用可能なコマンド

表1に示すコマンドを実行するさい、脅威アクターはC2サーバーをPingPullビーコンに応答させます。このとき渡すコマンドと引数は、CBC(cipher block chaining)モードのAESで暗号化され、base64でエンコードされています。私たちは既知のPingPullサンプルのなかから固有のAES鍵を2つ確認しています。P29456789A1234sSdC@133321Ikd!D^iです。

PingPullは受信データを復号し、得られた平文をパースして以下の構造内のコマンドと追加引数を探します。

&[AES鍵]=[コマンド]&z0=[不明]&z1=[引数1]&z2=[引数2]

コマンド文字列内のz0パラメータの用途は不明です。PingPullはこのパラメータを解析はしていましたが、値が使用されたようすは確認できませんでした。コマンド文字列の構造を確認するため、私たちは分析環境で次の文字列を使い、C:\test.txtファイルの内容を読み込むようPingPullに指示するコマンドを発行しました。

&P29456789A1234sS=C&z0=2&z1=c:\\test.txt&z2=none

分析中、PingPullは上記のコマンド文字列に対してya1JF03nUKLg9TkhDgwvx5MSFIoMPllw1zLMC0h4IwM=で応答していることがわかりました。この内容をデコードし復号(AES鍵にはP29456789A1234sSを使用)するとsome text in a test file.\x07\x07\x07\x07\x07\x07\x07になりますが、これが私たちの分析システム上のC:\test.txtの内容(PKCS5_PADDINGでパディングされている)です。

ICMPの亜種

C2通信にICMPを使用するPingPullサンプルは、C2サーバーにICMP Echo Request(Ping)パケットを発行します。C2サーバーは、このEcho Requestに対してEcho Replyパケットで応答することでシステムへのコマンドを発行します。PingPullとC2サーバーが使うEcho RequestパケットとEcho Replyパケットは、どちらも以下の同一の構造になります。

[8バイトの値]R[シーケンス番号].[「PROJECT」で始まる一意な識別文字列]\r\ntotal=[メッセージの合計の長さ]\r\ncurrent=[現在のメッセージの長さ]\r\n[base64エンコードしてからAES暗号で暗号化したデータ]

C2にビーコンを発行する場合、PingPullはtotalcurrent0に設定したEcho RequestパケットをC2サーバーに送信します。このさい、エンコードしてから暗号化したデータは含めません(図1参照)。

図1のICMPパケットのデータセクション。PingPullがコードにハードコードした0x702437047E404103(\x03\x41\x40\x7E\x04\x37\x24\x70)という8バイト値で始まり、その直後にハードコードした「R」が続く。
図 1. ハードコードされた8バイト値をもつPingPullのICMPビーコンの例

図1のICMPパケットのデータセクションは、PingPullがコードにハードコードした0x702437047E404103(\x03\x41\x40\x7E\x04\x37\x24\x70)という8バイト値で始まり、その直後にハードコードした「R」が続きます。ただしC2通信にICMPを使用する別のPingPullサンプルでこの8バイトの値が省略されているものもあります(図2参照)。

C2通信にICMPを使用した別のPingPullサンプルはこの図に示すおうに8バイトの値が省略されています。
図 2. 8バイト値のハードコードがないPingPull ICMPビーコンの例

「R」の後ろには、ICMPデータセクションの最大サイズを超えるデータの送受信をする場合にインクリメントするシーケンス番号が入ります。シーケンス番号の直後にはピリオド「.」が続き、その後にはPingPullの生成する「PROJECT」で始まる一意な識別子文字列が続きます。ICMPデータセクションにはtotal=[整数値]current=[整数値]が含まれます。PingPullとC2の両方がこれを使って送信データの全長と現在のパケットで送信されるデータチャンクの長さを決めています。各ICMPパケットで送信されるデータは、サンプル固有の鍵を使ってAESで生成した暗号文をbase64エンコードした文字列です。「current」の値の直後の新しい行に、このエンコードと暗号化が済んだデータが続きます。たとえば、PingPullはテストコマンドに応答する際、図3に示したICMP Echo RequestパケットをC2サーバーに送信しました。このパケットには、期待しているコマンドの結果を表すya1JF03nUKLg9TkhDgwvx5MSFIoMPllw1zLMC0h4IwM=というbase64エンコードされた文字列が含まれています。

テストコマンドに応答してPingPullが送信したICMP Echo Requestパケット。
図 3. PingPullがICMP経由でコマンドに応答

HTTPSの亜種

PingPullの別の亜種は、C2サーバーとの通信にICMPではなくHTTPSリクエストを使用します。初期ビーコンにはこのHTTPSチャネル経由のPOSTリクエストを使いますが、そのさいPingPullが生成した一意な識別子文字列をURLとして使います。図4は、PingPullがビーコンとして送信したPOSTリクエストの例で、samp.exeはファイル名、DESKTOP-U9SM1U2は私たちが分析に使っているシステムのホスト名、172.16.189[.]130(0xAC10BD82)は同システムのIPアドレスです。

これは、PingPullがビーコンとして送信したPOSTリクエストの例で、samp.exeはファイル名、DESKTOP-U9SM1U2は私たちが分析に使っているシステムのホスト名、172.16.189[.]130は同システムのIPアドレスです。
図 4. PingPullのHTTPSビーコンの例
初期ビーコンはデータのないPOSTリクエストでHTTPヘッダのContent-Lengthは0になります。コマンドに対して結果を応答するさいPingPullはこれと同じURL構造を使います。そのさい、base64エンコードしてAES鍵で暗号化した結果をデータセクションに含めた2つ目のPOSTリクエストを発行します。図5は私たちがテストで発行したC:\test.txtの内容を読み取るというコマンドへのPingPullの応答を示したものです。POSTリクエストのデータセクションはya1JF03nUKLg9TkhDgwvx5MSFIoMPllw1zLMC0h4IwM=になっていますが、これをデコードして複合するとsome text in a test file.\x07\x07\x07\x07\x07\x07\x07になります。

図5は私たちがテストで発行したC:\test.txtの内容を読み取るというコマンドへのPingPullの応答を示したものです。POSTリクエストのデータセクションはya1JF03nUKLg9TkhDgwvx5MSFIoMPllw1zLMC0h4IwM=になっていますが、これをデコードして複合するとsome text in a test file.\x07\x07\x07\x07\x07\x07\x07になります。
図 5. PingPullがHTTPS経由でコマンドに応答

TCPの亜種

このPingPull亜種はICMPやHTTPSではなくraw TCPでC2通信を行います。他のC2チャンネル同様、このビーコンで送信されるデータにもPingPullが生成した「PROJECT」で始まる一意な識別子文字列が含まれます。ただしこのTCP C2チャネルは後続データ長を表す4バイト値で始まります(以下のビーコン構造参照)。

[後続データのDWORD長]PROJECT_[実行ファイル名(大文字表記)]_[コンピュータ名(大文字表記)]_[IPアドレスの16進表記(大文字表記)]

この図はTCP通信チャンネル(全体)の例です。

  • 最初の赤文字: PingPullが送信したビーコン
  • 青文字: コマンドを発行しているC2
  • 2つめの赤文字: コマンドに応答するPingPull
TCP通信チャネル全体の例。PingPullが送信したビーコンが最初のブロックのテキスト(赤でハイライト)、C2がコマンドを発行したの2つめのブロックのテキスト(青でハイライト)、PingPullがコマンドに応答したのが3つめのブロックのテキスト(赤でハイライト)。
図 6. PingPullがTCPビーコン送信、C2がコマンド発行、PingPullが結果を送信

図6のビーコンは、45バイト(0x2d)のデータ長で始まります。これには一意な識別文字列が与えられていて、ここではsamp_f86ebe.exeがファイル名、DESKTOP-U9SM1U2が私たちが分析に使っているシステムのホスト名、 172.16.189[.]130 (0xAC10BD82)が同システムのIPアドレスです。このビーコンに対するC2のレスポンスは、64バイト(0x40)のデータ長で始まり、コマンドを暗号化したものをbase64エンコードした文字列が続きます。PingPullはC2から提供されたコマンドを実行し、データ長である44バイト(0x2c)の後ろに、期待されているコマンドの実行結果をbase64エンコードした文字列ya1JF03nUKLg9TkhDgwvx5MSFIoMPllw1zLMC0h4IwM=をつなげたパケットを送信します。

インフラ

2021年9月9日にベトナムのある組織からServerMannger.exe(SHA256:de14f22c88e552b61c62ab28d27a617fb8c07350ca7c631de5680850282761)というPingPullのサンプルがサイバーセキュリティコミュニティに共有されました。このサンプルを分析したところ、t1.hinitial[.]comというC2へのコールホーム通信が設定されていることがわかりました。このC2をもとにさらに調査したところhinitial[.]comドメイン以下にホストされている複数のサブドメインが発見されましたが、これらは次のような命名パターンをもつことが確認されました。

t1.hinitial[.]com
v2.hinitial[.]com
v3.hinitial[.]com
v4.hinitial[.]com
v5.hinitial[.]com

これらのドメインをさらに深く掘り下げると、各サブドメインに関連するさまざまなIPインフラ間で証明書が重複して使用されていることが確認され始めました。とくに目立ったのは、76efd8ef3f64059820d937fa87acf9369775ecd5というSHA1値をもつ奇妙な設定の証明書です。この証明書は、有効期限が10年、Common Nameをbbbとして作成されており、それ以外に情報がまったく付与されていないことから、ただちにその正当性が疑われるものでした。

ここに表示した証明書は複数疑わしい特徴を含んでいる。10年という有効期限、bbbというコモンネームで作成されていて、それ以外の情報がまったく付与されていない。
図 7. hinitial[.]comのインフラと関連するX.509証明書
2020年9月が初認のこの証明書には、6つの異なるIPアドレスへのリンクが見られましたが、これらのIPアドレスはいずれもhinitial[.]comのサブドメインの1つをホストしていました。さらに調査の手を広げると、この証明書とあるダイナミックDNSホスト(goodjob36.publicvm[.]com)とのもリンクも確認されました。すべてのPingPullサンプルとその関連C2ドメインとをこのやりかたで芋づる式に調べていった結果、2020年後半に遡る、このグループと関連をもつ170件以上のIPアドレスを特定できました。防御のため最新のIPインフラを下記セクションに記載しておきます。

保護と緩和策

東南アジア、ヨーロッパ、アフリカに拠点を置く通信・金融・政府関連組織のかたは、以下のIoC(侵害指標)を活用し、自社への影響をご確認いただくことをお勧めします。

パロアルトネットワークス製品をご利用のお客様は、弊社の製品・サービスにより、本グループに関連する以下の対策が提供されています。

Cortex XDRは、本稿で紹介したPingPullマルウェアを検出してエンドポイントを保護します。

クラウドベースの脅威分析サービスであるWildFireは、PingPullマルウェアを悪意のあるものとして正確に特定します。

脅威防御は、PingPullマルウェアに対する保護を提供します。「Pingpull Command and Control Traffic Detection」シグネチャ(脅威ID 86625、86626、86627)は、ICMP・HTTP/HTTPS・raw TCPを使うC2トラフィックに対するカバレッジを提供します。

Advanced URL FilteringDNS Security は同脅威グループに関連付けられたドメインを悪意のあるものとして識別します。

AutoFocus™の脅威インテリジェンスサービスをご利用中のお客様は、次のタグを使用してこれらの攻撃に関連するマルウェアを表示することができます: PingPull

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

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

結論

GALLIUMは活発に東南アジア、ヨーロッパ、アフリカをまたいで通信・金融・政府組織への工作活動を続けている脅威です。私たちはこの1年で9カ国に影響を与えた標的型攻撃を確認しています。このグループは、PingPullと呼ばれる新ツールをサイバースパイ活動に使っています。すべての組織に、今回の調査結果を活かして同脅威グループに対する防御をかためていただくことをお勧めします。

NSA Cybersecurity Collaboration Center、Australian Cyber Security Centreをはじめ、さまざまな政府パートナーの皆様からこのリサーチの支援のためにいただいたご協力と知見に感謝申し上げます。

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

追加リソース

Mitre - GALLIUM group
Microsoft - GALLIUM: Targeting Global Telecom
CyberReason - Operation Soft Cell: A Worldwide Campaign Against Telecommunications Providers

IoC (侵害指標)

サンプル

de14f22c88e552b61c62ab28d27a617fb8c0737350ca7c631de5680850282761
b4aabfb8f0327370ce80970c357b84782eaf0aabfc70f5e7340746f25252d541
fc2147ddd8613f08dd833b6966891de9e5309587a61e4b35408d56f43e72697e
c55ab8fdd060fb532c599ee6647d1d7b52a013e4d8d3223b361db86c1f43e845
f86ebeb6b3c7f12ae98fe278df707d9ebdc17b19be0c773309f9af599243d0a3
8b664300fff1238d6c741ac17294d714098c5653c3ef992907fc498655ff7c20
​​1ce1eb64679689860a1eacb76def7c3e193504be53ebb0588cddcbde9d2b9fe6

PingPullのC2ドメインとIP

df.micfkbeljacob[.]com
t1.hinitial[.]com
5.181.25[.]55
92.38.135[.]62
5.8.71[.]97

ドメイン

micfkbeljacob[.]com
df.micfkbeljacob[.]com
jack.micfkbeljacob[.]com
hinitial[.]com
t1.hinitial[.]com
v2.hinitial[.]com
v3.hinitial[.]com
v4.hinitial[.]com
v5.hinitial[.]com
goodjob36.publicvm[.]com
goodluck23.jp[.]us
helpinfo.publicvm[.]com
Mailedc.publicvm[.]com

IP アドレス

(過去30日間にアクティブだったもの)

92.38.135[.].62
5.181.25[.]55
5.8.71[.]97
101.36.102[.]34
101.36.102[.]93
101.36.114[.]167
101.36.123[.]191
103.116.47[.]65
103.179.188[.]93
103.22.183[.]131
103.22.183[.]138
103.22.183[.]141
103.22.183[.]146
103.51.145[.]143
103.61.139[.]71
103.61.139[.]72
103.61.139[.]75
103.61.139[.]78
103.61.139[.]79
103.78.242[.]62
118.193.56[.]130
118.193.62[.]232
123.58.196[.]208
123.58.198[.]205
123.58.203[.]19
128.14.232[.]56
152.32.165[.]70
152.32.203[.]199
152.32.221[.]222
152.32.245[.]157
154.222.238[.]50
154.222.238[.]51
165.154.52[.]41
165.154.70[.]51
167.88.182[.]166
176.113.71[.]62
2.58.242[.]230
2.58.242[.]231
2.58.242[.]235
202.87.223[.]27
212.115.54[.]54
37.61.229[.]104
45.116.13[.]153
45.128.221[.]61
45.128.221[.]66
45.136.187[.]98
45.14.66[.]230
45.154.14[.]132
45.154.14[.]164
45.154.14[.]188
45.154.14[.]254
45.251.241[.]74
45.251.241[.]82
45.76.113[.]163
47.254.192[.]79
92.223.30[.]232
92.223.30[.]52
92.223.90[.]174
92.223.93[.]148
92.223.93[.]222
92.38.139[.]170
92.38.149[.]101
92.38.149[.]241
92.38.171[.]127
92.38.176[.]47
107.150.127[.]124
118.193.56[.]131
176.113.71[.]168
185.239.227[.]12
194.29.100[.]173
2.58.242[.]236
45.128.221[.]182
45.154.14[.]191
47.254.250[.]117
79.133.124[.]88
103.137.185[.]249
103.61.139[.]74
107.150.112[.]211
107.150.127[.]140
146.185.218[.]65
152.32.221[.]242
165.154.70[.]62
176.113.68[.]12
185.101.139[.]176
188.241.250[.]152
188.241.250[.]153
193.187.117[.]144
196.46.190[.]27
2.58.242[.]229
2.58.242[.]232
37.61.229[.]106
45.128.221[.]172
45.128.221[.]186
45.128.221[.]229
45.134.169[.]147
103.170.132[.]199
107.150.110[.]233
152.32.255[.]145
167.88.182[.]107
185.239.226[.]203
185.239.227[.]34
45.128.221[.]169
45.136.187[.]41
137.220.55[.]38
45.133.238[.]234
103.192.226[.]43
92.38.149[.]88
5.188.33[.]237
146.185.218[.]176
43.254.218[.]104
43.254.218[.]57
43.254.218[.]98
92.223.59[.]84
43.254.218[.]43
81.28.13[.]48
89.43.107[.]191
103.123.134[.]145
103.123.134[.]161
103.123.134[.]165
103.85.24[.]81
212.115.54[.]241
43.254.218[.]114
89.43.107[.]190
103.123.134[.]139
103.123.134[.]240
103.85.24[.]121
103.169.91[.]93
103.169.91[.]94
45.121.50[.]230

2024-03-07 09:30 JST 英語版更新日 2022-06-13 04:45 PDT の内容を反映 

Enlarged Image