攻撃グループ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
 
        


