x

이메일로 만나보는 스타트업 가이드

투자, 행사, 정부사업 등 스타트업 생태계 소식을 이메일로 편하게 받아보세요.

자바스크립트용 패키지 관리 서비스인 npm에서 널리 사용되는 패키지 수백 개에 인증 정보를 탈취하는 멀웨어가 혼입되는 대규모 공급망 공격이 발생했다. 보안 기업 아이키도시큐리티(Aikido Security)에 따르면 8월 4일까지 침해가 확인된 건 최소 434개 패키지 1,381개 버전으로 각 패키지 합계 월간 설치 횟수는 20억 회를 넘는다고 한다.

개발자가 npm에서 패키지를 추가하면 그 패키지가 내부에서 이용하는 다른 패키지도 자동으로 도입되는 경우가 있다. 직접 고른 기억이 없는 부품까지 소프트웨어에 편입되기 때문에 널리 사용되는 패키지에 악의적인 코드가 혼입되면 의존 관계를 통해 다수 개발 환경이나 서비스로 피해가 연쇄된다. 이처럼 개발과 운용을 지탱하는 부품 공급 경로에 침입해 부품을 이용하는 조직을 한꺼번에 공격하는 수법이 공급망 공격. 이용자 입장에서 보면 정규 배포처에서 평소대로 설치한 것처럼 보이기 때문에 이상을 알아차리기 어렵다는 점도 큰 문제가 된다.

이번 공격 기점이 된 건 키밸류 형식으로 데이터를 저장하는 라이브러리 Keyv 등을 관리하는 개발자 깃허브 계정이다. 공격자는 주요 개발 브랜치인 메인 브랜치에 악의적인 파일을 직접 추가하고 직후에 새 버전을 공개했다. 공개 작업에는 정규 자동 처리 기반인 깃허브 액션스(GitHub Actions)가 사용됐기 때문에 변조된 패키지에는 정규 절차로 작성됐다는 걸 나타내는 서명도 붙어 있었다고 한다.

처음 확인된 주요 침해 버전은 월간 6억 400만 회 다운로드되는 Keyv 버전 6.0.0, 5억 8,000만 회인 flat-cache 버전 6.1.24, 5억 7,100만 회인 file-entry-cache 버전 11.1.6 등이다. 공격은 동일한 관리자가 소유한 패키지군에 그치지 않고, 탈취한 인증 정보를 사용해 다른 개발자나 기업이 관리하는 패키지로도 확산됐다.

침해된 패키지에는 setup.mjs와 Math_Symbol.js, math_init.js 같은 이름을 가진 파일이 추가됐으며 설치 전 setup.mjs를 실행하는 설정이 심어져 있었다. 이용자가 대상 버전을 npm으로 설치하면 설치 완료 전에 setup.mjs가 자동 실행된다. setup.mjs는 자바스크립트 실행 환경인 번(Bun)을 다운로드하고 인증 정보를 탈취하는 Math_Symbol.js를 기동한다.

Math_Symbol.js가 노리는 건 npm이나 깃허브 액세스 토큰, AWS 인증 정보, 쿠버네티스(Kubernetes)나 해시코프 볼트(HashiCorp Vault)에 저장된 비밀 정보 등이다. 환경 설정 파일이나 SSH 키, 데이터베이스 접속 정보, 스트라이프나 슬랙 토큰도 탐색 대상에 포함된다. 탈취된 데이터는 암호화된 뒤 공격자가 준비한 공개 깃허브 리포지토리 등으로 전송되는 구조였다.

멀웨어에는 자기 증식 기능도 갖춰져 있어 탈취한 npm 토큰으로 공개 권한을 가진 패키지를 조사하고 악의적인 파일과 자동 실행 설정을 추가한 뒤 버전 번호를 갱신해 침해된 패키지로 재공개하는 구조로 돼 있었다고 한다. 또 깃허브 리포지토리에는 비주얼 스튜디오 코드나 AI 코딩 도구인 클로드 코드가 자동으로 읽어 들이는 설정 파일도 추가되어 있어 개발자가 침해된 리포지토리를 비주얼 스튜디오 코드로 열거나 리포지토리 내에서 클로드 코드를 기동하면 악의적인 코드가 자동 실행되는 장치도 존재했다.

아이키도시큐리티는 이용자에게 멀웨어 검출 결과 확인과 수동 재스캔을 권장하고 있다. 또 패키지가 단말이나 자동 빌드 환경에서 작동하기 전에 위험성을 확인하기 위해, npm이나 얀(Yarn) 등 설치 처리를 감시하는 오픈소스 도구인 아이키도 세이프 체인(Aikido Safe Chain)도 안내하고 있다. 지금도 다른 관리자나 패키지로의 감염이 계속되고 있어 영향을 받은 패키지 수는 더 늘어날 가능성이 있다고 한다. 관련 내용은 이곳에서 확인할 수 있다.

뉴스 레터 구독하기

Related Posts

Next Post