GN⁺: 전 세계를 거의 감염시킬 뻔한 xz Utils 백도어에 대해 알고 있는 것
(arstechnica.com)xz Utils 백도어 사태: 거의 전 세계를 감염시킬 뻔한 사건에 대해 알고 있는 것
- xz Utils는 리눅스를 비롯한 거의 모든 유닉스 계열 운영체제에 설치되어 있는 데이터 압축 유틸리티임.
- 이 소프트웨어에 악의적인 업데이트가 이루어져 백도어가 심어질 뻔한 사건이 발생함.
- 마이크로소프트 개발자가 이 백도어를 발견하고 공개함으로써, 데비안과 레드햇 같은 주요 리눅스 배포판에 합쳐지기 직전의 위기를 막음.
백도어가 어떻게 작동하는가?
- 버전 5.6.0과 5.6.1에 추가된 악성 코드는 sshd, 즉 SSH 연결을 위한 실행 파일을 조작함.
- 특정 암호화 키를 가진 사람이 SSH 로그인 인증서에 코드를 숨겨 업로드하고, 백도어가 설치된 장치에서 실행할 수 있음.
- 실제로 어떤 코드가 업로드되었는지는 알려지지 않았으나, 이론적으로 암호 키 도용이나 멀웨어 설치 등 다양한 행위가 가능함.
백도어가 심어진 경로
- 백도어는 수년에 걸쳐 만들어진 것으로 보임.
- 2021년, JiaT75라는 사용자가 처음으로 오픈소스 프로젝트에 기여함.
- 2023년 1월, JiaT75는 xz Utils에 첫 기여를 하고, 이후 Jia Tan이라는 이름으로 점점 더 많은 역할을 맡음.
- Tan은 oss-fuzz 프로젝트에서 Collins의 연락처 정보를 자신의 것으로 교체하고, 테스트 중 ifunc 기능을 비활성화하도록 요청함.
- 이러한 변화는 Tan이 xz Utils에 악성 변경을 가할 때 이를 탐지하는 것을 방해함.
영향을 받은 배포판
- 페도라 Rawhide, 페도라 41, 데비안 테스팅/언스테이블/익스페리멘탈, 오픈수세 텀블위드 및 마이크로OS, 칼리 리눅스 등이 백도어가 심어진 xz 버전을 포함하고 있었음.
GN⁺의 의견
- 이 사건은 오픈소스 생태계의 보안 취약점을 드러내며, 개발자 커뮤니티의 경각심을 높이는 계기가 됨.
- 백도어가 심어진 소프트웨어가 널리 사용되는 만큼, 이번 사태는 리눅스 사용자 및 관리자에게 신속한 업데이트와 보안 점검의 중요성을 상기시킴.
- 이와 유사한 사례로 SolarWinds 해킹 사건이 있었으며, 그 사건 역시 공급망 공격의 위험성을 보여줌.
- 오픈소스 프로젝트에 기여하는 개발자들의 신원을 검증하고 코드 리뷰 과정을 강화하는 것이 필요함.
- 이번 사건을 계기로, 보안 감사와 취약점 탐지 도구의 중요성이 더욱 부각될 것으로 예상됨.
Hacker News 의견
-
OpenSSH는 가장 인기 있는 sshd 구현체로, liblzma 라이브러리에 연결되지 않지만, Debian과 다른 많은 리눅스 배포판들은 systemd에 sshd를 연결하는 패치를 추가한다. systemd는 liblzma에 연결되어 있어 xz Utils가 sshd에 영향을 미칠 수 있음.
-
Xz는 오픈 소스 압축 프로그램이자 라이브러리로, 압축된 데이터를 다루는 자신만의 프로그램을 작성하는 데 도움이 됨. OpenSSH를 포함한 많은 다른 프로그램에서 사용됨.
-
GNU의 binutils도 liblzma에 연결되어 있으며, OpenSSH보다 더 널리 사용됨. 대부분의 경우, binutils는 OpenSSH, sshd가 실행되는 운영 체제 등의 컴파일에 사용됨. 악의적인 행위자들이 오픈 소스 소프트웨어에 깊숙이 침투할 수 있는 좋은 프로젝트를 선택했음을 시사함.
-
XZ 프로젝트의 안정성을 장기적으로 돕기 위해 더 많은 테스트를 작성하는 데 도움이 될 표준화된 테스트 프레임워크 사용이 목표임. 많은 기능이 아직 테스트되지 않았기 때문에 이러한 테스트가 유용할 것임.
-
RSA_public_decrypt 함수에 연결할 수 있는 링킹 메커니즘에 대한 논의가 많지 않았음. 프로세스 분리 등을 통해 달성할 수 있는 것에 대한 많은 논의가 있었지만, 그 함수 호출 리디렉션에 대해서는 적음. 중요한 컴포넌트를 신뢰 계층 방식으로 연결할 수 있는 방법을 설정할 수 있을지에 대한 의문 제기.
-
세계를 "거의" 감염시켰다고 하는데, 실제로는 아치, 젠투, 오픈수세 텀블위드와 같은 인기 있는 리눅스 배포판들이 수주간 백도어를 포함한 상태로 배포되었고, 텀블위드에서는 확실히 작동했음. "거의"라는 표현은 부적절함.
-
향후 12개월 이내에 유사한 사례가 발견될 것이라는 예측. 유지보수자들이 서로의 과거 커밋을 의심하면서 시작될 것임.
-
이 사건에서 얻은 개인적인 교훈:
- 소스 저장소와 다른 코드를 포함하는 소스 배포 tarball은 나쁨. 이러한 방식에서 벗어나야 함.
- 자동 생성된 아티팩트는 항상 커밋되어야 함.
- 코드 리뷰 중에 누구나 넘겨보는 자동 생성된 아티팩트는 문제가 될 수 있음. 이러한 유형의 파일이 저장소에 있을 경우, 누군가가 조작하지 않았는지 확인하는 자동 테스트가 있어야 함.
- autotools와 autotools 문화는 나쁨.
- libsystemd는 생태계에 문제를 일으킴. systemd를 비판하는 사람들이 종종 무시당하지만, systemd는 크고 복잡하며 많은 의존성을 가지고 있고, 대부분의 프로그램은 그 일부만 사용함.
- 코드 재사용이 항상 좋고, 작은 기능을 위해 큰 라이브러리에 의존하는 것이 좋다는 문화는 잘못됨. 의존성은 유지 관리 부담과 보안 위험을 가져오므로, 이를 기능성과 균형을 맞춰야 함.
- 배포판 유지보수자들이 패키지에 상당한 패치를 적용하는 것은 문제가 될 수 있음. 실제로 관리하는 사람이 없는 널리 사용되는 사실상의 포크를 만들어냄.
- 개발자들에게 금전적으로 OSS 작업이 가능하도록 해야 함. liblzma와 xz-utils는 수천만 개의 설치를 가지고 있지만, 정신 건강 문제를 가진 단일 유지보수자가 있음.
- 코드 리뷰와 유지보수자 교체는 현재 지정학적 고려 사항을 고려해야 함.
-
문제를 발견한 사람이 Azure Postgres에서 일하는 마이크로소프트 엔지니어였음에 대한 감사의 표현. 이제 Azure를 좋아하게 됨.
-
xz의 원래 유지보수자가 Jia Tan에게 책임을 넘겼지만, 실제로 만나거나 전화 통화를 한 적이 없을 수도 있음. 이메일/GitHub을 통해서만 소통하는 것이 일반적인지에 대한 의문 제기. 이 이야기 이후에 오픈 소스 프로젝트의 유지보수자들이 더 조심할 것으로 예상됨.
-
이 백도어가 일찍 발견되었다고 생각하는 동안, 이미 목적을 달성했을 수도 있음. 특히 Kali와 Debian과 같은 롤링 릴리스 배포판을 사용하는 개발자들이 목표였다면 더욱 그러함.
-
xz Utils의 오랜 유지보수자인 Lasse Collin이 소프트웨어를 자주 또는 충분히 빠르게 업데이트하지 않았다는 주장은 실수였음을 시사함.