- 2년 넘게 "Jia Tan"이라는 이름을 사용하는 공격자가 xz 압축 라이브러리에 성실하고 효과적인 기여자로 활동하여 최종적으로 커밋 권한과 관리자 권한을 부여받음.
- 그 권한을 사용하여 Debian, Ubuntu, Fedora 및 기타 systemd 기반 Linux 시스템에서 OpenSSH sshd의 종속성이기도 한 xz의 일부인 liblzma에 매우 미묘하고 주의 깊게 숨겨진 백도어를 설치함.
- 이 백도어는 SSH 세션 시작 시 공격자가 숨겨진 명령을 보내는 것을 감시하여, 로그인하지 않고도 대상 시스템에서 임의의 명령을 실행할 수 있는 기능을 공격자에게 제공함. 인증되지 않은 대상 원격 코드 실행임.
- 이 공격은 2024년 3월 29일 공개적으로 공개되었으며, 널리 사용되는 오픈소스 소프트웨어에 대한 최초의 심각한 공급망 공격으로 보임.
- 오픈소스 공급망 보안에 있어 분수령이 될 사건임.
- 이 게시물은 2021년 말로 거슬러 올라가는 것으로 보이는 이 공격의 사회공학적 측면에 대해 구성한 자세한 타임라인임.
서막
- 2005-2008년, Lasse Collin이 다른 사람들의 도움을 받아 gzip보다 파일을 약 70%로 압축하는 LZMA 압축 알고리즘을 사용하여 .xz 파일 형식을 설계함.
- 이 형식은 시간이 지나면서 tar 파일, Linux 커널 이미지 등을 압축하는 데 널리 사용되게 됨.
Jia Tan의 등장과 지원자들
- 2021-10-29: Jia Tan이 xz-devel 메일링 리스트에 첫 번째 무해한 패치를 보냄.
- 2021-11-29: Jia Tan이 두 번째 무해한 패치를 보냄.
- 2022-04-19: Jia Tan이 또 다른 무해한 패치를 보냄.
- 2022-04-22: "Jigar Kumar"가 Jia Tan의 패치가 아직 머지되지 않았다고 불만을 표함.
- 2022-05-19: "Dennis Ens"가 XZ for Java의 유지 관리 상태를 문의함.
- 2022-05-19: Lasse Collin이 느린 응답에 사과하며, "Jia Tan이 XZ Utils에 대해 오프리스트로 도와주고 있으며, 적어도 XZ Utils에서 더 큰 역할을 맡을 수 있을 것"이라고 답변함.
- 2022-05-27: Jigar Kumar가 패치 스레드에 압박 이메일을 보냄.
- 2022-06-07: Jigar Kumar가 Java 스레드에 압박 이메일을 보냄.
- 2022-06-08: Lasse Collin이 관심을 잃지 않았지만 정신 건강 문제로 인해 제한적이라고 답함.
- 2022-06-10: Lasse Collin이 Jia Tan이 작성한 첫 커밋을 머지함.
- 2022-06-14: Jugar Kumar가 또 다른 압박 이메일을 보냄.
- 2022-06-21: Dennis Ens가 유지 관리를 다른 사람에게 넘길 것을 제안하는 압박 이메일을 보냄.
- 2022-06-22: Jigar Kumar가 C 패치 스레드에 압박 이메일을 보냄.
- 2022-06-29: Lasse Collin이 "Jia Tan이 프로젝트에서 더 큰 역할을 맡을 수 있음"을 시사하며 답변함.
Jia Tan이 유지 관리자가 되다
- Lasse는 Jia Tan과 더 밀접하게 협력하기 시작한 것으로 보임. Jigar Kumar와 Dennis Ens는 가짜 인물일 가능성이 높음.
- 2022-09-27: Jia Tan이 5.4.0 릴리스 요약을 제공함.
- 2022-11-30: Lasse Collin이 버그 리포트 이메일을 개인 주소에서 Jia Tan과 공유하는 별칭으로 변경함.
- 2022-12-30: Jia Tan이 xz 저장소에 직접 첫 커밋을 머지함.
- 2023-01-11: Lasse Collin이 마지막 릴리스인 v5.4.1을 태그하고 빌드함.
- 2023-03-18: Jia Tan이 첫 릴리스인 v5.4.2를 태그하고 빌드함.
- 2023-03-20: Jia Tan이 Google oss-fuzz 구성을 업데이트하여 버그를 자신에게 보내도록 함.
- 2023-06-22: Hans Jansen이 "GNU indirect function" 기능을 사용하는 패치 쌍을 보내고, Lasse Collin이 재작업하여 Jia Tan이 머지함.
- 2023-07-07: Jia Tan이 oss-fuzz 빌드 중 ifunc 지원을 비활성화함.
- 2024-01-19: Jia Tan이 웹 사이트를 GitHub 페이지로 이동하여 XZ Utils 웹 페이지를 제어함.
공격 시작
- 2024-02-23: Jia Tan이 테스트 입력 파일 내에 숨겨진 백도어 바이너리 코드를 머지함.
- 2024-02-24: Jia Tan이 v5.6.0을 태그하고, 악의적인 build-to-host.m4를 포함한 xz-5.6.0.tar.gz 배포판을 게시함.
- 2024-02-24: Gentoo에서 5.6.0에서 충돌이 발생하기 시작함.
- 2024-02-26: Debian이 xz-utils 5.6.0-0.1을 unstable에 추가함.
- 2024-02-28: Debian이 xz-utils 5.6.0-0.2를 unstable에 추가함.
- 2024-02-29: GitHub에서 @teknoraver가 liblzma를 libsystemd에 연결하지 않도록 하는 풀 리퀘스트를 보냄.
- 2024-02-28: Jia Tan이 랜드락 지원을 확인하는 데 사용되는 C 프로그램에 미묘한 오타를 추가하여 configure 스크립트의 랜드락 감지를 깨뜨림.
- 2024-03-04: RedHat 배포판에서 liblzma의 _get_cpuid에서 Valgrind 오류가 발생하기 시작함.
- 2024-03-05: libsystemd PR이 병합되어 liblzma가 제거됨.
- 2024-03-05: Debian이 xz-utils 5.6.0-0.2를 testing에 추가함.
- 2024-03-05: Jia Tan이 ifunc 버그 수정을 커밋함.
- 2024-03-08: Jia Tan이 Valgrind 수정을 위한 커밋을 함.
- 2024-03-09: Jia Tan이 백도어 파일을 업데이트한 커밋을 함.
- 2024-03-09: Jia Tan이 v5.6.1을 태그하고 xz 5.6.1 배포판을 게시함.
- 2024-03-20: Lasse Collin이 커널의 xz 압축 코드 유지 관리자로 자신과 Jia Tan을 추가하는 패치 세트를 LKML에 보냄.
- 2024-03-25: Hans Jansen이 xz-utils를 5.6.1로 업데이트하기 위한 Debian 버그를 파일함.
- 2024-03-28: Jia Tan이 Ubuntu 버그를 파일하여 xz-utils를 Debian에서 5.6.1로 업데이트하도록 함.
공격 탐지
- 2024-03-28: Andres Freund가 버그를 발견하고 Debian과 distros@openwall에 비공개로 알림. RedHat이 CVE-2024-3094를 할당함.
- 2024-03-28: Debian이 5.6.1을 롤백하고 5.6.1+really5.4.5-1을 도입함.
- 2024-03-29: Andres Freund가 "지난 몇 주 동안" 발견했다고 말하며 공개 oss-security@openwall 리스트에 백도어 경고를 게시함.
- 2024-03-29: RedHat이 Fedora Rawhide와 Fedora Linux 40 베타에서 백도어가 포함된 xz가 배포되었다고 발표함.
- 2024-03-30: Debian이 빌드를 중단하고 Debian stable을 사용하여 빌드 머신을 재빌드함.
GN⁺의 의견
- 이 사건은 오픈소스 소프트웨어의 공급망 공격에 대한 중요한 전환점이 될 것임. 장기간에 걸친 공모자의 사회공학적 접근을 통해 신뢰를 얻고 접근 권한을 확보한 뒤, 광범위하게 사용되는 핵심 라이브러리에 은밀하게 백도어를 설치했기 때문.
- 오픈소스 프로젝트의 거버넌스와 권한 이양 프로세스에 대해 재고할 필요가 있음. 핵심 메인테이너의 개인적 사정에 프로젝트가 좌우되지 않도록 분산된 거버넌스 모델을 고려해 볼 만함.
- 주요 오픈소스 프로젝트에 대한 보안 감사와 코드 리뷰가 더욱 중요해질 것임. 수상한 변경사항을 탐지하고 권한이 악용되는 것을 막기 위한 자동화된 점검 도구도 필요함. 예를 들어 바이너리 데이터 추가에 대한 경고 등.
- 공개적으로 개발되고 누구나 기여할 수 있다는 오픈소스 방식의 장점을 훼손하지 않으면서도, 악의적 기여자를 선별하고 공격을 조기에 차단할 수 있는 기술적/제도적 방안이 마련돼야 할 것임.
- 보안이 취약한 언어나 도구를 사용하는 오픈소스 프로젝트일수록 위험이 클 것임. 메모리 안전성, 정적 분석, Fuzzing 등 다각도로 보안성을 높이려는 노력과 함께 현대적 도구로의 전환도 요구될 것.
- 백도어의 숨겨진 활성화 조건, 유포 경로, 영향 범위 등 자세한 분석 결과에 관심이 쏠릴 것임. 향후 비슷한 유형의 공격을 방어하기 위한 통찰을 얻을 수 있을 것.