올해 3월 말 즈음에, 리눅스 커뮤니티를 한바탕 뒤집어 놓은 사건이 있습니다.
XZ utils라고, 유명한 파일 압축 소프트웨어가 백도어가 심어진 채로 배포되었기 때문입니다. 정상적인 프로그램에 악성 코드를 몰래 삽입하는, 이른 바 공급망 공격이 보고된 것은 이번이 처음이 아닙니다.
그럼에도 XZ utils 백도어 사례가 큰 화두에 오른 것은 공격 진행 과정 자체가 매우 독특한 케이스이기 때문인데요.
공격 타임라인
사건의 진상은 이렇습니다.
- 기존 XZ utils 오픈소스 프로젝트는 ‘Lasse Collin’이라는 개발자가 관리
- 프로젝트가 커지면서 프로젝트 기여자가 생기기 시작했고, 2021년 경에 ‘Jia Tan’(가명일 가능성 높음)이라는 기여자가 등장
- ‘Lasse Collin’가 다른 일로 인해 프로젝트 관리에 소홀해지자, 다수의 사용자(이들도 ‘Jia Tan’과 공범일 수 있음)가 이럴 거면 관리자 권한을 다른 사람에게 넘기라고 압박을 가함
- 압박에 시달리던 ‘Lasse Collin’이 결국 ‘Jia Tan’에게 메인테이너 권한을 넘겼는데, 그 때부터 ‘Jia Tan’이 돌변하기 시작
- 교묘하게 백도어를 새 업데이트에 추가하고 각종 리눅스 커뮤니티에 해당 릴리즈를 업데이트하라고 재촉
- MS사의 개발자에 의해 백도어가 조기 발견되고, 결국 기존 프로젝트 저장소는 폐쇄, ‘Jia Tan’과 그 무리들은 잠적
백도어가 심어진 릴리즈는 5.6.0
및 5.6.1
으로, 백도어가 실행되면 SSH 설정을 건드려 인증 없이도 서버에 침투할 수 있게끔 설계되었습니다. 해당 버전은 3월 중순부터 Fedora, Debian, OpenSUSE 등에 배포되었다가 같은 달 말에 급하게 내려갔습니다.
이번 사태가 주목 받는 이유
전문가들이 평가하길, 최근 일어난 XZ 백도어 이슈는 “사회공학적 해킹"의 위험성을 강하게 각인시킨 사건입니다. 사회공학적 해킹은 시스템이 아닌 사람, 즉 소유주나 사용자를 공략하는 공격 기법을 통칭합니다.
앞서 공격 과정을 다시 한번 살펴보면, 백도어 배포자인 ‘Jia Tan’와 한 패로 추측되는 사용자들에게 지속적으로 기존 관리자를 심리적으로 괴롭혔습니다. 실제로 관리자 ‘Lasse Collin’은 아래 보시다시피 대놓고 비방의 내용이 담긴 메일을 수차례 받아왔습니다.
이런 비방글의 요지는 “Lasse Collin, 당신이 더 이상 관리를 못하니 프로젝트를 다른 사람에게 넘겨라”입니다. 그리고 공격자는 양도 받는 대상이 본인이 되게끔, 오픈소스 관리자에게 미리 좋은 평판을 얻어두는 것이죠. 요즘 말로 하면 ‘호감작’을 착실히 수행한 셈입니다. 그리고 관리자는 믿는 도끼에 발등이 찍힌 거나 다름이 없죠.
이 일련의 과정에서 공격자가 관리자 계정을 털거나 관리자 몰래 악성 스크립트를 집어 넣는 행위는 일체 존재하지 않았습니다. 오로지 다른 일로 바빠 프로젝트 관리에 힘쓰지 못한 메인테이너의 상황, 그리고 그 사람의 감정을 취약점 삼아 집요하게 파고든 것이죠.
결국 계획했던 대로 관리자 권한을 부여 받은 ‘Jia Tan’은 백도어가 안 들키도록 빌드 중 일부 기능을 비활성화시켰으며, 검열 기능이 빠져 백도어가 차기 업데이트에 심어진 것입니다.
시사점
한편으로는 “아무리 그래도 그렇지, 관리자 권한을 넘기면 쓰냐?”라고 되물어볼 수도 있겠죠. 그러나 오픈소스 생태계는 꼭 빅테크 기업들이 운영하는 대형 서비스처럼 체계적으로 관리 감독이 이뤄지지 않고 있다는 점을 알아야 합니다.
대형 프로젝트 그리고 프레임워크 아래에는 이를 지탱하기 위한 수많은 사이드 프로젝트와 라이브러리, 패키지 등이 존재하며, 이렇게 자잘한 오픈 소스들은 대게 소수의 개발자들이 무보수임에도 시간을 내서 만든 것들이 대다수입니다. 취미로 프로젝트를 만든 프리랜서 일수도 있고, 실제로는 전혀 다른 일을 하는 사람일 수도 있죠.
최소 10명 정도 되는 공동 관리자가 존재했다면 누구 하나가 수상한 짓을 해도 좀 더 일찍 알아차렸을 겁니다. 오픈소스의 거버넌스 관리와 메인테이너 권한을 남용할 수 없도록 기술적으로나 제도적인 장치가 필요한 상황입니다.
여기에 더해, 악의적인 기여자와 그들의 코드를 면밀히 검사할 수 있는 도구나 가이드라인도 마련되어야겠죠. Github는 커밋 내용에 개인정보나 의심스러운 내용이 보이면 메일로 경고해주는 기능을 제공해주고 있긴 합니다. 좀 더 보안을 강화하기 위해선 소스 코드 정적 분석과 리버싱을 곁들여 개발자가 쉽게 발견하기 어려운 사각지대를 차단하는 것이 바람직해 보입니다.
보안 분야에 종사하는 저로써는 오히려 이런 사태로 인해 누구나 기여가 가능한 오픈소스 생태계의 자유분방함을 우려할 수 있다고 생각합니다. 본의 아니게 피해를 본 Lasse Collin와 같은 개발자들의 마음에 백 번 공감하면서, 오픈소스 신뢰성을 크게 개선할 수 있는 획기적인 방안이 나오길 기원합니다.
이 일이 있고 난 이후…
‘Lasse Collin’에 따르면(아래 페이지 참고), 기존 프로젝트 저장소 주소는 폐기하고 새 저장소를 열었으며 백도어와 연관된 PR들을 취소하고 가장 stable 버전인 5.4.6
으로 롤백해 둔 상태입니다.
혹시나마라도 의심되는 코드들을 깔끔히 수정하고 5.8.0
버전을 출시하겠다고 발표하였으나, 사건 발생 후 1달이 지난 지금까지는 별 다른 소식이 없습니다.
해당 취약점은 CVE-2024-3094라는 식별 번호를 할당 받았으며, 보안 심각도 점수는 10점 만점이 매겨졌습니다.
졸지에 기존 관리자였던 ‘Lasse Collin’도 ‘Jia Tan’과 함께 깃허브 계정 정지를 당했다가 지금은 풀려났다고 합니다. 사건의 주범인 ‘Jia Tan’은 당연하겠지만 활동을 멈추고 잠적한 것으로 보입니다.
혹시나! 내 PC에도?
Linux/MacOS 계열의 PC나 서버를 소유하고 있다면 XZ utils이 설치되어 있을 가능성이 높습니다. 문제가 되는 버전은 5.6.0
~ 5.6.1
로, 터미널에서 아래의 명령어를 실행시켜 해당 버전과 일치하는 지 체크해봐야 합니다.
xz -V
취약 버전이 확인된다면, 다음과 같이 xz 패키지를 다운그레이드합니다.
# MacOS 계열
brew install xz
# Ubuntu/Debian 계열
sudo apt-get install xz-utils=5.4.6
# CentOS/Fedora 계열
sudo yum downgrade xz-utils-5.4.6