1년 전 충격 안겼던 도커허브 백도어, 아직 살아 있다
- XZ유틸즈, 1년 전 보안 업계에 큰 충격 전파
- 하지만 여전히 살아 있는 백도어
- 35개 이미지에서 이 백도어 발견됨
도커허브(Docker Hub)에서 악성 도커 이미지가 발견됐다. 이 이미지 안에는 백도어가 포함돼 있었다고 한다. 백도어의 이름은 XZ유틸즈(XZ Utils)로, 이미 1년 전에 발견됐던 것이다. 문제는 “1년 넘은 백도어가 아직도 생태계에 남아 있다”는 것과 “이 백도어가 여러 이미지를 타고 확산됐다”는 것이라고 보안 어체 바이너리리서치(Binary Research)는 짚었다.
“저희가 발견한 것만 총 35개 이미지에 백도어가 설치돼 있었습니다.” 바이너리 측의 설명이다. “전부 도커허브에서 다운로드 가능했습니다.” 과거의 망령이 아직까지 온전히 축출되지 않았다는 것이 도커 생태계의 약점을 드러내고 있다고 바이너리는 강조했다.
XZ유틸즈?
원래 XZ유틸즈는 도커 이미지 중 하나다. 그런데 2024년 3월 이 이미지의 5.6.0 버전과 5.6.1 버전에 백도어가 심겨진 채 유통되는 일이 발생했다. 그러면서 도커 이미지를 감염시켜 퍼지는 백도어가 있다는 사실이 세상에 공개됐는데, 그 백도어가 자연스럽게 XZ유틸즈라는 이름을 가져갔다. 사실은 ‘XZ유틸즈에 있던 백도어’인데, 중간에 글자 몇 개가 사라졌다.
XZ유틸즈 백도어는 SSH를 통해 무단 원격 접근을 허용하고, 임의의 페이로드를 실행하는 기능을 가지고 있는 것으로 분석됐다. liblzma.so라는 라이브러리 내부에 심겨져 있고, 오픈SSH(OpenSSH) 서버에서 사용된다. “감염된 오픈SSH 서버와 클라이언트가 상호 연결돼 특정 행위가 오갈 때 백도어가 작동을 시작합니다.”
하지만 이 XZ유틸즈 사건이 진짜 큰 충격을 준 건 다른 데 이유가 있었다. 악성 코드를 라이브러리에 삽입한 채 배포한 자가 지아탄(Jia Tan)이라는 이름으로 2년에 걸쳐 오픈소스 프로젝트에 참가 및 기여했다는 것이 밝혀졌기 때문이다. 즉 공격자는 오픈소스 관리자로서 권한을 받기 위해 순수 기여로만 2년이나 신뢰를 쌓았다는 것으로, 해당 캠페인이 얼마나 치밀하게 기획되고 실행됐는지 알 수 있게 됐다.
공격자의 이러한 집요함은 도커 생태계와 보안 업계 전반에 큰 경각심을 심어줬다, 고 여태까지 여겨졌었다. 하지만 해당 백도어는 아직도 생태계를 돌아다니고 있었고, 여전히 많은 이미지를 감염시키고 있었다. 악성 도커 이미지를 통한 공급망 공격이 1년 넘게 이어져 오고 있었다는 의미다.
그렇게나 시끄러웠는데 왜 개선 없는가
‘공격자가 2년이나 착한 기여자 행세할 정도로 공들여 심은 백도어’라는 의미에서 여러 시사점을 남겼지만, 여전히 그 백도어가 살아남아 있는 건 왜일까? 이는 일부 사용자의 ‘보안 해이’ 때문이기도 하지만, 도커 생태계의 구조적 한계 때문이기도 하다.
도커 이미지들은 최초 상태로 남아 있지 않다. 최초로 만들어진 이미지는 생태계 안에서 유통되면서 계속해서 변한다. 그러므로 버전이 다양해지고, 실제 이미지 수량도 늘어난다. 하나의 이미지에서 백도어가 발견됐고, 그걸 찾아 제거했다고 해서, 그 이미지에서 파생된 모든 이미지의 문제가 자동으로 해결되지 않는다. 그 모든 버전들을 찾아 점검하고 새로 구성해야 악성 요소가 사라진다.
공개된 이미지를 다운로드 한 사용자가, 그 이미지를 바탕으로 새로운 이미지를 구성하는 이미지 활용 방식도 문제를 악화시킨다. 최초 이미지에 백도어가 있는데, 그것을 모른 채 새 이미지를 만들어 유통시키는 과정에서 백도어가 자연스럽게, 의도치 않게, 퍼져가기 때문이다. 새로 만들어진 이미지의 밑바탕이 되는 원 이미지를 고친다 하더라도, 추후에 만들어진 이미지가 저절로 고쳐지지는 않는다.
이와 연결되는 또 다른 특징은 바이너리 층위의 스캔이 잘 실행되지 않는다는 것이다. 도커 생태계 내 보안 확인 혹은 스캔은 패키지 버전을 확인하는 것에 그칠 때가 많다. 그렇기 때문에 교묘히 숨어 있는 백도어 요소들을 찾기가 쉽지 않다.
어떻게 해야 하나?
이 문제를 어떻게 해결해야 할까? 보안 전문가들은 이미지를 만들 때 플로팅 태그를 주의해서 써야 한다고 조언한다. “예를 들어 CI상에서 debian:bookworm-2024-0301이 아니라 debian:bookworm이라고만 지정하면 새로운 빌드를 구축했을 때 자동으로 업데이트가 반영됩니다. 바이너리 층위의 스캔도 해야 하는데, 파일 해시와 정적 바이너리 분석과 같은 것을 실행해야 한다는 의미입니다. 버전만 확인해서는 아무런 도움이 되지 않습니다.”
지금처럼 1년 넘은 문제도 다시 기억하여 찾아보는 노력도 중요하다. 지난 해 XZ유틸즈 사건이 큰 충격을 안겼다며 추억만 해서는 안 되고, 이번 보안 연구원들이 했던 것처럼 실제 감염된 이미지를 찾아 세상에 알리는 게 중요하다는 것이다. “자꾸만 찾아서 없애고 또 없애야 합니다. 사실 과거의 문제가 자꾸 되살아나는 건 도커허브 생태계만의 문제가 아닙니다. 많은 보안 취약점들이 이런 식으로 재등장하지요.”
도커 이미지를 많이 활용하는 기업이라면 다음 사항을 참고하는 것도 좋다.
1) 모든 이미지들을 감사한다. 이미 불량하다고 알려진 해시와 태그들을 중심으로 한다.
2) 최초 이미지는 물론 파생된 모든 이미지들을 최대한 많이 검사해 악성 요소를 제거한다.
3) 보안 사건과 관련된 이미지의 경우, 가급적 신뢰할 수 있을 만한 기본 이미지를 구해 다시 구축한다.
4) 이미지 스캔과 각종 보안 검사 행위를 규정으로 정한다.
5) 이미지 업데이트 자동화 방법을 강화한다.
Related Materials
- XZ Utils Backdoor — Everything You Need to Know, and What You Can Do - Akamai (XZ Utils 백도어 전체 구조 및 공급망 위협 분석, 침투 과정 및 대응책), 2025년
- 500ms to midnight: XZ A.K.A. liblzma backdoor - Elastic Security Labs (XZ Backdoor 악성 빌드·은닉 수법, 단계별 악성코드 복호화 및 배포 메커니즘 상세 분석), 2024년
- XZ Utils Backdoor: Supply Chain Vulnerability (CVE-2024-3094) - Logpoint (발각 경위, 깃허브 활동 타임라인, 업스트림 패키지 변조 상세, 오픈소스 공급망 영향 등), 2025년
- Behind Enemy Lines: Understanding the Threat of the XZ Backdoor - OffSec (글로벌 리눅스 생태계 공급망 위협과 OpenSSH 백도어의 실제 영향력 분석), 2024년
