개요
https://m.boannews.com/html/detail.html?idx=128372
XZ Utils 백도어 악성코드, 2021년부터 공들여 준비해온 공급망 공격이었다
리눅스와 GNU 운영체제에서 제공되는 범용 데이터 압축 형식 프로그램 XZ Utils에서 백도어 취약점이 발견돼 이용자들의 각별한 주의가 요구된다. 특히 XZ Utils는 리눅스 OS 운영체제에서 기본적으
m.boannews.com
2024년에 발생한 xz-유틸리티 백도어 사건에 대해 들어보신 분이 많을 거라고 생각한다.
악성코드 취약점 보안 사고에 대해 찾아보고.. 공부하던 중 xz 유틸리티 백도어 사건에 대해 접했는데 당시 들어는 봤지만 자세한 내막까진 읽어보지 못했다. 읽어보니 꽤나 인상 깊어 내용을 정리하고자 글을 작성한다.
사건에 대해 설명하기에 앞서 먼저 xz 유틸리티가 무엇인지에 대해 설명하고자 한다.
xz-utils란?
C언어로 개발된 개발자 라쎄콜린(Lasse Collin)이 개발한 오픈 소스 CLI 무손실 압축 알고리즘 프로그램이다.
Lempel-Ziv-Marakov Chain Algorithm을 사용하기에 LZMA이라고도 불린다.
XZ는 기존 리눅스에서 광범위하게 사용되는 압축 방법인 gzip, bzip2보다 더 높은 압축률을 보여주면서 커맨드라인으로 접근이 쉽다는 장점이 있었기 때문에 tar 파일 압축, 리눅스 커널 압축 등 특히 리눅스 배포 시 사용되는 압축 플랫폼으로 광범위하게 사용되고 있다.
나도 학교 수업을 들으며 리눅스 실습을 할 당시 tar.xz 등으로 압축 한 경험이 있기에 얼마나 광범위하게 사용되고 있는 유틸리티인지 인지하고 있어 더 사건이 색다르게 다가왔다.
백도어 발견?
2024년 3월 28일 마이크로소프트(Microsoft) 수석 개발자인 안드레스 프로인트(Andres Freund)가 XZ유틸즈(XZ-Utils)에 심어진 백도어를 발견했다. 이 백도어는 공격자가 인증과정 없이 무단으로 시스템에 접근할 수 있도록 보안체계를 무력화한다.
그런데 이 백도어가 심어져 있음을 발견한 것도.. 데비안 시스템에서 SSH를 사용할 때 성능 이슈가 있어 자세히 보고 있던 중 SSH 로그인 과정에 너무 많은 CPU 사이클을 잡아먹고 에러가 발생해 발견하고 이 때문에 좀 더 깊게 디버깅해보니 이 유틸리티에 백도어가 심어져 있다는 걸 발견하게 된 것이다.
어찌 보면 이 과정이 없었다면 백도어는 발견되지 않은 채 수많은 사람들에게 피해를 주고 있었을 수도 있는.. 그런 상황이었다.
사건 배경
대부분의 해킹은 우리가 생각하는 것처럼 막 집에서 컴퓨터로 우다다다 원격 공격을 하는 것이 아니라 물론 그런 경우도 있겠지만 주로 소셜 해킹, 즉 사회공학적 기법을 활용해 사람을 통해 해킹하는 방법이 많다고 하는데 이 xz 유틸리티 백도어 사건도 비슷한 느낌이다.
현재는 xz 유틸리티의 깃허브 저장소가 어떻게 관리되고 있는지까진 자세히 모르지만 (지금도 접근이 되는지.. 여기까진 자세히 모른다.) 당시에는 오픈소스 유틸리티로 모든 개발자들이 코드를 수정해서 올릴 수 있었다. (물론 무분별한 승인이 된다는 뜻은 아니다.)
타임라인
전체적으로 큰 흐름이다. 년도만 봐도 지아탄이 첫 패치를 추가한 21년도부터 시작해 백도어가 발견되는 24년까지 장장 3년에 걸친 오랜 시간을 지아탄이 공들인 사건이라고 볼 수 있다. 대단하다.. 여러모로

사건의 타임라인에 맞춰 과정을 설명할 것이다.

먼저 Jia Tan, 편의상 지아탄이라고 부를 것이다. 지아탄은 공개되어 있는 xz 유틸리티 소스에 2021년 10월과 11월에 두 차례 첫 패치, 두 번째 패치를 보낸다. 이때까진 크게 문제가 없는 정상적인 코드이다.

그리고 2022년 2월 6일에 처음으로 지아탄의 계정인 jiat75 계정으로 커밋이 추가되는데 널 검사를 추가하는 내용이다.
아까도 대략 설명은 했지만 깃허브의 저장소에 있는 코드에 모든 개발자들이 코드를 수정해 올릴 수 있지만 실제로 이 수정본이 머지할 수 있을지에 대해서는 메인테이너라고 하는 관리자? 의 승인이 필요하다.
상황의 메인테이너는 처음 부분에 소개한 라쎄콜린인 것이다.

