개발자 주의! 악성 NPM 패키지, 1만 시스템 감염시키다
최근 개발자들이 사용하는 NPM(Node Package Manager) 생태계에 악성 패키지가 유포되어 큰 피해를 입혔습니다. 이번 사건은 오픈 소스 생태계의 보안 취약점을 다시 한번 드러내며, 개발자들의 주의를 환기시키고 있습니다. 감염된 시스템은 약 1만 개에 달하며, 시스템 키체인을 탈취하여 중요 정보를 빼가는 악성 행위를 수행했습니다.
타이포스쿼팅 공격: 악성 NPM 패키지의 침투 경로
이번 공격은 '타이포스쿼팅(Typosquatting)' 기법을 사용했습니다. 이는 사용자들이 흔히 저지르는 오타를 이용하여 유명 패키지와 유사한 이름으로 악성 패키지를 업로드하는 방식입니다. 예를 들어, 'typescript'를 'typescriptjs'로, 'discord.js'를 'deezcord.js'와 같이 교묘하게 변경하여 사용자들이 무심코 설치하도록 유도했습니다. 이러한 악성 패키지들은 2025년 7월 초에 업로드되었으며, 발견되기 전까지 약 9,900회 다운로드되었습니다.
악성 패키지 목록 및 감염 경로
다음은 이번에 발견된 악성 NPM 패키지 목록입니다. 혹시라도 설치한 적이 있다면 즉시 조치를 취해야 합니다.
- deezcord.js
- dezcord.js
- dizcordjs
- etherdjs
- ethesjs
- ethetsjs
- nodemonjs
- react-router-dom.js
- typescriptjs
- zustand.js
이 패키지들은 시스템 키체인, 브라우저, 인증 서비스 등에서 자격 증명을 탈취하도록 설계되었습니다. Windows, Linux, macOS 등 주요 운영체제에서 모두 작동하며, 4단계의 난독화 과정을 거쳐 악성 코드를 숨기고, 가짜 CAPTCHA를 표시하여 사용자를 속이는 수법을 사용했습니다.
시스템 키체인 공격의 위험성
특히 시스템 키체인은 이메일 클라이언트, 클라우드 스토리지, 비밀번호 관리자, SSH passphrase, 데이터베이스 연결 문자열 등 중요한 서비스의 자격 증명을 저장하는 곳입니다. 악성 코드는 이러한 키체인을 직접 공격하여 애플리케이션 수준의 보안을 우회하고, 암호화되지 않은 상태로 저장된 자격 증명을 탈취합니다. 이는 기업 이메일, 파일 스토리지, 내부 네트워크, 프로덕션 데이터베이스 등에 즉시 접근할 수 있는 권한을 획득하는 것과 같습니다.
감염 시 대응 방법
만약 위에 언급된 악성 패키지를 설치했다면, 시스템 전체가 위험에 노출되었다고 간주해야 합니다. 다음은 감염 시 즉시 취해야 할 조치 사항입니다.
- 감염된 시스템을 인터넷에서 격리합니다.
- 노출되었을 가능성이 있는 모든 자격 증명(SSH 키, API 토큰, GitHub/GitLab 액세스 토큰, 클라우드 공급자 키 (AWS, GCP, Azure), NPM 토큰, 브라우저/비밀번호 관리자에 저장된 자격 증명 등)을 폐기합니다.
- 감염된 시스템을 완전히 포맷하고 재설치합니다.
- 모든 비밀번호를 변경합니다.
- NPM 종속성 및 lockfile을 감사합니다.
- 시스템 및 네트워크 로그에서 의심스러운 활동이나 알 수 없는 도메인으로의 아웃바운드 연결을 검토합니다.
- 모든 계정에 다단계 인증을 활성화합니다.
오픈 소스 생태계 보안 강화의 중요성
이번 사건은 오픈 소스 생태계의 보안 취약점을 다시 한번 상기시켜 줍니다. 개발자들은 패키지 설치 시 이름, 평판, 유지 관리 상태 등을 꼼꼼히 확인하고, 정기적으로 종속성을 검사하여 악성 코드 감염을 예방해야 합니다. 또한, 다단계 인증 활성화, 비밀번호 관리 도구 사용 등 기본적인 보안 수칙을 준수하는 것이 중요합니다. 안전한 개발 환경 구축을 위해 모두 함께 노력해야 합니다.