사고 & 취약점

XZ Utils 백도어(CVE-2024-3094) — 신뢰받던 공동 메인테이너에 의한 공급망 공격

XZ Utils 백도어(CVE-2024-3094)는 수년간 신뢰를 쌓은 메인테이너가 xz/liblzma에 심은 것으로, 안정 배포 직전에 발견되었습니다. 신뢰가 표적이 된 경위와 공급망 교훈을 다룹니다.

게시 2026-06-07 업데이트 2026-10-23 3분 읽기
이 페이지에서

지금도 여러분의 운영에 적용되는 교훈을 위해 과거의 큰 사건을 되짚습니다.

2024
발견
수년
신뢰를 쌓는 데 들인 시간
신뢰
표적이 된 것
직전
안정 배포 직전에 잡힘

무슨 일이 있었나

이 라이브러리는 유지보수가 부족했고, 오랫동안 단 한 사람이 짊어지고 있었습니다. 또 다른 개인이 꾸준히 기여하며 신뢰를 쌓아 결국 공동 메인테이너 지위를 얻었습니다. 그런 뒤, 평범한 업데이트 속에 숨겨 특정 조건에서 외부의 무단 접근을 허용하는 메커니즘을 단계적으로 추가했습니다.

표적이 된 것은 코드의 결함이 아니라, "신뢰받는 사람의 정당한 업데이트는 안전하다"는 가정이었습니다.

① 유지보수 부족, 과로한 한 사람이 떠맡음
↓
② 다른 사람이 꾸준히 기여해 신뢰를 얻음(수년에 걸쳐)
↓
③ 공동 메인테이너 권한 획득
↓
④ 평범한 업데이트에 백도어를 단계적으로 심음
공격은 기술적인 악용이 아니라 천천히 신뢰를 얻는 방식으로 진행되었다. 각 단계는 정당한 활동처럼 보였다.

사람과 신뢰가 표적이었다

방화벽과 패치로는 이것을 막지 못합니다. OSS 메인테이너는 선의와 자원봉사 시간으로 운영되는데, 공격자는 그 과부하와 고립을 악용했습니다. OSS를 떠받치는 사람과 프로젝트의 건강함 자체가 보안 문제임을 보여 주었습니다.

어떻게 발견되었나: 한 엔지니어가 느린 로그인을 조사했다

한 엔지니어가 무관한 작업 중에 로그인 경로가 "전보다 명백히 느리다"는 것과 벤치마크 수치가 이상하다는 것을 알아챘고, 무시하지 않고 원인을 추적한 것이 발견으로 이어졌습니다. 그 결과 안정 배포로 널리 퍼지기 전에 잡혀, 광범위한 피해를 막았습니다.

"뭔가 이상하다"는 느낌을 무시하지 않은 것이, 이번 사례에서 가장 효과적인 탐지 방법이었다.

타임라인

  1. 수년 전

    공격자가 꾸준히 기여하며 메인테이너의 신뢰를 쌓음.
  2. 2024년 초

    정당한 업데이트에 백도어를 단계적으로 심음.
  3. 2024-03

    한 엔지니어가 "느리다"는 이상을 쫓아, 안정 배포 직전에 잡아내고 공개함.

여전히 적용되는 교훈

1

의존성을 최소화한다

라이브러리가 적을수록 신뢰해야 할 대상도 적어집니다. "편리하니까"라는 이유로 추가하지 마십시오.

2

버전을 핀 고정하고 변경을 살핀다

락파일은 예상치 못한 업데이트를 잡아냅니다. 중요한 의존성 변경의 내용(누가, 무엇을)을 살펴보십시오.

3

빌드 재현성을 개선한다

같은 입력이 같은 산출물을 낼수록, 은밀한 변조를 발견하기 쉬워집니다.

4

이상을 결코 무시하지 않는다

"느리다 / 이상하다"는 중요한 단서입니다. 이번 발견도 거기서 시작되었습니다. 작은 이상을 원인까지 추적하는 습관을 만드십시오.

5

메인테이너를 존중하고 지원한다

여러분이 의존하는 OSS의 건강함은 결국 여러분 자신의 안전에 영향을 줍니다. 메인테이너의 과부하와 고립은 공격자에게 악용될 수 있습니다.

이어서 읽기

출처와 확인 범위

아래 1차 자료는 위의 설정·영향 범위·대응을 뒷받침하며 링크는 2026년 10월 23일 확인했습니다. 자료의 버전·구성 조건을 확인하세요. 점검 우선순위와 교훈은 이 사이트의 정리이며 글 전체의 재검증이나 안전 보증이 아닙니다.

FAQ

QXZ Utils 사례가 특이했던 점은 무엇인가요?
A

코드 버그가 아니라 사람과 신뢰를 노렸다는 점입니다. 공격자는 수년에 걸쳐 신뢰받는 OSS 메인테이너가 된 뒤, 정당한 업데이트인 척 백도어를 끼워 넣었습니다. 이런 공격은 기술적 통제만으로는 막기 어렵습니다.

Q어떻게 발견되었나요?
A

한 엔지니어가 무관한 작업 중에 로그인 경로가 '전보다 명백히 느리다'는 것과 벤치마크 수치가 이상하다는 것을 알아챘고, 무시하지 않고 원인을 추적했습니다. 그 결과 안정 배포로 널리 퍼지기 직전에 잡혔습니다.

Q개인 개발자가 할 수 있는 일은 무엇인가요?
A

의존성을 최소화하고, 업데이트의 출처와 내용을 살피고, 예상치 못한 변경을 탐지할 수 있도록 버전을 핀 고정하고, 빌드 재현성을 개선하고, '뭔가 이상하다'는 감각을 결코 무시하지 않는 것입니다.