XZ Utils 공급망 공격 심층 분석 — 오픈소스 생태계를 노린 2년의 침투
개요
2024년 3월, 보안 연구원 Andres Freund가 XZ Utils 압축 라이브러리에 정교한 백도어가 삽입되었다는 사실을 발견하면서 오픈소스 보안의 새로운 위협이 수면 위로 드러났습니다. 이 사건은 단순한 취약점이 아닌, 2년에 걸친 정교한 사회공학적 침투의 결과였습니다.
공격 타임라인
| 날짜 | 사건 |
|---|---|
| 2021년 초 | Jia Tan(가명) GitHub 계정 생성 |
| 2022-06 | XZ Utils 프로젝트에 첫 기여 시작 |
| 2023-06 | 핵심 기여자로 인정받아 커밋 권한 획득 |
| 2024-02-24 | XZ 5.6.0 출시 (백도어 삽입) |
| 2024-03-09 | XZ 5.6.1 출시 (백도어 개선) |
| 2024-03-29 | Andres Freund에 의해 발견 및 공개 |
| 2024-03-29 | Fedora/openSUSE 패키지 긴급 롤백 |
| 2024-03-30 | XZ 5.4.6 (안전 버전) 재릴리스 |
공격자의 사회공학 전술
이 공격에서 가장 주목할 만한 점은 기술적 정교함보다 사회공학적 침투 방식입니다. 'Jia Tan'이라는 가명의 공격자는 다음과 같은 전략을 사용했습니다.
1. 장기 신뢰 구축 (2년+)
공격자는 서두르지 않았습니다. 2022년부터 XZ Utils 프로젝트에 꾸준히 유용한 패치를 제출하며 신뢰할 수 있는 기여자로 자리 잡았습니다. 패치들은 실제로 유용했고 코드 품질도 높았습니다.
2. 기존 유지관리자 번아웃 유도
다른 가명 계정들(Hans Jansen, Jigar Kumar 등으로 추정)이 원래 유지관리자 Lasse Collin에게 업데이트가 느리다며 압박을 가했습니다. Lasse는 개인적인 정신 건강 문제를 언급하며 어려움을 토로했고, 이 틈을 타 Jia Tan이 공동 관리자 권한을 획득했습니다.
3. 점진적 권한 확대
처음에는 작은 패치부터 시작하여 점점 더 핵심적인 코드 영역에 대한 변경 권한을 확보해나갔습니다.
백도어의 기술적 분석
백도어 삽입 방식
백도어는 단순히 코드에 직접 삽입된 것이 아니라, 빌드 시스템을 통해 간접적으로 주입되었습니다.
1. configure 스크립트 수정
→ 빌드 시 특정 테스트 파일(test 파일) 압축 해제
→ 해당 파일에 백도어 코드 포함
2. Autoconf 매크로 파일(m4) 수정
→ 빌드 과정에서 악성 코드를 liblzma.so에 주입
3. liblzma 라이브러리에 백도어 삽입
→ systemd가 liblzma를 통해 libsystemd를 로드
→ 결과적으로 sshd(SSH 데몬)에 백도어 영향
백도어의 기능
삽입된 백도어는 다음과 같은 기능을 목표로 했습니다:
- SSH 공개키 인증 과정을 가로채 특정 공개키를 가진 공격자에게 인증 우회 허용
- 공격자만 알고 있는 특수한 Ed448 공개키로 서명된 명령을 실행
- 사실상 OpenSSH 서버에 숨겨진 루트 쉘 백도어
탐지가 어려웠던 이유
-
바이너리 형태로 숨겨진 코드: 실제 악성 코드는 테스트 파일 (.xz 형태)에 바이너리로 숨겨져 있어 Git 히스토리만 보면 발견하기 어려웠습니다.
-
빌드 시스템 오염: 소스 코드가 아닌 빌드 스크립트를 통해 주입되어 일반적인 코드 리뷰로는 발견이 어려웠습니다.
-
간접 체인: XZ Utils → liblzma → systemd → libsystemd → sshd로 이어지는 간접 체인을 통해 영향을 미쳐 관계 파악이 복잡했습니다.
-
조건부 실행: 특정 시스템 환경(systemd 사용 Linux 배포판, 64비트 x86)에서만 활성화되도록 설계되어 일반적인 테스트에서 탐지되지 않았습니다.
발견 경위
Andres Freund(Microsoft 소속 PostgreSQL 개발자)는 SSH 로그인 속도가 느려지고 sshd의 CPU 사용량이 높아지는 현상에 주목했습니다. 이를 추적하는 과정에서:
valgrind메모리 분석 도구 실행 시 오류 발견- liblzma 라이브러리에서 비정상적인 함수 호출 확인
- XZ Utils 5.6.x 버전에서만 발생하는 문제임을 확인
- 빌드 스크립트와 테스트 파일을 분석하여 백도어 발견
이 발견은 보안 커뮤니티에 즉시 공유되었고, 전 세계 배포판 유지관리자들이 긴급하게 취약한 버전을 롤백했습니다.
영향 범위
다행히 백도어는 실제 프로덕션 시스템에 광범위하게 배포되기 전에 발견되었습니다:
- 직접 영향: Fedora 41/Rawhide, openSUSE Tumbleweed, Debian Testing/Unstable 의 일부 버전
- 간접 영향 없음: Ubuntu, Debian Stable, RHEL/CentOS는 안전한 버전 사용 중
- 영향 없음: macOS, Windows (systemd를 사용하지 않음)
교훈과 시사점
오픈소스 생태계의 구조적 취약점
이 사건은 오픈소스 프로젝트의 핵심적인 취약점을 드러냈습니다:
- 소수 유지관리자 의존: 많은 중요 라이브러리가 1-2명의 자원봉사 유지관리자에 의존
- 번아웃 문제: 유지관리자의 지속적인 번아웃이 새로운 기여자에 대한 검증을 약화
- 공급망 신뢰 체계: 빌드 아티팩트와 소스 코드 모두를 검증하는 체계 부재
- 사회공학 방어 부재: 기술적 코드 리뷰는 있지만 기여자 신원 검증 체계 미흡
보안 강화 방안
오픈소스 프로젝트 유지관리자를 위한 권고:
- 신규 기여자에 대한 점진적 신뢰 구축 (커밋 권한 부여 전 충분한 검증 기간)
- 빌드 스크립트와 CI/CD 파이프라인에 대한 별도의 보안 감사
- 2인 이상 리뷰 정책 (특히 빌드 시스템 변경 시)
- 정기적인 유지관리자 심사 및 활동 모니터링
기업 보안 담당자를 위한 권고:
- SBOM(Software Bill of Materials) 관리 강화
- 사용 중인 오픈소스 라이브러리의 빌드 재현성 검증
- 공급망 모니터링 도구 도입 (Sigstore, SLSA 등)
- 핵심 의존성 라이브러리의 보안 감사 주기 단축
개발자를 위한 권고:
- 의존성 패키지 버전을 특정 해시로 고정
- 빌드 환경의 격리 및 재현성 확보
- 오픈소스 기여 시 계정 보안 강화 (MFA, 하드웨어 키 등)
관련 CVE
- CVE-2024-3094: XZ Utils 백도어 공식 CVE (CVSS 10.0 CRITICAL)