여전히 여러분의 운영에 적용되는 교훈을 위해 한 획을 그은 사건을 되짚습니다.
무슨 일이 있었나
이 라이브러리는 유지보수가 부족했고, 오랫동안 단 한 사람이 짊어지고 있었습니다. 또 다른 개인이 꾸준히 기여하며 신뢰를 쌓아 결국 공동 메인테이너 지위를 얻었습니다. 그런 뒤, 평범한 업데이트에 엮어 넣어 특정 조건에서 외부의 무단 접근을 허용하는 메커니즘을 단계적으로 심었습니다.
표적이 된 것은 코드의 구멍이 아니라, "신뢰받는 사람의 정당한 업데이트는 안전하다"는 가정이었습니다.
사람과 신뢰가 표적이었다
방화벽과 패치로는 이것을 막지 못합니다. OSS 메인테이너는 선의와 자원봉사 시간으로 운영되는데, 그 과부하와 고립이 진입점이 되었습니다. 생태계 자체의 건강함이 곧 보안 문제임을 보여 주었습니다.
어떻게 잡혔나 — "뭔가 느리다"를 무시하지 않은 것
전기는 한 엔지니어가 무관한 작업 중에 로그인 경로가 "전보다 명백히 느리다"는 것과 벤치마크 수치가 이상하다는 것을 알아챘고, 무시하지 않고 근본까지 쫓은 데서 왔습니다. 그 결과 안정 배포로 널리 퍼지기 전에 세상이 화를 면했습니다.
"뭔가 이상하다"는 최고의 탐지기다. 여기서는 그것이 말 그대로 세상을 구했다.
타임라인
수년 전
공격자가 꾸준히 기여하며 메인테이너의 신뢰를 쌓음.2024년 초
정당한 업데이트에 백도어를 단계적으로 심음.2024-03
한 엔지니어가 "느리다"는 이상을 쫓아, 안정 배포 직전에 잡아내고 공개함.
여전히 적용되는 교훈
의존성을 최소화한다
라이브러리가 적을수록 신뢰해야 할 대상도 적어집니다. "편리하니까"라는 이유로 추가하지 마십시오.
버전을 핀 고정하고 변경을 살핀다
락파일은 예상치 못한 업데이트를 잡아냅니다. 중요한 의존성 변경의 내용(누가, 무엇을)을 살펴보십시오.
빌드 재현성을 개선한다
같은 입력이 같은 산출물을 낼수록, 은밀한 변조를 발견하기 쉬워집니다.
이상을 결코 무시하지 않는다
"느리다 / 이상하다"는 최고의 탐지기입니다 — 여기서는 그것이 세상을 구했습니다. 작은 이상을 끝까지 쫓는 문화를 만드십시오.
메인테이너를 존중하고 지원한다
여러분이 의존하는 OSS의 건강함은 결국 여러분 자신의 안전입니다. 과부하와 고립이 진입점입니다.
이어서 읽기
- 용어: CVE란 무엇인가 · RCE란 무엇인가
- 사고: Codecov — 신뢰하던 CI 도구가 탈취됨
- 방어: 의존성을 기계로 모니터링하기
FAQ
QXZ Utils 사례가 특이했던 점은 무엇인가요?
코드 버그가 아니라 사람과 신뢰를 노렸다는 점입니다. 공격자는 수년에 걸쳐 신뢰받는 OSS 메인테이너가 된 뒤, 정당한 업데이트인 척 백도어를 끼워 넣었습니다 — 기술적 통제만으로는 막기 어렵습니다.
Q어떻게 발견되었나요?
한 엔지니어가 무관한 작업 중에 로그인 경로가 '전보다 명백히 느리다'는 것과 벤치마크 수치가 이상하다는 것을 알아챘고, 무시하지 않고 근본까지 쫓았습니다. 그 결과 안정 배포로 널리 퍼지기 직전에 잡혔습니다.
Q개인 개발자가 할 수 있는 일은 무엇인가요?
의존성을 최소화하고, 업데이트의 출처와 내용을 살피고, 예상치 못한 변경을 탐지할 수 있도록 버전을 핀 고정하고, 빌드 재현성을 개선하고, '뭔가 이상하다'는 감각을 결코 무시하지 않는 것입니다.