攻撃グループ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モジュールのコードのメイン関数部分を比較した結果です。

(左: PLEADモジュール 右: ELF_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



