様々な攻撃者によって使用される SystemBC マルウェア

SystemBC は数年前から様々な攻撃者によって使用されている Proxy マルウェアである。最近では SmokeLoader や Emotet によって配布されていることが確認されているが、過去から複数のランサムウェア攻撃において使用されているといったケースが存在する。攻撃者が悪意のある目的で特定のアドレスにアクセスしようとする時、感染したシステムで Proxy Bot として動作する SystemBC を利用すると、そのシステムを経路として活用することができる。このほかにも外部から追加のマルウェアをインストールできるダウンローダー機能が存在するため、攻撃者は追加のペイロードをインストールする手段としても SystemBC を活用できる。


過去の配布事例

SystemBC は2019年に初めて、RIG エクスプロイトキットと Fallout エクスプロイトキットを通じて配布されたケースが確認された。[1] 2019年頃に確認されている初期バージョンの SystemBC は Socks5 Proxy 機能を中心に実装され、サイズが小さいマルウェアであった。SystemBC を最初に確認した ProofPoint によれば、開発者は「socks5 backconnect system」という名前でこのマルウェアを販売していた履歴がある。

2020年頃に確認された SystemBC は Ryuk ランサムウェアや Egregor ランサムウェア攻撃に共に利用され、2021年には米国送油管企業のコロニアル・パイプライン社を攻撃した DarkSide ランサムウェアグループにおいても使用された経歴がある。[2] エクスプロイトキット (Exploit Kit)や Web ブラウザ、スパムメール等によって配布されるランサムウェアのマルウェアとは異なり、これらのランサムウェアの攻撃者は企業環境のシステムを掌握した後、ランサムウェアをインストールして金銭を要求する手法で攻撃を行う。すなわち、最初の侵入後 CobaltStrike のようなツールを利用してイントラネットを掌握した後、ランサムウェアをインストールして企業内の多数のシステムをランサムウェアに感染させる方式をとっている。

攻撃プロセスにおいて SystemBC の役割は具体的に知られていないが、Proxy 機能と追加のペイロードをダウンロードしてインストールできる機能を持っているため、不正なペイロードをダウンロード後に実行、または内部ネットワークにインストールされて Proxy の役割を遂行した可能性がある。実際に SystemBC を利用した攻撃事例が確認された F-Secure[3]のレポートによると、当該マルウェアはラテラルムーブメント攻撃のために PsExec およびスクリプトをダウンロードして実行する際に使用されていた。



最近の配布事例

2022年3月には Emotet により追加のペイロードとしてインストールされていることが確認された。Emotet はバンキング型マルウェアであり、感染システムから情報窃取のための追加のモジュールや別のマルウェアをインストールする。一般的に攻撃者は感染システムを掌握するために Emotet を利用して CobaltStrike をインストールするが、最近では CobaltStrike のほかにも SystemBC が配布されていることが確認されたのである。

当社 ASD インフラによれば、最近確認されている SystemBC はそのほとんどが SmokeLoader マルウェアによりインストールされている。SmokeLoader は現在実行中のエクスプローラのプロセス、すなわち explorer.exe にインジェクションして動作し、追加のモジュールやマルウェアをインストールすることがある。以下は SmokeLoader がインジェクションされたエクスプローラのプロセスが SystemBC マルウェアをインストールしたログである。

[図1] SmokeLoader によりインストールされる SystemBC

最近の SmokeLoader は、商用ソフトウェアの Crack、Serial のダウンロードページに偽装した不正なサイトから配布される NSIS ドロッパーマルウェアの Muldrop によりインストールされている。参考に、このような偽装した Crack、Serial のダウンロードページから配布されるマルウェアには Muldrop 以外にも CryptBot、PseudoManuscrypt の事例が存在する。



SystemBC の解析

SystemBC には様々な変種があり、具体的な順序は確認されていないが、追加の機能によっていくつかの変種が存在している。Type 2 は自身をアップデートする機能のみが存在していた初期バージョンの Type 1 とは異なり、Batch、VBS、PowerShell のようなスクリプトをダウンロードして実行させる機能と、DLL およびシェルコード形式のマルウェアをダウンロードしてメモリ上で実行させる機能が存在する。このほかにも、Tor ネットワークを通じて C&C サーバーと通信する機能がある。[4] 2つ目の変種である Type 3 は Type 2 と比較するといくつかの機能が抜けているが、Tor ネットワークを利用する部分と DLL およびシェルコードをダウンロードして実行する機能がそれに該当する。