이후 Jigar Kumar라는 사람과 Dennis Ens라는 사람이 등장한다.
이 사람들은 라쎄 콜린에게 지속적으로 압력 이메일을 보내며 수정본을 합병해 달라고 요청하거나 당신이 당신의 저장소를 질식시키고 있는 중이라는 등 가스라이팅을 해대고 있다.
2022년 4월 22일에 처음 불평하는 메일을 시작으로 지속적으로 라쎄 콜린에게 메일을 보낸다.
이에 라쎄 콜린은 본인은 장기적인 정신 건강 문제뿐만 아니라 다른 이유로 인해 치료 능력이 상당히 제한되어 있다는 점. 그리고 또한 무급으로 진행하는 취미 프로젝트라는 점을 언급하며 늦어지고 있다고 답을 한다.
여기서 오픈소스 프로젝트의 명백한 단점이 드러나게 된다.
오픈 소스 프로젝트는 본업이 아니라 대부분 본업은 따로 둔 채 취미로 개발되고 유지보수 되는 경우가 많은데, 라쎄 콜린도 이러한 경우였던 거 같고 무보수에 많은 시간을 할당해야 하게 되며 라쎄 콜린은 부담을 느끼게 됩니다.

이후에도 지갈 쿠머와 데니스 앤스는 계속해서 압박 이메일을 보낸다.
2022년 6월 21일 데니스 앤스는 라쎄 콜린에게 힘들다면 더 많은 것을 원하는 사람들을 위해 xz에 더 많은 관심을 기울일 수 있도록 권한을 다른 사람에게 넘겨주는 게 어떻겠냐?라는 내용의 메일을 보내게 되고 라쎄 콜린은 결국 처음부터 여러 패치판을 제공해 주었던 Jia Tan에게 관리자를 넘겨주게 된다.
이렇게 지아탄은 관리자 권한을 얻게 되고 이제부턴 원하는 대로 코드를 수정할 수 있게 된 것이다.
나중에 밝혀진 사실이지만 여기서 나오는 계속해 라쎄콜린을 협박해오고 있는 Jigal Kummer와 Dennis Ens가 모두 같은 계정이라 추측되었다는 점이다.
지아탄이 관리자 권한을 넘겨받기 위해 첫 패치 수정부터 압박 메일까지 전부 혼자 진행한 자작극..이었던 셈이다.

그렇게 권한을 얻은 지아탄은 2024년 2월 23일 백도어 바이너리 코드를 추가하게 된다.
이 백도어 파일을 추가한 방법이 굉장히 어떻게 보면 얍삽한 부분 중 하나로 바이너리 코드로 되어 있는 텍스트 파일로 집어넣었다는 점이다. 바이너리 코드는 개발자들이 일반적으로 쓰는 C언어나 자바 같은 언어가 아니라 이진수로 되어 있는 코드이다.
개발자들은 바이너리 코드에 대해 익숙하지 않은 것이 당연한 일이었고 바이너리 코드만 보았을 때 개발자들은 이 코드가 어떤 행위를 수행하는지 쉽게 이해할 수 없었다.
지아탄은 이 점을 이용해 바이너리 코드에 백도어를 숨겨서 병합했다.

또한 지아탄은 랜드락이 돌지 않도록 코드를 조작했다.
리눅스의 Land lock 기능은 리눅스 커널의 보안 기능 중 하나로 프로세스의 리소스 접근을 제한해 보안을 강화하는 역할을 한다. 당연히 보안이 강화되어 있으면 지아탄이 악성행위를 수행하는 데에 방해가 될 것임으로 해당 코드를 조작했는데 이 방법이 또 엄청.. 대단하다
코드를 아주 아주 아주 아주 잘 읽어보면 my_sandbox라는 함수가 실행되기 전 줄에 점 하나가 찍혀있는 것을 볼 수 있다. 이 점 하나 때문에 코드 자체가 에러가 나 돌아가지 않게 만들어 랜드락을 사용할 수 없게 조작한 것이다.

그런데 이후 지아탄에게 문제가 발생했다.
깃허브에 한 conversation이 올라오게 되는데 xz를 포함하고 있는 라이브러리 lzma를 라이브러리 시스템 뒤에서 항상 로드하는 것이 아닌 필요할 때 로드할 수 있도록 수정하는 내용이다.
이 전에는 lzma가 항상 로드되어있었는데 이젠 그렇지 않게 되며 지아탄은 이 변경사항이 적용되기 전에 빨리 공격을 진행해야 하는 상황이 된 것이다.

