컨텐츠로 건너뛰기
검색
ITWorld 언론사 이미지

타이포스쿼팅에서 CI 장악으로…산업화 단계 접어든 npm 공급망 공격

ITWorld
원문보기

타이포스쿼팅에서 CI 장악으로…산업화 단계 접어든 npm 공급망 공격

속보
3호선 오금역 선로전환기서 연기…가락시장역까지만 운행

과거에는 패키지 이름에 의도적인 오타를 섞어 사용자를 속이는 타이포스쿼팅 시도에 그쳤던 공격이 이제는 유지관리자와 CI 파이프라인, 현대적 개발 환경을 떠받치는 신뢰된 자동화 체계를 노리는 조직적이고 자격증명 기반의 침투로 진화했다.


보안 책임자 관점에서 이러한 공격은 더 이상 개발자 개인의 실수로 치부할 수 있는 사소한 문제가 아니다. 실제 운영 시스템과 클라우드 인프라, 수백만 개의 하위 애플리케이션으로 이어질 수 있는 직접적인 침투 경로가 되기 때문이다.


공격의 목표는 더 이상 개별 개발자를 속이는 것이 아니다. 눈에 띄지 않게 개발자의 권한을 넘겨받고, 그 권한과 함께 소프트웨어 배포 범위까지 확보하는 것이 목적이다.


엔터프라이즈 시큐리티 그룹(Enterprise Security Group)의 사이버보안 프랙티스 디렉터 멜린다 마크스는 “npm은 세계 최대 규모의 자바스크립트 패키지 저장소이자 소프트웨어 배포의 핵심 통제 지점이므로 매력적인 공격 대상”이라며 “보안팀은 의존성 구조를 명확히 이해하고, 위험을 정기적으로 점검하고 완화할 수 있는 체계를 마련해야 한다”라고 설명했다.


npm 인프라에 내재된 구조적 취약점

거의 모든 기업이 직간접적으로 npm에 의존한다. IDC에 따르면 전체 조직의 93%가 오픈소스 소프트웨어를 사용하며, npm은 자바스크립트 생태계에서 가장 큰 패키지 레지스트리로 자리 잡고 있다. IDC의 데브섹옵스(DevSecOps) 리서치 매니저 케이티 노턴은 “인기 있는 패키지 하나만 침해해도 즉시 수백만 명의 하위 사용자와 애플리케이션에 영향을 미칠 수 있다”라며, 하나의 탈취된 자격증명이 유통을 장악할 수 있는 ‘마스터 키’가 될 수 있다고 언급했다.


위험 요인은 규모에만 국한하지 않는다.


현대적 개발 파이프라인의 보안 구조에 내재된 취약점이 노출을 더욱 키운다. 노턴은 “개별 오픈소스 유지관리자는 기업 보안팀 수준의 자원을 갖추지 못한 경우가 많아 소셜 엔지니어링 공격에 취약하다”라며 “CI/CD 러너와 개발자 머신은 환경 변수나 설정 파일에 저장된 장기 유효 비밀 정보를 상시 처리하고 있고, 이런 정보는 악성코드에 의해 쉽게 탈취될 수 있다”라고 설명했다.


이어 “빌드 시스템은 보안 가시성보다 속도와 안정성을 우선하는 경우가 많아, 초기 침투에 성공한 공격자가 장기간 탐지되지 않은 채 활동할 수 있는 환경을 만들고 있다”라고 언급했다.


이 문제를 단순한 패치만으로 해결하기는 어렵지만, 노출을 줄일 수 있는 방법은 있다. 여러 전문가는 공통적으로 CI 러너를 운영 환경의 핵심 자산으로 취급하고 배포 토큰의 회전 주기와 권한 범위를 엄격히 관리하며, 필요하지 않은 라이프사이클 스크립트를 비활성화하고, 의존성을 변경 불가능한 버전으로 고정하는 조치를 우선 과제로 꼽는다.


엔터프라이즈 시큐리티 그룹의 마크스는 “이런 npm 공격은 소프트웨어 의존성의 사전 설치 단계(pre-install phase)를 노리기 때문에, 일반적인 코드 스캐닝 중심의 소프트웨어 공급망 보안 방식으로는 대응할 수 없다”라며 “이 유형의 공격을 탐지하려면 시그니처 기반 도구가 아니라 실행 시점 분석과 이상 행위 탐지가 필요하다”라고 조언했다.


오타 함정에서 합법적 백도어로

수년 동안 타이포스쿼팅은 npm 위협 모델을 규정하는 대표적인 공격 기법이었다. 공격자는 ‘lodash’를 살짝 바꾼 ‘lodsash’, ‘express’를 흉내 낸 ‘expres’, ‘react’를 변형한 ‘reacts’처럼 인기 라이브러리와 거의 구분되지 않는 이름의 패키지를 배포한 뒤, 자동화 과정이나 개발자의 실수를 기다렸다. 이로 인한 피해는 대체로 제한적이었고, 대응 역시 비교적 단순한 편이었다.


이 공격 모델은 2025년을 기점으로 바뀌기 시작했다.