ここでは、現在 C&C サーバーとの通信が可能な SystemBCを 解析対象とする。具体的には Type 1 と Type 3 の機能の大半が含まれた Type 2 を指す。このマルウェアは RedLine を通じてインストールされた履歴が確認され、SmokeLoader を通じて配布されるタイプと同じパッカーでパックされている。参考に、Emotet によりインストールされていると知られている SystemBC は Type 3 である。

初期ルーティン

SystemBC が最初に実行されると引数が「start」かどうかをチェックする。最初に実行される場合は引数なしで実行され、この場合は最初に現在実行中のプロセスのウィンドウをチェックする。ウィンドウ名が「Microsoft」でクラス名が「win32app」のプロセスが存在する場合「WM_COPYDATA」メッセージを送信し、一定時間 sleep した後、そのプロセスのファイルを削除する。

[図2] 特定のウィンドウを持つプロセスの処理関数

参考に、SystemBC は一番最初にウィンドウクラスを登録してウィンドウを生成しているが、ウィンドウ名を「Microsoft」に、クラス名を「win32app」に指定している。実際に SystemBC を実行すると、以下のようなウィンドウおよびクラスを確認することができる。

[図3] 実行中の SystemBC のウィンドウおよびクラス

このときに登録したウィンドウのメッセージ処理関数は「WM_COPYDATA」メッセージを受け取ったときに「特定のランダム文字列」の名前で登録されたタスクを削除して終了する機能を担当する。整理すると、SystemBC は最初に実行された時に既に実行中であった SystemBC プロセスを照会し、存在する場合は終了メッセージを送信する。そのメッセージを受け取った既存の SystemBC は、自身が登録されたタスクを削除して終了し、2番目に実行された SystemBC は既存の SystemBC のバイナリを削除する。

そして Emisoft の製品と推定される「a2guard.exe」という名前のプロセスをチェックするが、このプロセスが現在実行中の場合は終了し、それ以上不正な振る舞いを行わない。最後に、現在実行中の SystemBC バイナリを %ALLUSERSPROFILE% すなわち ProgramData パスのランダムなフォルダーにランダムな名前でコピーしたあと、再び「特定のランダム文字列」名のタスクとして登録する。このようなプロセスは COM オブジェクトを利用し、TaskScheduler のクラスおよび Task クラスのメソッドが使用される。

[図4] COM オブジェクトを利用したタスク登録プロセス

タスクは現在時刻を基準として2分後から動作し、2分間隔で実行される。実行対象は SystemBC であり、引数に「start」を指定して実行させる。SystemBC は C&C サーバーから exe 形式のペイロードをダウンロードして実行できる。ダウンロードされた実行ファイルが最新バージョンの SystemBC の場合、このようなプロセスは最終的に SystemBC のバイナリアップデートのプロセスとなる。


C&C 通信

「start」の引数と共に実行された SystemBC は C&C サーバーと通信を試みる。SystemBC は C&C サーバーのアドレスを XOR エンコードされた形式でデータセクションに含めている。C&C サーバーと通信する前に C&C サーバーのアドレスとポート番号を復号化して使用し、最初のアドレスとの接続が不可能な場合は2番目のアドレスとの通信を試みる。現在の解析対象の場合、設定データが暗号化されておらず、平文形式で確認が可能である。参考に、設定データの下に「xordata」という文字列が存在する場合、XOR エンコードは行われない。「xordata」の文字列が存在する 0x32 バイトサイズのデータは RC4 キー値だが、一般的な RC4 キー値が存在する場合は正常に XOR エンコードを実行する。

[図5] SystemBC の設定データ
- C&C サーバーアドレス 1 : 31.44.185[.]6:4001
- C&C サーバーアドレス 2 : 31.44.185[.]11:4001

SystemBC は、まず以下のような感染システムの基本的な情報を収集する。以下の項目のうち、現在実行中の SystemBC プロセスが管理者権限、すなわち High Integrity Level 以上で実行中の場合は Offset 0x34 に 0x2 を設定し、そうでない場合は0を設定する。

オフセットサイズデータ
+0x000x32RC4 キー
+0x320x02Windowsバージョン
+0x340x01管理者権限の有無 (0x02)
+0x350x01WOW64 の有無
+0x360x2Aユーザー名
+0x600x04ボリュームシリアル番号
[表1] C&C サーバーに伝達するデータ

