攻撃グループBlackTechが使用するLinux版マルウェア(ELF_PLEAD)
以前のJPCERT/CC Eyesで攻撃グループBlackTechが使用するLinux版マルウェアELF_TSCookieについて紹介しましたが、この攻撃グループは他にもLinux OS向けのマルウェアを使用することが分かっています。以前紹介したWindows OS向けマルウェアPLEADダウンローダがダウンロードするPLEADモジュールのLinux版マルウェア(ELF_PLEAD)が存在します。
今回は、Windows版マルウェア「PLEADモジュール」とLinux版マルウェア「ELF_PLEAD」を比較しながら、ELF_PLEADの特徴を紹介します。
PLEADモジュールとELF_PLEADの比較
ELF_PLEADはPLEADモジュールと同じコードを多く使用しているため、通信など機能の多くが類似しています。図1はELF_PLEADとPLEADモジュールのコードのメイン関数部分を比較した結果です。
このように処理の流れを比較するだけでも2つのマルウェアが類似していることがわかります。以降では、ELF_PLEADの次の特徴について説明します。
- 設定情報
- 通信方式
- 命令によって実行されるコマンド
設定情報
ELF_PLEADは、サイズ0x1AAの設定情報を持っています。図2は、設定情報の例です。設定情報内には通信先や、通信の暗号化に使用するキーなどの情報が含まれています。(設定情報の詳細はAppendix Aをご覧ください)
設定情報は、RC4で暗号化されており、暗号化された設定情報の前の32バイトが暗号化キーになっています。図3は、暗号化された設定情報と暗号化キーの例です。
通信方式
PLEADモジュールは、HTTPを利用してC2サーバーと通信をしていましたが、ELF_PLEADでは独自通信を使用しています。通信プロトコルは異なりますが、送信するデータのフォーマットや暗号化キーの交換方法などはほぼ同じです。図4は、ELF_PLEADの通信の流れを示しています。
ELF_PLEADとC2の最初の通信時にRC4キーの一部を交換します。その後の通信では、交換によって作成したRC4キーを使用して暗号化を行います。送信されるデータは、RC4で暗号化されて、さらにLZOで圧縮されています。(詳しい通信のフォーマットについては、Appendix Bをご覧ください。)
命令によって実行されるコマンド
ELF_PLEADは、大きく5つのコマンドグループが実装されています。以下は、実装されているコマンドグループ名です。(各グループの詳細な機能についてはAppendix Cをご覧ください。検体によってはコマンド番号が異なる場合があります。)
- CFileManager(グループ番号0): ファイル操作関連のコマンド
- CFileTransfer(グループ番号1): ファイル送受信関連のコマンド
- CRemoteShell(グループ番号2): リモートシェル関連のコマンド
- CPortForwardManager(グループ番号3): プロキシモード関連のコマンド
- 名前なし(グループ番号0xFF): マルウェア制御関連のコマンド
PLEADモジュールのコマンドと比較すると、対応する機能がほぼ同じであることがわかります。
おわりに
攻撃グループBlackTechは、TSCookie、PLEAD、KIVARSなど多くのマルウェアを使用することで知られていますが、これらのマルウェアはWindows OSだけではなくLinux OSもターゲットにしています。BlackTechに関連するマルウェアがネットワーク内で発見された場合は、Linux環境も合わせて調査することをお勧めします。
インシデントレスポンスグループ 朝長 秀誠
Appendix A: 設定情報
オフセット | 説明 | 備考 |
0x000 | RC4キー | 通信の暗号化に使用 |
0x004 | ID | |
0x024 | ポート番号1 | |
0x026 | ポート番号2 | |
0x028 | ポート番号3 | |
0x02A | 通信先1 | |
0x0AA | 通信先2 | |
0x12A | 通信先3 |
※ 検体によって、設定情報のフォーマットが異なる場合があります。
Appendix B: 送受信データの内容
オフセット | 長さ | 内容 |
0x00 | 4 | RC4キー(Key4) |
0x04 | 4 | ハッシュ値 |
0x08 | 4 | RC4キー(Key1) |
0x0C | 2 | 送信データ長 |
0x0E | 2 | オフセット0x10のデータの圧縮前の長さ |
0x10 | - | 暗号化されたデータ(RC4+LZO)(詳しくは表B-2を参照) |
オフセット | 長さ | 内容 |
0x00 | 2 | 0xFF |
0x02 | 4 | RC4キー(Key2) |
0x06 | - | ランダムなデータ(128バイト以上) |
オフセット | 長さ | 内容 |
0x00 | 4 | RC4キー(Key4) |
0x04 | 4 | ハッシュ値 |
0x08 | 4 | RC4キー(Key1) |
0x0C | 2 | 送信データ長 |
0x0E | 2 | オフセット0x10のデータの圧縮前の長さ |
0x10 | - | 暗号化されたデータ(RC4+LZO)(詳しくは表B-4を参照) |
オフセット | 長さ | 内容 |
0x00 | 2 | 0x01FF |
0x02 | 4 | RC4キー(Key3) |
Appendix C: コマンド
値 | 内容 |
4 | ランダムなデータを送信 |
5 | 再接続 |
6 | リスタート |
7 | 終了 |
8 | 終了 |
9 | socketの変更 |
11 | 接続先サーバーの変更 |
値 | 内容 |
32 | ファイル一覧の送信 |
37 | ファイルサイズ・モード・タイムスタンプの送信 |
39 | ファイル名の変更 |
41 | ファイル・ディレクトリの削除 |
43 | ファイルのアップロード |
45 | ファイルの実行 |
49 | ディレクトリの作成 |
51 | ファイルの移動 |
53 | ディレクトリの削除 |
値 | 内容 |
64 | ファイルまたはディレクトリ情報の送信 |
67 | ディレクトリの作成 |
70 | ファイルのダウンロード |
71 | ファイル情報の送信 |
75 | ファイルのアップロード |
値 | 内容 |
80 | リモートシェルの起動 |
値 | 内容 |
96 | プロキシセットアップ |
100 | プロキシ接続 |
102 | プロキシデータ送信 |
104 | - |
106 | - |
108 | プロキシ終了 |
Appendix D: 通信先
- mx.msdtc.tw
Appendix E: マルウェアのハッシュ値
- 5b5f8c4611510c11d413cb2bef70867e584f003210968f97e0c54e6d37ba8d8d
- ca0e83440b77eca4d2eda6efd9530b49ffb477f87f36637b5e43f2e428898766