GN⁺: xz 오픈소스 공격의 전체 타임라인 정리
(research.swtch.com)- 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 등 다각도로 보안성을 높이려는 노력과 함께 현대적 도구로의 전환도 요구될 것.
- 백도어의 숨겨진 활성화 조건, 유포 경로, 영향 범위 등 자세한 분석 결과에 관심이 쏠릴 것임. 향후 비슷한 유형의 공격을 방어하기 위한 통찰을 얻을 수 있을 것.
이 사건을 계기로 걱정이 드는게..
오픈소스 개발자 pc해킹 or 납치/감금 후 or 돈으로 매수하여 악성코드를 심는다던지..
돈을 생각하니 오픈소스 개발자는 잘살고 있나 하는 생각도 들고 그러네요?
Hacker News 의견
-
사건에 대한 훌륭한 요약과 모든 링크가 한 곳에 모여 있어 사회공학적 공격이 실제로 어떻게 전개되는지 배우고 싶은 사람에게 완벽한 자료임.
- "공격 시작" 부분에서 Ubuntu와 Debian은 언급되었지만 Fedora는 빠져 있어 완성도를 높이기 위해 추가될 수 있음.
- Fedora에 대한 사회공학적 압박이 2024년 3월 4일 이전 주에 시작된 것으로 보임.
-
Fedora 타임라인이 누락되었음을 지적함.
- "Jia Tan"이라는 사람이 2월 27일부터 3월 27일 사이에 연락을 시도하여 Fedora 40과 41에 새로운 xz를 포함시키려 했음.
-
시스템 내에서 이해하기 어려운 코드를 더 이상 용납하지 말아야 한다는 의견 제시.
- M4와 복잡한 쉘 스크립트를 없애야 할 때라고 주장함.
-
업그레이드에 대한 보수적인 태도가 증가할 수 있는 긍정적인 결과 중 하나로 보임.
- 개발자를 포함한 많은 사람들이 업그레이드를 항상 좋은 것으로 받아들이는 대신 위험과 이점을 신중하게 고려해야 함.
-
FOSS 커뮤니티에서 무례한 사용자를 체계적으로 금지하거나, 커뮤니티 인식을 높여 무례한 행동에 더 강하게 대응하는 문화 변화가 일어날 수 있음을 제안함.
-
이메일 주소 형식에 대한 관찰이 잘못되었다는 지적.
- Jigar Kumar와 Dennis Ens의 이메일 주소 형식이 다르며, 이는 양자가 같은 사람(sokcpuppets)임을 증명하거나 반증하지 않음.
-
사회적 압박이 얼마나 쉽게 사람들로 하여금 통제력을 포기하게 하는지에 대한 우려 표현.
- XZ의 원작자에게 이 사건이 얼마나 충격적일지 상상할 수 없으며, 이 사건이 다른 오픈소스 관계자들에게 타인의 압박에 굴복하지 말라는 강력한 예가 되기를 바람.
-
유지보수자로서, 기여자나 사용자가 끈질기게 요구할수록 그 요청을 들어줄 가능성이 낮아짐을 강조함.
-
Joe Cooper의 의견을 인용하며, 프로젝트 유지보수자에 대한 압박에 대한 그의 견해를 공유함.
-
숨겨진 백도어 바이너리 코드가 바이너리 테스트 입력 파일 내에 잘 숨겨져 있으며, 이 파일들은 대부분 수작업으로 헥스 에디터로 만들어졌기 때문에 파일 자체가 최고의 "소스 코드"임을 설명함.
- 이는 오픈소스 소프트웨어에서 지원되지 않는 하드웨어를 위해 바이너리 블롭을 옹호하는 사람들에게 경고가 됨.
- 소스 형태로 재현 가능하거나 아니면 존재하지 않아야 함을 주장함.