TL; DR
해당 패키지들은 자동으로 삭제됩니다. 8월 한 달 동안 한 npm 운영자가 7개의 계정과 9개의 이름으로 9개의 패키지를 게시한 후, 그중 8개를 직접 삭제했습니다. 각 패키지가 시스템에 남아 있던 시간은 기존 13시간에서 17분으로 단축되었습니다. 이러한 수법은 이 운영자만의 것이 아닙니다. 전혀 다른 내용을 담고 있는 다른 운영자들이 게시한 7개의 패키지도 평균 37.8분 만에 스스로 삭제되었습니다. 대부분의 방어 프로세스가 실행되기 전에 패키지가 사라지고 설치는 이미 완료된 것입니다.
레지스트리에 노출된 모든 정보는 순환되지만, 페이로드는 그렇지 않습니다. 9개 모두 바이트 단위로 동일한 데이터를 전송했습니다. bin/ 디렉토리에서 세 개의 패키지 이름과 두 개의 계정에 걸쳐 동일한 SHA-256 다이제스트가 15일 간격으로 발견되었습니다. 콘텐츠 ID는 이 운영자가 차단하지 못한 유일한 추적 신호이며, 그들이 회수하지 않은 단 하나의 패키지 덕분에 이 모든 것을 조사할 수 있었습니다.
그것을 설치하는 사람들은 피해자가 아니며, 어쨌든 심각한 위험에 노출되어 있습니다. 이 도구는 개발자를 위한 것이 아닙니다. 숨겨진 화면 캡처, 화면 텍스트 추출 및 오버레이에 답변을 표시하는 기능을 통해 원격 시험 감독을 무력화합니다. 누가 운영하든 npm install 목표 대상이 아니라 의도된 수혜자입니다. 그들은 또한 서명되지 않은 바이너리를 실행하여 브라우저 쿠키 저장소를 복호화하는데, 이 바이너리는 한 시간 안에 자동으로 삭제되는 계정에서 실행됩니다. 그들은 수정 패치를 받을 수 없고, 나중에 실행한 내용을 감사할 수도 없으며, 설치 이유를 밝히지 않고는 피해를 신고할 수도 없습니다.
생태계 : npm에서도 PyPI와 동일한 패턴이 관찰되었습니다. 기간 : 2026년 6월~8월.
측정
체류 시간은 패키지가 나타났다가 사라지는 간격이며, 레지스트리 자체의 메타데이터를 기반으로 계산됩니다. 이는 추정치가 아닌 측정값입니다.
| 묶음 | 게시됨(UTC) | 왼쪽에 서 있는 |
|---|---|---|
moidev | 2026-08-16 16:31 | 5h 58m |
moidevx | 2026-08-17 03:24 | 13h 23m |
moidevz | 2026-08-26 03:38 | 12h 56m |
moideva | 2026-08-26 18:58 | 1h 33m |
amicat | 2026-08-28 20:48 | 17m |
bmcat | 2026-08-28 21:17 | 47m |
eyevox | 2026-08-28 21:44 | 21m |
moidevh | 2026-08-31 03:22 | 47m |
발행 순서대로 살펴보면, 발행 간격은 최대 13시간 23분에서 최소 17분으로 40분의 1 이상 줄어듭니다. 처음 네 개의 패키지는 평균 8시간 30분이고, 마지막 네 개의 패키지는 평균 33분입니다. 8월 28일에는 단 77분 만에 세 개의 패키지가 발행되었다가 삭제되었습니다.
수축은 점진적인 변화가 아닙니다. 8월 26일에서 28일 사이에 집중적으로 발생했으며, 변경된 사항은 운송업체가 화물을 안전하게 보관할 수 있는 기간에 대한 추정치였습니다.
여기에서 이루어지는 모든 철회는 발행사에서 시작한 것입니다. 각 철회에 대한 등록 문서에는 관리자 목록이 비어 있는 것으로 나타납니다. 시간.미발표 기록 — 삭제 요청이 아닌 게시 취소의 서명입니다. 아홉 번째 패키지, 아이우스그것은 결코 철회된 적이 없으며, 바로 그 때문에 이 모든 것을 조사할 수 있었던 것입니다.
두 번째 탈퇴 체제가 존재하며, 이 체제와 혼동해서는 안 됩니다. 이 체제에서는 오직 페이로드 버전 회수된 패키지가 살아남는 경우, 31개 패키지에 대한 중앙값은 대략 73시간입니다. 이러한 교체품은 정해진 순서대로 배송되며, 빈 껍데기만 남깁니다. package.json 선언하다 본관 파일을 전송하지 않는, 단지 이름만 유지하는 기능을 하는 시스템입니다. 그 시스템은 정해진 일정에 따라 유지 보수 작업을 수행하는 것입니다. 반면 이 시스템은 노출 기간을 조정하는 방식입니다.
삭제 후에도 남는 것은 무엇인가
이 패키지 중 9개는 하나의 운영자에 속합니다. 모이데브, 모이데브엑스, 모이데브즈, 모이데바, 모이데브, 아미캣, bmcat, 아이복스 아이우스이름에는 공통된 규칙이 없습니다. 추적하는 사람이라면 누구든 마찬가지입니다. 모이데브 stem은 그중 절반 이상을 놓쳤을 것이며, 이 게시물들은 거의 모두 일회용 이메일 도메인에 등록된 7개의 서로 다른 계정에서 게시되었습니다.
둘의 공통점은 존재할 이유가 전혀 없는 화물 목록 항목이 있다는 것입니다.
"빈": { "": "bin/kalamasha-tool.js" } } 우리는 반출하기 전에 다섯 개의 사본을 보관했습니다. 다섯 개 모두를 통틀어 전체 내용은 다음과 같습니다. 큰 상자/ 디렉터리는 바이트 단위로 동일합니다.
| 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 | SHA-256 |
|---|---|
bin/kalamasha-tool.js | 0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd |
bin/uia_extract.exe | e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865 |
bin/chrome_cookies.ps1 | 21b61ec810331850d72423c40c5448e6cd310c4cfad6aed54f92cd7e7cac5f3a |
bin/stealth_capture.ps1 | c9baf5897c03b941c54f736df5af9243ad28794a9e69746d41d4f4a34065589c |
bin/uia_extract.py | c20b38c63efd9221930095c54b42cdd5adffa1972c44c4578226cbe1e4dbac3e |
bin/uia_get_text.ps1 | 4a3f3ada0bdf13aa8e89edb8af817c7816296147dae5be25f169ff960d28a87c |
두 가지 추가 신호가 이를 뒷받침합니다. 세 개의 패킷은 8월 17일, 8월 26일, 8월 31일 03:24, 03:38, 03:22 UTC에 게시되었는데, 이는 15일 동안 16분 간격으로 세 개의 서로 다른 계정에서 전송된 것입니다. 또한 이 계정 중 두 개는 동일한 일회용 이메일 도메인에 등록되어 있어, 코드와는 별개로 서로 연결되어 있습니다.
계정
다음은 페이로드를 배포한 npm 게시자 계정 목록이며, 각 계정에 업로드된 패키지와 해당 패키지가 처리된 후 경과된 시간입니다.
| 게시자 계정 | 묶음 | 이메일 도메인 | 왼쪽에 서 있는 |
|---|---|---|---|
letol39119 | moidev:1.0.0 | hutdot.com (일회용) | 5h 58m |
so1d1a7i27 | moidevx:1.0.0 | ogzmail.com (일회용) | 13h 23m |
lololololol435678 | eyiouss:3.0.21, 3.0.22, 4.0.1 | ogzmail.com (일회용) | 여전히 출판됨 |
tagadob568 | moidevz:1.0.0 | ebflyai.com (일회용) | 12h 56m |
tayihim489 | moideva:1.0.0 | prodbits.com (일회용) | 1h 33m |
sahihai123 | amicat:1.0.0, bmcat:2.0.9, eyevox:1.0.0 | 소비자 웹메일 | 17m / 47m / 21m |
heytoshan | moidevh:1.0.0 | 소비자 웹메일 | 47m |
so1d1a7i27 lololololol435678 공유하다 ogzmail.com 등록 도메인 — 현재 활성 사본을 호스팅하는 계정과 해당 도메인으로 게시한 계정을 연결하는 링크입니다. 모이데브 2주 전에 줄기세포가 자랐습니다. 사히하이123 8월 28일, 단 77분 만에 세 개의 서로 다른 패키지 이름을 게시했다가 철회했습니다. 헤이토샨 등록됨, 게시됨 모이데브그리고 47분 후에 해당 게시물을 삭제했습니다. 그 게시물은 해당 계정의 유일한 발행물로 남아 있습니다.
이 계정들은 모두 이메일 인증이 되어 있지 않고, 인증된 소스 코드 관리 링크도 없으며, 관련 없는 프로젝트를 게시한 적도 없습니다. 7개 중 6개는 더 이상 아무것도 호스팅하지 않습니다.
한 패키지는 끝내 회수되지 않았습니다. 아이우스:4.0.1 8월 16일부터 공개되었으며, 이 글을 쓰는 시점에도 여전히 해결 가능했습니다. 8개의 아티팩트는 복구할 수 없었고, 캠페인은 남은 하나의 아티팩트를 기반으로 완전히 재구성되었습니다. 습관적으로 삭제하는 운영자라도 결국에는 하나의 아티팩트를 남기게 마련입니다.
도구의 기능
아이우스:4.0.1 npm에서 이 라이브러리는 스스로를 "최신 웹 애플리케이션을 위한 고성능 DOM 유틸리티 및 진단 브리지"라고 설명합니다. 원격 시험 감독 시스템에서 실행되도록 설계된 화면 캡처 및 답안 검색 도구이며, 소스 코드에서도 이를 명시하고 있습니다.
런처는 Electron 런타임을 실행하기 전에 가짜 파일 이름으로 복사하고, 피해야 할 항목의 이름을 지정합니다.
// 🛡️ 스텔스 바이너리 이름: 실제 테스트패드와 충돌해서는 안 됩니다! const STEALTH_NAME = 'SearchApp.exe';
해당 파일의 헤더에는 그것을 an이라고 부릅니다. 감독관 반대 유령 감시자 또한, 프로세스가 종료되는 속도가 빠를수록 재시작 루프가 더 느려지는 기능을 구현합니다. 다른 곳에서는 프로세스 자체의 우선순위를 높입니다. 감독 CPU 스로틀링에 맞서 싸우기 위해시험 애플리케이션이 포커스를 얻으면 전경에서 벗어나게 하고, Safe Exam Browser 자식 프로세스를 종료합니다. taskkill /F /T.
캡처는 실행 정책이 비활성화되고 창이 숨겨진 상태로 호출되는 번들 PowerShell 스크립트를 통해 실행되며, 화면의 텍스트는 Windows UI 자동화를 통해 병렬로 수집됩니다. 대기 중인 이미지와 텍스트는 내장 브라우저의 언어 모델 세션으로 전송되고 응답은 항상 최상단에 표시되는 오버레이에 렌더링됩니다. 해당 연결은 의도적으로 지연되며, 코드는 그 이유를 설명합니다. NETSTAT에 영구적으로 노출되는 것을 방지하기 위해.
해당 패키지는 배송도 가능합니다. 크롬 쿠키.ps1, 헤드 크롬 쿠키 추출기이 도구는 DPAPI를 통해 Chrome 및 Edge 쿠키를 복호화하고 최대 4개의 브라우저 프로필에서 쿠키 데이터베이스를 읽습니다.cisely: 저희는 배포된 JavaScript 파일에서 해당 스크립트가 이름으로 호출되는 것을 발견하지 못했습니다. 존재하고 접근 가능한 부분은 저장된 세션 쿠키를 내장 브라우저에 삽입하는 소비 부분입니다.
그것을 설치하는 사람들의 입장
누구도 실수로 이 프로그램을 설치하지 않습니다. 감독 하에 진행되는 시험 외에는 아무런 기능도 없으며, 출력은 사용자 화면에 답안을 겹쳐 보여주는 것뿐입니다. 기만적인 패키지 설명은 설치자를 겨냥한 것이 아니라, 레지스트리와 나중에 컴퓨터를 감사하는 사람들을 속이기 위한 위장입니다. 설치자는 자신이 무엇을 설치하게 될지 알고 있습니다. 그 설명은 바로 그런 목적으로 존재하는 것입니다. 기록 설치 과정에 그 내용이 반영되지 않았습니다.
피해를 보는 당사자는 npm과 전혀 관련이 없는 제3자입니다. 시험을 주관하는 기관, 다른 응시자, 그리고 해당 자격증의 의미에 의존하는 모든 사람들이 그 대상입니다.
하지만 설치 프로그램 자체가 안전한 것은 아니며, 이 부분을 명확히 설명할 필요가 있습니다. 왜냐하면 패키지가 사라지는 방식 자체가 취약점을 만들어내기 때문입니다.
그들은 서명되지 않은 바이너리 파일을 실행하고 있습니다. uia_extract.exe 소스 코드나 빌드 이력 없이 컴파일된 함선 파일이 더 이상 존재하지 않는 계정에서 가져온 것입니다. 동일한 파일이 해시값을 통해 다시 게시되었습니다. 레톨39119, so1d1a7i27, lololololol435678, 타가도브568, 타이힘489, 사히하이123 헤이토샨 15일 동안 지속되었습니다. 문의할 관리자도 없고, 읽어볼 저장소도 없고, 확인할 이력도 없습니다. 배포에 관여했던 모든 주체가 스스로 삭제했기 때문입니다.
그들은 악성코드가 필요로 하는 기능을 정확히 부여했습니다. 가짜 이름으로 실행되는 숨겨진 프로세스가 브라우저 쿠키 저장소를 복호화하고, 화면을 지속적으로 읽고, 보안 소프트웨어를 종료시킨 후 종료될 때 다시 실행됩니다. 현재 쿠키 복호화는 특정 공급업체의 도메인으로 제한되어 사용자의 세션에만 적용됩니다. 이러한 제한은 코드 한 줄만 수정하면 되므로, 변경 사항이 발생하더라도 (새로운 이름, 새로운 계정, 새로운 업로드 등) 전달 모델에는 아무런 변화가 없습니다.
그들은 해결책을 찾을 수 없습니다. 해당 패키지는 한 시간 안에 게시가 취소됩니다. 업데이트 경로도 없고, 권장 사항도 없으며, 나중에 자신이 설치한 버전이 친구가 설치한 버전과 다르다는 것을 알 방법도 없습니다. 컴퓨터에 설치된 버전은 그대로 유지됩니다.
그들은 자신들이 운영한 내용을 감사할 수 없습니다. 이제 그들의 잠금 파일은 더 이상 확인되지 않는 패키지를 참조합니다. 만약 나중에 사고나 분쟁 발생 후 자신의 컴퓨터에 무엇이 있는지 확인하려고 해도 레지스트리에 기록이 남아 있지 않습니다.
그리고 그들은 피해를 신고할 수 없습니다. 이 도구에 감염된 사용자는 설치 이유를 밝히지 않고는 악용 신고를 할 수 없습니다. 이는 우연이 아닙니다. 레지스트리 악용 신고는 수명이 짧은 악성 패키지를 적발하는 주요 채널인데, 이 공격자의 사용자층은 구조적으로 이를 활용할 능력이 없습니다. 남은 유일한 위협은 자동 스캔인데, 공격자는 17분이라는 시간 제한을 기준으로 이를 탐지합니다.
피해자 구조와 체류 시간은 동일한 사실이 두 번 반복되는 현상입니다. 이는 또한 타임라인의 예외적인 상황을 설명해 줍니다. 만약 철회가 불만 제기에 대한 두려움 때문에 발생했다면, 오랫동안 인기를 누려온 패키지가 먼저 철회되었어야 합니다. 하지만 불만이 제기된 적이 없었기 때문에 그렇지 않았습니다.
동일한 패턴, 다른 연산자
이러한 문제는 감독 담당자만 겪는 것이 아니며, 가장 명확한 유사 사례는 관련 없는 페이로드에서 발생합니다.
8월 24일과 27일 사이에 2단계 인증 도구에서 이름을 따온 npm 패키지 4개가 새로 등장했습니다. 인증-otp, 비밀키-2FA, secretkey2fa 2FA-비밀키 — 총 16개의 버전이 있습니다. 각각은 새로 등록한 계정에서 게시되었습니다.베일롤, jeanpaul686g, zzzalipay, dluuuuu이메일 주소가 모두 확인되지 않았고, 소스 코드 관리 링크도 확인되지 않았으며, 다른 어떤 콘텐츠도 게시하지 않았습니다. 모든 콘텐츠는 발행사에 의해 삭제되었습니다.
해당 페이로드는 시험 소프트웨어와는 전혀 관련이 없습니다. 브라우저 자격 증명 저장소와 Discord 토큰을 읽고, Minecraft 런처에 대해 Xbox Live 인증 절차를 거쳐 새로 고침 토큰을 획득합니다. 여기 설치 프로그램이 있습니다. is 피해자는 일반적인 의미의 피해자입니다. 전달 방식은 동일하기 때문에 이러한 비교가 유용한 것입니다.
네 번의 시도는 발표 순서대로 각각 274.9분, 37.8분, 37.6분, 35.7분에 완료되었습니다. 첫 번째 시도는 시간이 오래 걸렸지만, 이후에는 안정적인 수치로 수렴했습니다. 다른 통신사에서 제공한 세 개의 추가 패키지에서도 동일한 인출 동작이 나타났습니다.
| 묶음 | 운영자 | 왼쪽에 서 있는 |
|---|---|---|
octopus-action | 정찰 신호기 | 2.5 분 |
mt-ts-serverless-starter | 정찰 신호기 | 9.6 분 |
2fa-secretkey | 2FA 커버 네임 | 35.7 분 |
secretkey2fa | 2FA 커버 네임 | 37.6 분 |
secretkey-2fa | 2FA 커버 네임 | 37.8 분 |
auth-otp | 2FA 커버 네임 | 274.9 분 |
hex-encode-utils | 기타 | 724.2 분 |
7개의 패키지를 사용했고, 평균 소요 시간은 37.8분이었으며, 시험 소프트웨어와 관련된 패키지는 없었습니다.
서로 관련 없는 세 개의 페이로드, 서로 관련 없는 세 개의 계정 세트, 하나의 공통된 기술.
왜 기회가 사라지는 걸까요?
2026년 동안 레지스트리 환경에 어떤 변화가 있었는데, 가장 유력한 원인은 스캔 속도가 빨라졌다는 점입니다.
최근까지 악성 패키지는 주로 사후에 발견되었습니다. 사용자가 무언가를 발견하거나, 하위 시스템에서 보고되거나, 주기적인 검사를 통해 발견되는 식이었죠. 탐지 지연 시간은 며칠씩 걸렸습니다. 하지만 이제 더 이상 그것만이 유일한 방법은 아닙니다. 새로 배포된 패키지에 대한 거의 실시간 분석이 가능해졌습니다. Xygeni 자체 악성코드 조기 경보 시스템 업계 전반에 걸쳐 이러한 시스템이 점차 늘어나고 있는 가운데, 이 시스템은 출판과 검토 사이의 간극을 훨씬 줄여줍니다.
이러한 상황에 직면한 운영자는 두 가지 선택지가 있습니다. 페이로드를 식별하기 어렵게 만들거나, 페이로드를 확인할 수 있는 시간을 단축하는 것입니다. 두 번째 방법이 더 저렴하고 엔지니어링 작업이 필요 없으며, 레지스트리에서 무료로 메커니즘을 제공합니다. npm의 72시간 게시 취소 기간 내에 게시자는 패키지를 일방적으로 삭제할 수 있으며, 이후 해당 이름을 재사용할 수 있습니다. 패키지 삭제에 운영자는 아무런 비용도 부담하지 않습니다.
타이밍이 딱 들어맞습니다. 위의 두 연산자는 모두 특정 수치로 수렴하여 변동 없이 유지하는데, 이는 편의성이 아닌 조정된 매개변수의 모습입니다. 그리고 그들이 수렴한 매개변수는 수십 분 만에 설정되었습니다.cis자동 검사 통과를 보장하면서도 사용자가 패키지를 설치할 수 있는 충분한 시간을 유지하여 최종 사용자에게 도달할 수 있도록 적절한 위치에 배치해야 합니다.
이는 여전히 가설에 불과합니다. 타이밍 데이터로는 스캐닝에 대한 반응과 레지스트리 시행에 대한 반응, 또는 운영자들이 서로 학습하면서 발생하는 일반적인 운영 성숙도를 구분할 수 없습니다. 추론 없이 말할 수 있는 것은 범위가 더 좁지만 여전히 유용합니다. 노출 기간이 이제 너무 짧아져서, 제품 출시 후 패키지 검사에 의존하는 모든 관리 방식은 운영자가 설정한 시간과의 싸움을 벌여야 합니다. 검사에 의존하지 않는 제어 방식(예: 연령별 격리, 설치 스크립트 비활성화)은 해당 경쟁 조건의 영향을 받지 않으므로, 이러한 방식을 선호하는 실질적인 이유가 됩니다.
그것에 대해해야 할 일
연령별 격리. 체류 시간 테이블에 있는 어떤 항목도 13시간을 견디지 못했습니다. 종속성 버전이 72시간 동안 존재하기 전까지는 설치할 수 없도록 하는 정책을 시행했다면 아무것도 감지하지 못하고 모든 항목을 제외했을 것입니다.
기본적으로 설치 스크립트를 비활성화합니다. – 스크립트 무시 이 방법은 해당 데이터 세트에 포함된 자격 증명 탈취 패키지가 의존하는 전달 메커니즘을 제거합니다. 하지만 사용자가 의도적으로 실행하는 도구에는 효과가 없습니다.cis그 차이점은 이해할 가치가 있습니다.
실종 사건을 보안 사고로 취급하십시오. 설치된 종속성 항목의 해결이 중단되면 경고가 표시됩니다. 레지스트리가 아닌 잠금 파일에 관련 증거가 남아 있습니다.
이름이 아닌 콘텐츠를 추적하세요. 위의 6개 다이제스트는 패키지 이름, 게시자 계정 또는 버전 문자열과 관계없이 일치합니다. 즉, 이 운영자가 변경할 것으로 예상되는 모든 필드에 대해 동일한 결과가 나타났습니다. 새로 등록된 계정이 한 시간 이내에 유일한 패키지를 철회하는 것을 보고 대상 패턴으로 간주하는 레지스트리 측 규칙이 있었다면 메타데이터만으로도 여기 있는 모든 패키지에 대해 규칙이 적용되었을 것입니다.
그리고 이 카테고리에 속하는 제품 설치를 고려하고 계신다면: 레지스트리에서 이를 감지하기 어렵게 만드는 속성들은 결국 아무런 대책도 세우지 못하게 만드는 속성들과 동일합니다. 책임을 물을 게시자도 없고, 업데이트 경로도 없으며, 실행한 내용에 대한 기록도 남아 있지 않습니다.
표시
| 타입 | 가치관 |
|---|---|
| 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 | bin/kalamasha-tool.js — 비-standard 쓰레기통 입구 |
| SHA-256 | 0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd |
| SHA-256 | e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865 |
| 방법 | SearchApp.exe 정식 Electron 런타임 옆에 쓰여 있습니다. |
| 행동 | powershell -ExecutionPolicy Bypass -File 과 windowsHide: true |
| 행동 | taskkill /F /T Safe Exam Browser 프로세스를 대상으로 합니다. |
| 메타 데이터 | 옆에 빈 유지 관리자 목록이 있습니다. time.unpublished 기록 |
| 계정 | letol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123, heytoshan |
| 등록 | ogzmail.com, hutdot.com, ebflyai.com, prodbits.com — 일회용 메일 도메인 |
참고자료
- npm 정책 게시 취소 — 게시자가 개입 없이 패키지를 삭제할 수 있는 72시간의 기간.







