
최근 보안 업계에서 가장 충격적인 사건 중 하나가 바로 CanisterWorm입니다. 겉으로는 평범한 npm 패키지 설치처럼 보이지만, 실제로는 오픈소스 생태계를 타고 퍼지며 백도어를 심고, 특정 조건에서는 이란 기반 시스템을 파괴하도록 설계됐다는 점에서 파장이 컸습니다.1
이 사건이 무서운 이유는 단순한 악성 패키지 사고가 아니라는 데 있습니다. CI/CD 침해로 시작해 npm 토큰 탈취, 패키지 재배포, 개발자 PC 감염, 그리고 Kubernetes 환경 파괴 가능성까지 한 줄로 이어졌기 때문입니다.23
CanisterWorm이 특별히 위험한 이유
보통 악성 npm 패키지는 한두 개 패키지에 숨어 있다가 들키면 끝나는 경우가 많습니다. 그런데 CanisterWorm은 달랐습니다. 이 악성코드는 감염된 환경에서 npm 인증 토큰을 찾아내고, 그 토큰으로 접근 가능한 다른 패키지들까지 자동으로 오염시켰습니다. 쉽게 말해 "패키지가 패키지를 감염시키는" 웜 형태였습니다.24
여기에 설치 순간 실행되는 postinstall 스크립트를 사용했다는 점도 핵심입니다. 사용자는 그냥 npm install만 했을 뿐인데, 그 뒤에서 백도어가 깔리고 추가 동작이 시작됩니다. 클릭도, 승인도 필요 없습니다.24
Trivy 침해에서 npm 웜으로 번진 공급망 공격
이번 사태의 출발점으로 지목되는 건 Trivy 공급망 침해입니다. 공격자는 CI/CD 환경에서 토큰과 각종 비밀값을 훔쳤고, 그중 npm 배포 권한까지 손에 넣었습니다. 이후 훔친 자격 증명으로 여러 조직 스코프의 패키지에 악성 버전을 새로 올렸습니다.25
여기서 중요한 교훈이 하나 나옵니다. 공급망 공격은 이제 "빌드 서버만 위험한 문제"가 아닙니다. CI에서 털린 비밀값이 곧바로 패키지 저장소 오염으로 이어지고, 다시 개발자 워크스테이션 감염으로 번집니다. 신뢰의 사슬이 한 군데 끊기면, 생각보다 훨씬 멀리 무너집니다.
ICP 기반 C2와 리눅스 지속성, 왜 더 까다로운가
CanisterWorm은 감염 후 파이썬 백도어를 심고, 사용자 권한의 systemd 서비스로 살아남도록 설계됐습니다. 대표 흔적은 ~/.local/share/pgmon/service.py와 ~/.config/systemd/user/pgmon.service입니다.2
더 흥미로운 부분은 명령제어(C2) 방식입니다. 일반 서버 대신 ICP canister를 활용해 다음 단계 페이로드 위치를 받아오는 구조였는데, 이런 방식은 전통적인 도메인 차단이나 서버 압수에 더 잘 버팁니다.45 한마디로 "악성코드가 블록체인식 게시판을 보는" 느낌에 가깝습니다. 공격자 입장에서는 은근히 끈질긴 선택입니다.
이란 시스템을 노린 와이퍼, 단순 금전 범죄를 넘다
더 섬뜩한 건 후속 페이로드였습니다. 조사에 따르면 CanisterWorm은 시스템의 시간대나 언어 설정을 보고 이란 환경으로 판단되면 파괴 모드로 전환했습니다. 일반 시스템에서는 파일 시스템 삭제 명령을, Kubernetes 환경에서는 클러스터 전반에 파괴용 DaemonSet을 배포하는 식입니다.13
이 부분이 특히 이례적인 이유는, TeamPCP가 원래는 금전 목적 성격이 강한 그룹으로 알려졌기 때문입니다. 그런데 이번에는 수익화보다 과시, 혼란 조성, 혹은 지정학적 메시지에 더 가까운 행동을 보였습니다.13 즉, 이제 공급망 공격은 돈만 노리는 범죄가 아니라 "보여주기식 파괴"로도 변할 수 있다는 뜻입니다.
시사점
CanisterWorm은 오픈소스 보안의 불편한 현실을 보여줍니다. 안전해 보이는 패키지 설치 한 번이 백도어, 토큰 탈취, 악성 재배포로 이어질 수 있고, 리눅스 개발 환경과 CI/CD가 그 중심에 있습니다.
실무적으로는 최근 설치한 npm 패키지 이력과 비정상적인 패치 버전 증가를 먼저 확인해야 합니다. 리눅스 시스템에서는 pgmon.service, service.py, /tmp/pglog 같은 흔적을 점검하고, 노출 가능성이 있는 npm 토큰과 클라우드 자격 증명은 즉시 교체하는 편이 안전합니다.24 그리고 GitHub Actions나 보안 도구도 "유명하니까 안전하다"는 가정에서 벗어나, 커밋 SHA 고정과 비밀값 최소 노출 원칙을 다시 점검해야 합니다.15
오픈소스는 여전히 강력하지만, 이제는 설치보다 검증이 먼저인 시대입니다.
참고
1Self-propagating malware poisons open source software and wipes Iran-based machines
2CanisterWorm: How a Self-Propagating npm Worm Is Spreading Backdoors Across the Ecosystem
3'CanisterWorm' Springs Wiper Attack Targeting Iran
4TeamPCP deploys CanisterWorm on NPM following Trivy compromise
5CanisterWorm: When a CI/CD Breach Became a Self-Spreading npm Worm
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
