攻撃グループBlackTechが使用するマルウェアGh0stTimes
国内における攻撃グループBlackTechの活動が、2018年頃から継続的に確認されています。最近は、以前に比べると話題になることが少なくなりましたが、JPCERT/CCでは現在も引き続き攻撃活動を確認しています。今回は、攻撃グループBlackTechが使用したと考えられるマルウェアGh0stTimesの詳細を紹介します。
Gh0stTimesの概要
Gh0stTimesは、Gh0st RATをカスタマイズして作成したマルウェアで、2020年頃から複数の攻撃で使用されていることを確認しています。図1は、Gh0stTimesと、Gh0st RATのコードの一部を比較したものです。
上記コードは、ファイル操作を行う関数ですが、本関数に関してはほぼ同じコードを使い回していることがわかります。Gh0stTimesはGh0st RATから大幅に変更が加えられていますが、このように一部のコードは全く同じものが使われています。以降では、次のGh0stTimesの特徴について説明します。
- 通信方式
- 命令によって実行されるコマンド
- ダミーコード
- C2サーバーのコントロールパネル
通信方式
Gh0stTimesは、Gh0st RAT同様に独自プロトコルでC2サーバーと通信をします。しかし、Gh0st RATとは、通信パケットのフォーマットが異なります。図2は、Gh0stTimesの通信の流れを示しています。
Gh0stTimesは、最初のC2サーバーとの通信時に、認証ID(図2のAuth ID)と以降の通信で使用する暗号化キーを作成するためのデータ(図2のKey)を送信します。C2サーバー側では、認証IDの確認を行って、一致した場合のみ通信を受け付けるようになっています。図3は、Gh0stTimesに指定されていた認証IDの例です。
認証に成功した以降の通信は、最初に送信した暗号化キーを使用して暗号化されています。 次の通信では、感染ホストの情報が送信されます。送信する感染ホストの情報には図4の通り、ホスト名、ユーザー名やプロセッサ名などが含まれています。
感染ホストの情報を送信すると、コマンドの送受信が行われます。送受信データのフォーマットについて詳しくは、Appendix Aをご覧ください。コマンド送受信時のデータは、RC4で暗号化したのち、zlib圧縮されています。なお、Gh0stTimesのRC4は、カスタマイズされており、図5のように暗号化したデータを最終的にXOR 0xACする処理が加えられています。
次にエンコードされた送受信データをデコードするためのPythonコードを示します。
import zlib # Load keydata for first packet with open(args[1], "rb") as fb: keydata = fb.read() # Load encoded packet data with open(args[2], "rb") as fb: data = fb.read() comp_data = custom_rc4(data[12:], keydata[5:21]) dec_data = zlib.decompress(comp_data) def custom_rc4(data, keydata): key = [] key_1 = [0x98, 0x19, 0x3C, 0x56, 0xD9, 0xBB, 0xC7, 0x86, 0xFF, 0x3E] key_2 = [0] * 16 key_3 = [0xAC, 0xBB, 0x30, 0x5E, 0xCC, 0xDD, 0x19, 0x23, 0xFC, 0xBD] keybox = [7, 0, 2, 3, 9, 10, 4, 13, 14, 8, 1, 11, 5, 6, 12, 15] i = 0 for i in range(16): key_2[i] = keydata[keybox[i]] key = key_1 + key_2 + key_3 x = 0 box = list(range(256)) for i in range(256): x = (x + box[i] + key[i % len(key)]) % 256 box[i], box[x] = box[x], box[i] x = 0 y = 0 out = [] for char in data: x = (x + 1) % 256 y = (y + box[x]) % 256 box[x], box[y] = box[y], box[x] out.append((char ^ box[(box[x] + box[y]) % 256] ^ 0xAC).to_bytes(1, byteorder='little')) return b''.join(out)
命令によって実行されるコマンド
Gh0stTimesは、大きく5つのコマンド群が実装されています。次が実装されているコマンドグループ名です。
- FileManager(コマンド番号0x1):ファイル操作関連のコマンド
- ShellManager(コマンド番号0x28):リモートシェル実行
- PortmapManager(コマンド番号0x32):C2サーバーリダイレクト機能
- UltraPortmapManager(コマンド番号0x3F):プロキシ機能実行
- 名前なし(コマンド番号0):通信終了
ShellManagerおよびFileManagerは、Gh0st RATの既存機能がそのまま利用されています。なお、FileManagerには感染ホストのファイルを操作するための複数の機能があります(詳しくは、Appendix Bをご覧ください)。 PortmapManagerおよびUltraPortmapManagerは、Gh0stTimes固有の機能であり、本マルウェアは通信を中継する機能が強化されていることがわかります。
ダミーコード
攻撃グループBlackTechが使用するマルウェアには、コードの分析を困難にすることを目的にすると思われるダミーコードが含まれていることがあります。Gh0stTimesにも、図7のように、ダミーコードが多数含まれていますが、分析の難易度を上げるほどのものではありません。
C2サーバーのコントロールパネル
調査の過程で、Gh0stTimesのコントロールパネルの存在を確認しました。図8は、コントロールパネル起動時のGUIです。確認したコントロールパネルは「Times v1.2」という名前が付けられていました。
図9は、コントロールパネルから実行できるコマンドの一覧です。
おわりに
攻撃グループBlackTechは、引き続き活動を続けており、今後も注意が必要です。今回解説した検体の通信先に関しては、Appendix Cに記載していますので、アクセスしている端末がないかご確認ください。
なお、今回紹介したマルウェアが発見されたサーバー上では、その他のマルウェア(ダウンローダー、バックドア、ELF Bifrose)や、攻撃ツールを確認しています。次にサーバー上で保存されている攻撃ツールを列挙します。これらのツールは、攻撃グループBlackTechによって利用されている可能性があることにご注意ください。
- https://github.com/Yang0615777/PocList
- https://github.com/liuxu54898/CVE-2021-3019
- https://github.com/knownsec/pocsuite3
- Citrix exploit tool
- MikroTik exploit tool
- Exploit for CVE-2021-28482
- Exploit for CVE-2021-1472/CVE-2021-1473
- Exploit for CVE-2021-28149/CVE-2021-28152
- Exploit for CVE-2021-21975/CVE-2021-21983
- Exploit for CVE-2018-2628
- Exploit for CVE-2021-2135
謝辞
本調査に協力いただいた@r3dbU7z氏に感謝申し上げます。
インシデントレスポンスグループ 朝長 秀誠
Appendix A:送受信データの内容
オフセット | 長さ | 内容 |
0x00 | 4 | ID |
0x04 | 4 | データ長 xor 0x3A4BFDCC |
0x08 | 4 | 0x0C以降の圧縮前のデータ長 xor 0x7C2E56D2 |
0x0C | - | 暗号化されたデータ(zlib + RC4) |
オフセット | 長さ | 内容 |
0x00 | 4 | ID |
0x04 | 4 | データ長 xor 0xC3A2B5D2 |
0x08 | 4 | 0x0C以降の圧縮前のデータ長 xor 0x68FC2AD3 |
0x0C | - | 暗号化されたデータ(zlib + RC4) |
Appendix B:コマンド
値 | 内容 |
2 | SendFilesList |
3 | UploadToRemote |
4 | CreateLocalRecvFile |
5 | WriteLocalRecvFile |
7 | SendFileData |
8 | StopTransfer |
9 | DeleteFile |
10 | DeleteDirectory |
11 | GetFileData |
12 | CreateFolder |
13 | MoveFile |
14 | OpenFile(SW_SHOW) |
15 | OpenFile(SW_HIDE) |
Appendix C:通信先
- tftpupdate.ftpserver.biz
- 108.61.163.36
- update.centosupdates.com
- 107.191.61.40
- osscach2023.hicloud.tw
- 103.85.24.122
- 106.186.121.154
Appendix D:マルウェアのハッシュ値
- 01581f0b1818db4f2cdd9542fd8d663896dc043efb6a80a92aadfac59ddb7684
- 18a696b09d0b7e41ad8ab6a05b84a3022f427382290ce58f079dec7b07e86165
- 15b8dddbfa37317ccdfbc340764cd0f43b1fb8915b1817b5666c4816ccb98e7c
- 849ec6055f0c18eff76170912d8500d3da7be1435a9117d67f2134138c7e70c3
- f19ab3fcbc555a059d953196b6d1b04818a59e2dc5075cf1357cee84c9d6260b
- 836b873ab9807fbdd8855d960250084c89af0c4a6ecb75991542a7deb60bd119
- a69a2b2a6f5a68c466880f4c634bad137cb9ae39c2c3e30c0bc44c2f07a01e8a
- bd02ca03355e0ee423ba0e31384d21b4afbd8973dc888480bd4376310fe6af71