2026년 8월 5일, Sonatype의 연구원들은 npm에서 Flooding Dropper라는 캠페인을 발견했습니다: 수십 개의 일회용 계정에서 게시된 846개의 악성 구성 요소. 일주일 후, OpenSourceMalware의 업데이트된 데이터에 따르면, 같은 캠페인을 WEL1DROPPER라는 이름으로 추적하며 1033개의 확인된 패키지가 등장했습니다. 내부에는 Windows, macOS 및 Linux에서 두 번째 단계를 다운로드하고 개발자의 기기에서 환경 변수, 자격 증명 및 세션을 모두 지우는 크로스 플랫폼 로더가 있습니다.
파싱 및 자동화에 의존하는 팀에게는 이것이 "npm에 대한 또 다른 뉴스"가 아닙니다. 스크래핑 스택은 바로 npm입니다: Playwright, Puppeteer, Crawlee, 프록시 에이전트에 대한 래퍼, HTML 파서, 큐. 그리고 이러한 모든 것이 한 팀에 의해 설치되는 동일한 머신에는 일반적으로 프록시 풀의 로그인 및 비밀번호, 세션의 쿠키 저장소, 안티 디텍트 브라우저의 프로필을 포함한 .env 파일이 있습니다. 무슨 일이 일어났는지, 그리고 이것이 실제로 무엇을 의미하는지 살펴보겠습니다.
캠페인에 대한 정보
Sonatype은 CVSS 8.7과 CWE-506(주입된 악성 코드) 분류를 가진 sonatype-2026-005660 식별자로 캠페인을 진행하고 있습니다. 연구원들이 패키지를 하나의 그룹으로 묶은 특징적인 징후는 다음과 같습니다:
- 자동 생성된 이름. 이름은 반복되는 용어의 보간을 통해 생성됩니다 — 보고서에는 "bigops"와 "bnpl"이 언급되며,
bigops-api와 같은 예시와dolyame-boxy-desktop-bnpl-card-gallery와 같은 긴 조합이 있습니다. OpenSourceMalware는 이를 "AI 슬롭 스쿼팅"이라고 설명하며, 하나의 인기 패키지에 맞춘 정교한 위조 대신 무작위로 생성된 이름으로 대량의 타이프 스쿼팅을 의미합니다. - 하나의 범위에서의 버전. 릴리스는 35.x.y 주위에 모여 있으며, 역사 없는 패키지에 대해 비정상적으로 높은 번호입니다.
- 계정 간 분산. 각 계정은 소규모 패키지 배치를 게시하므로, 하나의 발행자를 차단해도 작전이 중단되지 않습니다.
실행 메커니즘은 다양하게 설명되며, 이 차이는 중요합니다. Sonatype은 코드가 패키지를 "설치하거나 가져올 때" 작동한다고 말합니다. OpenSourceMalware는 일부 샘플이 전통적인 라이프사이클 훅 없이 작동하며, 개발자가 require()를 통해 패키지를 직접 연결해야 한다고 명시합니다. 실질적인 결론은 하나입니다: --ignore-scripts에만 의존해서는 안 됩니다 — 의존성이 실제로 코드에 가져와지면, 유용한 페이로드가 작동합니다.
두 번째 단계가 어떻게 전달되는가
로더는 숨겨진 목록에서 무작위 호스트를 통해 HTTPS로 페이로드를 다운로드합니다 — The Hacker News에 따르면, 배달 지점으로는 Cloudflare Workers의 세 도메인이 사용되었습니다. 직접 다운로드가 실패하면, 백업 채널이 활성화됩니다: 페이로드는 플랫폼 서브도메인(예: sdk.dl, ext.dl, pkg.dl, net.dl)의 도메인 wel1.ru의 DNS TXT 레코드에서 수집됩니다. 즉, HTTP 도메인에 대한 아웃바운드 필터는 일반 DNS 요청으로 우회됩니다 — 기업 네트워크에서는 이를 차단하는 경우가 드뭅니다.
그 다음은 플랫폼별로:
- Windows: ETW 및 AMSI가 패치되어(즉, 스크립트의 텔레메트리 및 바이러스 검사 기능이 비활성화됨), 레지스트리의 자동 시작 키 및 작업 스케줄러를 통해 고정되며, AppData에 파일이 저장됩니다.
- macOS: 동일한 회피 기법이 사용되며, LaunchAgent를 통해 고정됩니다. macOS 페이로드에서 연구원들은 러시아 금융 서비스 도메인(tcsbank.ru, cloudpayments.ru)을 발견했습니다 — 이는 러시아어 사용자들의 은행 세션에 대한 표적 관심의 징후입니다.
- Linux: UPX ELF 바이너리로 패키징되어 Sliver 프레임워크의 에이전트를 배포합니다 — 이는 일회성 도난이 아닌 완전한 C2 채널입니다.
또한 표준 세트가 있습니다: 샌드박스 및 디버거 확인, 아키텍처 식별, 환경 변수 읽기, 분리된 백그라운드 프로세스(터미널 종료를 견딤) 및 메모리에 페이로드 반영, 디스크에 파일을 남기지 않도록 합니다.
왜 이것이 파싱 팀에 타격을 주는가
정보 수집기는 "중요한" 것과 "중요하지 않은" 것을 구분하지 않습니다 — 비밀처럼 보이는 모든 것을 가져갑니다. 일반 사용자에게는 브라우저의 비밀번호와 암호화폐 지갑입니다. 데이터 수집을 하는 사람에게는 전리품의 세트가 다르며, 솔직히 더 맛있습니다:
- 환경 변수 및
.env— 여기에는 거의 항상 프록시 게이트웨이의 호스트, 로그인, 비밀번호 및 세션 매개변수(국가, 도시, 스티키 식별자)가 포함되어 있습니다. 환경 변수의 유출은 캠페인 분석에서 명시적으로 언급되었습니다. - 쿠키 및 세션 토큰. 도난당한 세션은 MFA를 우회합니다: 쿠키 자체가 두 번째 검증을 이미 통과했음을 증명합니다. 유효한 서비스 토큰 로그는 다크 웹에서 $5부터 판매됩니다.
- 안티 디텍트 브라우저의 프로필 — "쿠키 + 지문 + 프록시"의 조합으로, 즉 준비된 작업 계정으로, 따로 가열할 필요가 없습니다.
- CI/CD, npm 및 클라우드 토큰 — 당신의 머신뿐만 아니라 파이프라인에 대한 접근도 가능하여, 당신의 빌드를 전송할 수 있습니다.
현상의 규모는 더 이상 틈새 시장이 아닙니다. SpyCloud의 2026년 보고서에 따르면, 악성 로그에서 획득한 1810만 개의 노출된 API 키와 토큰이 확인되었습니다. Recorded Future와 Flashpoint의 데이터에 따르면, 2025년 동안 정보 수집기는 1110만 대의 기계를 감염시키고 33억 개의 도난당한 계정을 생성했습니다. 그리고 Sonatype의 2026년 소프트웨어 공급망 상태 보고서에는 2025년 한 해에 454,600개 이상의 새로운 악성 패키지가 등장했으며, 누적 1,233,000개 이상의 차단된 패키지가 포함되어 있습니다 — 전년 대비 75% 증가입니다. Flooding Dropper는 이상 현상이 아니라 일반적인 사건입니다.
프록시 계정 소유자가 잃는 것
보안 분석에서는 일반적으로 언급되지 않는 내용을 따로 언급하겠습니다. 유출된 프록시 자격 증명은 "비밀번호 손실"이 아니라 세 가지 문제를 동시에 발생시킵니다:
- 지불된 트래픽. 레지던트 및 모바일 트래픽은 기가바이트 단위로 청구됩니다. 타인의 파서가 당신의 자격 증명으로 작동하면, 당신의 청구서가 발생하며, 이를 인지하는 데는 예상보다 훨씬 더 오랜 시간이 걸릴 수 있습니다.
- 당신의 IP에서 타인의 평판. 공격자는 "깨끗한" 주거용 출구가 필요하여, 그의 활동이 일반 가정 사용자처럼 보이도록 합니다. 당신의 타겟 사이트는 당신의 세션에서 의심스러운 행동을 감지하게 되며, 당신이 수년간 가열해온 계정에 대한 차단이 발생할 것입니다.
- 제공업체와의 분쟁. 정상적인 제공업체의 관점에서 트래픽은 당신의 계정에서 발생했으며, 당신이 설명해야 할 것입니다.
어떻게 해야 할까: 실용적인 최소한
- 환경을 분리하십시오. 스크래핑 스택은 컨테이너나 별도의 VM에 설치해야 하며, 개인 쿠키, 업무 이메일 및 프로덕션 토큰이 있는 머신에는 설치하지 않아야 합니다. 이는 아직 아무도 모르는 패키지에 대해서도 작동하는 유일한 조치입니다.
- 코드 옆의
.env에서 프록시 자격 증명을 제거하십시오. 비밀은 비밀 관리자로 옮기거나 실행자의 환경 변수로 설정해야 하며, 모든 가져온 모듈이 읽을 수 있는 프로젝트 루트 파일에 두어서는 안 됩니다. - 가능한 곳에서 IP 기반 인증을 활성화하십시오. 서버 접근을 IP에 연결하면 도난당한 로그인/비밀번호 조합의 가치를 떨어뜨립니다: 타인의 주소에서 접근하면 작동하지 않습니다. 이것이 어떻게 작동하는지 및 어떤 시나리오에 적합한지에 대해서는 프록시를 위한 IP 주소 화이트리스트에 대한 자료에서 다루었습니다. 접근 저장에 대한 일반 규칙은 프록시 자격 증명의 안전한 저장 가이드에서 확인할 수 있습니다.
- 각 프로젝트에 대해 별도의 서브 자격 증명 및 트래픽 한도를 설정하십시오. 각 스크립트에 대해 기가바이트 한도가 있는 고유한 접근을 설정하면, 하나의 유출로 전체 잔액이 소진되지 않고 몇 분 내에 국한됩니다.
- 소비를 모니터링하십시오. 작업 증가 없이 GB 소비의 급격한 증가 — 이는 당신이 가진 가장 초기이자 저렴한 침해 탐지기입니다.
- 의존성에 대한 규율. 자유로운
install대신 lock 파일을 기반으로npm ci를 사용하고, 새로운 버전에 대해 격리(7-14일), 패키지의 나이 및 발행자 이력을 확인하며, 내부 미러를 allowlist로 설정합니다. 버전 35.x.y, 역사 없는 패키지 및 조합된 이름은 설치하는 것이 아니라 중단할 이유가 됩니다.
이미 감염되었다고 의심되는 경우
Sonatype의 권장 사항은 매우 구체적이며, 그 순서가 중요합니다: 호스트를 전체적으로 침해된 것으로 간주하십시오; 고정 메커니즘(Windows의 자동 시작 키 및 작업 스케줄러, macOS의 LaunchAgent)을 찾으십시오; 자격 증명을 회전하십시오 — npm, GitHub, 클라우드, CI/CD — 기계를 청소한 후에, 그렇지 않으면 새로운 비밀이 동일한 경로로 유출됩니다; lock 파일, 의존성 캐시 및 내부 미러에서 남아 있는 복사본을 확인하십시오; 재설치 전에 패키지 이름을 문자별로 확인하십시오.
이 목록에 자신의 것을 추가하십시오: 프록시 접근 비밀번호 변경, 안티 디텍트 브라우저에서 활성 세션 취소 및 지난 2주 동안의 트래픽 소비 기록 확인. 트래픽이 기가바이트 단위로 구매되는 경우 — 레지던트 또는 모바일 프록시 — 소비 보고서가 당신의 접근 로그입니다.
결론
Flooding Dropper는 정교함이 아니라 경제성에서 흥미롭습니다: 천 개의 일회용 패키지, 생성된 이름, 계정이 대량으로 — 이는 누군가가 주의 깊지 않게 의존성을 설치할 것이라는 것을 염두에 둔 컨베이어입니다. 특정 캠페인은 레지스트리에서 수주 동안 지워질 수 있지만, 흐름은 멈추지 않을 것입니다: Sonatype의 지난해 숫자는 환상을 남기지 않습니다.
데이터 수집을 하는 사람들을 위한 실용적인 결론은 간단합니다. 개발자의 머신은 모든 접근이 한 번에 모이는 지점입니다: 프록시, 계정, 세션, 파이프라인. 스택을 격리하고, 접근을 IP에 연결하며, 자격 증명을 프로젝트별로 나누고, 트래픽 소비 그래프를 주시하십시오. 이러한 조치 중 어느 것도 다음 캠페인이 색인화되기를 기다릴 필요가 없습니다.
```