以下のデータは 0x64 バイトのサイズを持ち、最初の 0x32 バイトの RC4 キーを利用して後ろの 0x32 バイトを RC4 暗号化する。このデータを渡された C&C サーバーは最初の 0x32 バイトの RC4 キーで次の 0x32 バイトのサイズを持つ感染システムの情報を復号化できると見られる。

[図6] RC4 キーと感染システムから収集した情報
- RC4 キー : 78 6F 72 64 61 74 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[図7] C&C サーバーとの通信パケット

その後、暗号化されたデータを C&C サーバーに伝達する。SystemBC は C&C サーバーと Raw TCP ソケットを利用して通信するが、C&C サーバーはこれらの情報を受け取ると同じ RC4 キーを利用してコマンドのデータを暗号化して伝達する。以下は、C&C から渡された暗号化されたデータである。

[図8] C&C サーバーから渡されたデータ

SystemBC はまず最初の4バイトを復号化するが、復号化された4バイトが C&C コマンドのヘッダーであると言える。ヘッダーは大きく3つに分かれており、それぞれコマンド、補助コマンド、データのサイズである。そしてその後の4バイトはトークンを意味し、その後ろにはコマンドデータが含まれている。

オフセットサイズデータ
+0x000x01コマンド
+0x010x01補助コマンド
+0x020x02データのサイズ
+0x040x04トークン
+0x08可変コマンドのデータ
[表2] ダウンロードされたパケット構造

ここで渡されたコマンドは 0xFFFF2B00 である。これは 0x002B サイズのデータを渡されたという意味であり、後ろに続く 0x002B サイズのデータを復号化するとトークンおよび URL アドレスを確認することができる。ここでのコマンドが 0xFFFF であるため、当該 URL からファイルをダウンロードして実行させるという意味である。

コマンド補助コマンドサイズ機能
0xFF0xFF可変ペイロードのダウンロード
0xFF0xFE0x00終了
0x00可変渡された対象との新たな Proxy を生成
Index[0x00 – 0xFF]可変C&C サーバーから渡されたデータを指定した Index の対象に伝達
Index[0x00 – 0xFF]0x00指定された対象との Proxy を終了
[表3] C&C コマンドの種類

参考に、現在ダウンロードされる exe マルウェアも SystemBC であり、これによってバイナリアップデートのためのコマンドだということが分かる。

- ダウンロードアドレス : hxxp://michaelstefensson[.]com/supd/s.exe
[図9] 追加ペイロードのダウンロード URL

SystemBC は HTTP 通信も Raw TCP ソケットを利用している。以下は、渡されたアドレスからバイナリをダウンロードする際に使用する User-Agent 文字列である。

GET %s HTTP/1.0
Host: %s
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Connection: close

ダウンロード完了後は C&C サーバーに RC4 で結果を暗号化して伝達する。伝達するデータはペイロードのダウンロードコマンドで使用された補助コマンドの 0xFF と、伝達するデータのサイズ 0x04、そして事前に渡されたトークンの値である 0x04 バイトを含む 0x07 バイトである。

[図10] C&C サーバーにレスポンスを通知
オフセットサイズデータ
+0x000x01補助コマンド
+0x010x02データのサイズ
+0x030x04トークン
[表4] C&C サーバーに伝達するパケット構造

渡されたダウンロード URL アドレスはファイルの拡張子およびフォーマットにより以下のように区分される。

種類拡張子フォーマット機能
exeexeSystemBC 自主アップデート
VBS スクリプト.vbsVBS スクリプトの実行
Batch スクリプト.batBatch スクリプトの実行
Batch スクリプト.cmdBatch スクリプトの実行
PowerShell スクリプト.ps1PowerShell スクリプトの実行
DLLDLLメモリ上で DLL をロード
URL の後ろに # タグがある場合、DLL の当該関数を実行
シェルコードエンコードされた状態メモリ上でシェルコードを実行
[表5] ダウンロード可能なペイロード
[図11] 拡張子およびフォーマットによる区分

一般的なファイルは Temp パスに作成後、タスクスケジューラに登録して実行させるが、PowerShell スクリプトの場合はさらに「-WindowStyle Hidden -ep bypass -file」のようなコマンドラインを利用して実行する。