공격자는 더 이상 인기 패키지를 흉내 내는 방식에 의존하지 않았다. 대신 실제 패키지를 직접 침해하는 사례가 빠르게 늘어났다. npm 자체를 사칭한 피싱 캠페인을 통해 유지관리자의 자격증명을 탈취했고, 이렇게 빼낸 토큰을 이용해 정상 업데이트처럼 보이는 트로이목마 버전을 배포했다. 이 업데이트는 모든 하위 사용자에게 합법적인 배포물로 인식됐다. ‘샤이 훌루드(Shai-Hulud)’ 캠페인이 단적인 사례로, 이 웜은 수만 개의 저장소에 영향을 미쳤으며 탈취된 자격증명을 활용해 생태계 전반으로 스스로 확산됐다.


소프트웨어 공급망 보안 업체 소켓닷데브(Socket.dev)의 사이버보안 연구원 쿠시 판디야는 “npm 생태계는 현대적 개발 환경의 핵심 자산이 됐다”라며 “생산성이 높은 유지관리자 한 명만 침해돼도 그 여파는 수백 개의 하위 프로젝트로 확산된다”라고 설명했다.


그 결과 조용하지만 강력한 변화가 나타났다. 공격자는 더 이상 정교한 가짜 패키지를 만들 필요가 없어졌다. 신뢰된 채널을 통해 일반적인 업데이트와 다를 바 없는 서명과 버전 정보를 갖춘 형태로 악성코드를 배포할 수 있게 됐다.


개발자의 노트북보다는 개발 환경을 노린다

최근 npm 공격은 개발자 개인의 노트북보다 CI/CD 환경 내부에서 활성화되는 사례가 늘고 있다. 그동안 무해한 초기 설정 도구로 여겨졌던 사후 설치 스크립트가 깃허브 액션이나 깃랩 CI 같은 자동화 환경에서 자동 실행될 수 있는 공격 벡터로 바뀐 것이다. 악성 패키지가 일단 러너 내부에 진입하면, 환경 변수를 읽고 배포 토큰을 탈취하거나, 빌드 산출물을 변조하고 피해자의 신원을 이용해 추가 악성 릴리즈를 배포하는 것도 가능하다.


소켓닷데브의 판디야는 “이제 개발자 환경과 CI 러너는 일반 사용자 단말보다 훨씬 더 가치 있는 공격 대상이 됐다”라며 “이들 환경은 더 광범위한 권한과 비밀 정보에 접근할 수 있고, 실제 운영 환경으로 코드를 밀어 넣을 수 있는 능력까지 갖고 있다”라고 설명했다.


2025년 중반 관측된 여러 공격 캠페인은 CI 환경을 명확히 인지하고 설계된 것으로 나타났다. 자동화된 빌드 환경이 감지될 때만 공격을 실행하거나, 실행을 지연시키거나, 일정 시간이 지나면 스스로 소멸하는 페이로드를 포함해 포렌식 분석 가능성은 최소화하면서 자격증명 탈취 효과는 극대화하는 방식이었다.


기업 입장에서 이는 위험 구조 자체가 근본적으로 바뀌었음을 의미한다. CI 시스템은 개별 사용자보다 훨씬 높은 권한으로 동작하는 경우가 많지만, 정작 보안 모니터링은 훨씬 느슨하게 이뤄지고 있다. 판디야는 “CI 환경은 장기간 유효한 배포 토큰, 과도한 권한을 가진 CI 비밀 정보, 라이프사이클 스크립트와 패키지 메타데이터에 대한 암묵적인 신뢰, 빌드 간 격리 부족 등 취약한 기본 설정으로 보호되는 경우가 많다”라고 지적했다.


IDC 리서치에 따르면 기업이 애플리케이션 보안(AppSec) 예산 가운데 공급망 보안에 할당하는 비중은 약 14%에 불과하다. 이 가운데 CI/CD 파이프라인 보안을 최우선 위험 요소로 인식하는 곳은 12%에 그친다.


회피 기법의 고도화

방어자 측이 의심스러운 패키지를 식별하는 데 점차 능숙해지자, 공격자 역시 이에 맞춰 빠르게 적응했다.


최근 npm 공격 캠페인에서는 눈에 보이지 않는 유니코드 문자를 활용해 의존성을 숨기거나, 실행 환경을 확인한 뒤에야 실제 페이로드를 내려받는 다단계 로더, 차단을 피하기 위해 블록체인에 C2 정보를 저장하는 방식 등이 사용된다. 또한 일부 공격은 웜과 유사한 행위를 통해 탈취한 자격증명을 활용해 대규모로 추가 악성 패키지를 배포했다.


이처럼 정교해진 공격 기법 앞에서 수동 검토는 사실상 효과를 잃었다. 판디야는 “index.js를 훑어보며 악성 eval() 호출을 찾아낼 수 있던 시대는 이미 지났다”라고 설명했다.


노턴에 따르면, 현대적 패키지는 인코딩을 여러 겹으로 적용하고 실행을 지연시키거나 환경 지문 분석을 결합하는 방식으로 악성 로직을 숨긴다. 이런 공격은 행위 기반 방식으로 실행돼 정적 스캐닝이 효과를 발휘하기 어렵다.


노턴은 “난독화 기법은 대규모 자바스크립트 프로젝트에서 나타나는 정상적인 복잡성과 악성 로직을 구분하기 어렵게 만든다”라며 “CI 환경을 인식하는 페이로드와 사후 설치 스크립트는 특정 조건이 충족될 때만 동작해 탐지 자체를 어렵게 한다”라고 말했다.


dl-itworldkorea@foundryco.com



No Author editor@itworld.co.kr
저작권자 Foundry & ITWorld, 무단 전재 및 재배포 금지