또한 지아탄에게 문제가 하나 더 발생한다. get_cpuid라는 함수에서 에러가 발생하게 된 것이다. 문제는 이 함수가 백도어의 진입점이었기 때문에 지아탄은 어서 이 함수에 대한 에러를 고쳐야 했다.
또한 xz 유틸리티는 오픈 소스 이므로 다른 개발자가 해당 함수의 에러를 발견하고 고치기 위해 자세히 디버깅을 하기 전에 고쳐야 했다. 다른 개발자가 디버깅하다 백도어가 심어져 있는 게 들키면 안 되기 때문에 지아탄은 엄청.. 바빠진 것이다

2024년 3월 5일 아까 예정이라 올라온 lzma 동적 로딩이 병합되었다.


2024년 3월 5일 지아탄은 두 가지 버그를 수정한다. 이 버그는 실제 버그를 수정했던 거 같다.
3월 8일 위에서 나왔던 get_cpuid 함수 에러를 수정하게 된다. 무려 4일 만에 해결했다.
3월 9일 백도어 파일을 업데이트한다.

3월 20일 라쎄 콜린은 LKML에 메일이 자신의 개인으로만 되어 있던 것을 지아탄과 동시에 등록해 달라고 요청하고 있다.
지아탄은 이미 앞서 라쎄 콜린에게 꽤 많은 신뢰를 얻은 것으로 보이며 (관리자 넘겨준 거부터 이미..) 이를 통해 해킹을 함에 있어서 가장 무서운 점은 사회공학적 기법이 사용됨을 어떻게 방지할 수 있는지.. 에 대해 깊은 고민이 필요하다는 점이라는 생각이 들었다.

2024년 3월 25일 전에 압박메일을 보내던 사람 중 한 명인 Hans Jansen이 돌아와 xz 유틸리티를 5.6.1 버전으로 업데이트해달라고 요청한다.
5.6.1 버전은 백도어가 포함되어 있는 버전이고 3월 27일 데비안을 해당 버전으로 업데이트하게 된다. 추가로 28일에도 우분투까지 업데이트해달라고 요청하는 등의 과정을 볼 수 있다
이대로 배포되고 탐지되지 못했다면 리눅스를 사용 중인 많은 사람들이 굉장히 큰 피해를 입었을 것으로 유추된다.
하지만 2024년 3월 28일 마이크로소프트의 개발자 안드레스가 이상함을 감지하고 데비안에 제보를 하게 된다. 이에 CVE-2024-3094 취약점으로 등록되며 버전을 다시 롤백하게 된다.
다행히 백도어 버전이 많이 퍼지기 전에 금방 공격이 감지되어 큰 피해는 없었다. 이렇게 몇 년에 걸친 지아탄의 공격은 끝이 나게 된다.
시사점
전문가들이 평가하길, 최근 일어난 XZ 백도어 이슈는 사회공학적 해킹의 위험성을 강하게 각인시킨 사건이다. 사회공학적 해킹은 시스템이 아닌 사람, 즉 소유주나 사용자를 공략하는 공격 기법을 통칭한다.
앞서 공격 과정을 다시 한번 살펴보면, 백도어 배포자인 지아탄과 한 패로, 혹은 동일 인물로 추측되는 사용자들에게 지속적으로 기존 관리자를 심리적으로 괴롭혔다. 실제로 관리자 라쎄 콜린은 대놓고 비방의 내용이 담긴 메일을 수차례 받아왔다.
이 과정에서 공격자가 관리자 계정을 몰래 턴다거나 몰래 악성 코드를 집어넣는 행위는 하지 않았다. 오로지 힘에 부치는 메인테이너의 상황과 그 사람의 감정을 취약점으로 삼아 파고든 것이다.
이로 인해 결국 지아탄은 관리자 계정을 얻었고 빠른 시일 내에 호기심 많은 개발자에 의해 발견되었다곤 하지만 발견되기 이전까지 지아탄의 목표는 모두 달성되었던 셈이다.
개발자가 호기심이 많지 않았다면, 지아탄이 조금이라도 더 철저하게 악성코드를 삽입해 놨다면 그 피해에 대해선 감히 상상할 수 없을 것이다.
또한 이렇게 한층 강화된 운영체제 수준에서 이루어지는 공급망 공격은 아직까지 정확하게 탐지할 수 있는 방법이 없다고 한다. 지아탄의 백도어도 나중에 확인해 보니 로그도 남아있지 않더라는 이야기도 있을 정도이다.
더 고도화된, 그리고 앞으로도 더 고도화될 공급망 공격과 오픈소스의 위험성, 사회공학적 특성 등을 보안 분야에 종사함에 있어 어떻게 이를 대처하고 극복해나가야 할지에 대해서는 계속해서 숙제가 될 것이다.
또 졸지에 기존 관리자였던 라쎄 콜린도 지아탄이랑 같이 깃허브 계정이 정지되었다가 지금은 풀렸다고 한다.
혹시 내 PC도?
리눅스나 맥 OS계열의 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
'etc > 보안 기사, 논문 리뷰' 카테고리의 다른 글
| [review paper] PE 파일 헤더 제거를 이용한 안티 메모리 포렌식 기법 대응방안 연구 (0) | 2026.03.18 |
|---|