ダウンロードされたペイロードが DLL の場合、メモリを割り当ててロードし、新しいスレッドで実行させる。C&C サーバーから渡された URL の後ろに「#」文字列が存在する場合は、そのダウンロードした DLL でエクスポート関数を呼び出す。このほかにもシェルコードで確認された場合はデコードのルーティンを経て同じように新しいスレッドで実行させ、最終的に DLL およびシェルコードはファイルの形では生成されず、SystemBC のメモリ上で動作する。


TOR を利用した通信

現在解析対象のマルウェアは Tor アドレスが存在しないため、ここでは過去に Tor ネットワーク通信が可能だったケースを扱う。このマルウェアは以下のような C&C サーバーアドレスがエンコードされた形で存在するが、2つの C&C サーバーどちらにも接続が不可能な場合は Tor を利用して別の C&C サーバーに接続を試みる。

- C&C サーバーアドレス 1 : admex175x[.]xyz:4044
- C&C サーバーアドレス 2 : servx278x[.]xyz:4044

このため、以下のようなアドレスに接続してパブリック IP アドレスを取得するが、このように取得したパブリック IP アドレスは C&C サーバーに伝達するデータとともにエンコードして渡される。

https://api.ipify.org/
https://ip4.seeip.org/

SystemBC は mini-tor[5] ライブラリを利用して Tor ネットワークを使用するものと知られている。[6] まず Tor 接続のための初期化プロセスを実行するが、ハードコーディングされた状態で存在する Authoritative Directory Server の IP アドレスから一つをランダムで選択し、Tor ネットワークに対する Consensus データを取得した後、渡された設定データをもとに Tor 通信を開始する。

[図12] Tor Consensus データの取得
193.23.244[.]244:80
86.59.21[.]38:80
199.58.81[.]140:80
204.13.164[.]118:80
194.109.206[.]212:80
131.188.40[.]189:80
154.35.175[.]225:80
171.25.193[.]9:443
128.31.0[.]34:9131
128.31.0[.]39:9131

その後 Tor C&C アドレスを取得するが、以下のような Xor 復号化の後にテキスト形式で確認できる一般的な C&C アドレスとは異なり、Tor C&C アドレスはさらなる復号化のプロセスが必要である。以下で「TOR:」文字列のあとに続く項目は1次復号化された Tor C&C アドレスであり、さらなる復号化プロセスを通じて実際のアドレスを確認することができる。

[図13] Xor エンコードされた設定データ
[図14] 最終的に復号化された C&C アドレス
- C&C アドレス (Tor) : dfhg72lymw7s3d7b[.]onion:4044

Tor ネットワークに正常に接続した後は、前述したパブリック IP アドレスを含む感染システムの情報を伝達する。参考に、これは Tor ネットワークを通じてデータを渡すという点を除けば、従来の Raw TCP ソケット通信を利用する他の形式と同じである。すなわち、従来のように RC4 アルゴリズムで暗号化されたデータを渡し、同じキー値で暗号化された C&C コマンドを渡されるのである。これは追加のペイロードをダウンロードする際に使用する HTTP 通信でも同じである。

[図15] Tor を通じて渡された C&C コマンド
- ダウンロードアドレス : http://5.61.33[.]200/henos.exe

SOCKS5 PROXY

SystemBC の主な機能はダウンローダー以外にも Proxy Bot として動作するものがある。以下は上記で取り上げたプロキシ関連のコマンドだが、それぞれプロキシ用のソケットを生成して特定のプロキシパケットを処理する機能を担っている。

[図16] Socks5 プロキシのルーティン

攻撃者が感染システムを Proxy Bot として使用する場合、すなわち特定のアドレスに接続する際に感染システムの SystemBC を通じて接続しようとする場合、まずプロキシ生成コマンドが渡される。SystemBC はプロキシ生成コマンドを受け取ると渡されたタイプに応じてソケットを生成する。このようにして生成されたソケットは、index に従って管理される。

ソケットの作成後は新しいスレッドを生成し、渡されたアドレスに接続する。参考に、以前攻撃者が BackConnect と名付けたのは、攻撃者が直接 SystemBC に接続して Socks5 プロキシ接続を試みる代わりに、SystemBC が先に攻撃者の C&C サーバーに接続するためである。SystemBC がプライベート IP 帯域のシステムにインストールされる場合は外部から接続ができないため、Proxy 機能を備えたマルウェアは主にこのような Reverse Proxy 方式を使用する。

その後、攻撃者が特定のアドレスにリクエストを送信する場合は、生成したプロキシソケットに Index を指定して伝達し、SystemBC は渡されたデータをそのアドレスに転送する。そして渡されたデータは再び SystemBC を経由して C&C サーバーに渡される。SystemBC はこのように Proxy Bot として動作し、攻撃者は実際に自身の IP を隠したまま攻撃を実行することができる。そして、SystemBC がイントラネットへのアクセスが可能なシステムで動作する場合、外部の攻撃者はその SystemBC を経由してイントラネットへのアクセスが可能になる。


過去バージョンとの比較

上記ではほとんどの機能をサポートしている Type 2 の形式を取り扱ったが、それぞれにおいて多少の相違点とサポートする機能においての違いがある。

Type 1Type 2Type 3
再帰実行引数“Start2”“start”“start”
Emisoft 製品のチェックOOX
インストール先%ALLUSERSPROFILE%\[Random]%ALLUSERSPROFILE%\[Random]現在のパス
ダウンローダー機能X (アップデートのみ)Batch、VBS、PowerShell、DLL、Shellcode およびアップデートBatch、VBS、PowerShell およびアップデート
短縮ドメイン .bit のサポートOXX
[表6] Type 別の相違点

Type 1 では「.bit」短縮ドメインをサポートしている。まず以下のマルウェアの設定データを見ると、C&C アドレスおよびポート番号以外に DNS サーバーのリストが存在する。

[図17] 設定データ内の DNS サーバーリスト
- C&C サーバーアドレス 1 : db1.pushsecs[.]info:40690
- C&C サーバーアドレス 2 : db2.pushsecs[.]info:40690
- DNS サーバーアドレス 1 : 5.132.191[.]104
- DNS サーバーアドレス 2 : ns1.vic.au.dns.opennic[.]glue
- DNS サーバーアドレス 3 : ns2.vic.au.dns.opennic[.]glue

C&C サーバーのアドレスが「.bit」で終わる場合は、上記の DNS サーバーを利用して C&C サーバーの IP アドレスを取得する。

[図18] .bit アドレスに対する DNS のクエリルーティン



結論

SystemBC は過去にエクスプロイトキット(Exploit Kit)を通じて配布されたのを皮切りに、最近でも商用ソフトウェアの Crack、Serial のダウンロードページに偽装した不正なサイトにおいて、他のマルウェアを通じてインストールされている。また、これらの一般ユーザーをターゲットにする攻撃に加え、企業をターゲットとする多数のランサムウェア攻撃でもさらなる目的を達成するために使用されたケースが存在する。

SystemBC はインストールされると感染システムに常駐しながら追加のペイロードをダウンロードする振る舞いだけでなく、Proxy Bot としても動作し、他の攻撃者による攻撃ルートとしても活用される恐れがある。ユーザーは OS およびインターネットブラウザ等のプログラムの最新パッチや V3 を最新バージョンにアップデートし、このようなマルウェアの感染を事前に遮断できるよう注意を払わなければならない。

AhnLab 製品では、これらのマルウェアを以下の通り検知している。

[ファイル検知]
– Trojan/Win.MalPE.R480644 (2022.03.29.02)
– Trojan/Win.Generic.C5006057 (2022.03.11.03)
– Malware/Win32.RL_Generic.R358611 (2020.12.18.01)
– Trojan/Win32.Agent.C3511593 (2019.10.14.08)

[IOC]
Type 1 MD5

– beb92b763b426ad60e8fdf87ec156d50

Type 2 MD5
– 8e3a80163ebba090c69ecdeec8860c8b
– 28c2680f129eac906328f1af39995787

Type 3 MD5
– ae3f6af06a02781e995650761b3a82c6

Type 1 C&C
– db1.pushsecs[.]info:40690
– db2.pushsecs[.]info:40690

Type 2 C&C
– 31.44.185[.]6:4001
– 31.44.185[.]11:4001
– admex175x[.]xyz:4044
– servx278x[.]xyz:4044
– dfhg72lymw7s3d7b[.]onion:4044

Type 3 C&C
– 96.30.196[.]207:4177
– 45.32.132[.]182:4177

ダウンロードアドレス
– hxxp://michaelstefensson[.]com/supd/s.exe
– hxxp://5.61.33[.]200/henos.exe

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム「AhnLab TIP」サブスクリプションサービスを通して確認できる。

5 1 vote
評価する
Subscribe
Notify of
guest

0 コメント
Inline Feedbacks
View all comments