Рискованное дело: объяснение самоудаляющихся пакетов npm.

Рискованное дело: программы защиты от контроля за экзаменами, которые удаляют сами себя.

TL, д-р

Пакеты удаляются сами собой. В течение пятнадцати дней в августе один оператор npm опубликовал девять пакетов под девятью именами с семи учетных записей и лично удалил восемь из них. Время, в течение которого каждый из них оставался активным, сократилось с тринадцати часов до семнадцати минут. Эта техника применяет не только он: еще семь пакетов от не связанных операторов, содержащих совершенно другие полезные нагрузки, были удалены их собственными издателями в среднем за 37.8 минуты. Артефакт исчезает до того, как запускается большинство защитных процессов, и установка уже произошла.

Все данные, предоставляемые реестром, обновляются автоматически; полезная нагрузка — нет. Все девять поставлялись с идентичным содержимым в байтах. bin/ В каталоге используются одни и те же дайджесты SHA-256 для трех имен пакетов и двух учетных записей с интервалом в пятнадцать дней. Идентификация содержимого — единственный сигнал отслеживания, который этот оператор не смог взломать, и единственный пакет, который он так и не удалил, — причина, по которой его вообще удалось проверить.

Люди, которые его устанавливают, не являются жертвами и в любом случае сильно подвержены риску. Этот инструмент не предназначен для разработчиков: он обходит удаленное наблюдение за экзаменами с помощью скрытого захвата экрана, извлечения текста с экрана и вывода ответов на всплывающее окно, поэтому кто бы ни баллотировался npm install является предполагаемым бенефициаром, а не целью. Они также запускают неподписанный исполняемый файл, который расшифровывает хранилище cookie их браузера, используя учетную запись, которая удаляется в течение часа. Они не могут получить исправление, не могут позже проверить, что именно они запускали, и не могут сообщить о причиненном вреде, не раскрывая причину установки.

Экосистема: В npm наблюдается та же закономерность, что и в PyPI. Период: Июнь-август 2026 г.

Измерение

Время пребывания — это интервал между появлением и исчезновением пакета, вычисляемый на основе метаданных самого реестра. Это измерения, а не оценки.

УпаковкаОпубликовано (UTC)Левая сторона
moidev2026-08-16 16:315h 58m
moidevx2026-08-17 03:2413h 23m
moidevz2026-08-26 03:3812h 56m
moideva2026-08-26 18:581h 33m
amicat2026-08-28 20:4817m
bmcat2026-08-28 21:1747m
eyevox2026-08-28 21:4421m
moidevh2026-08-31 03:2247m

При чтении в порядке публикации временной промежуток сокращается более чем в сорок раз — с 13 часов 23 минут в самом широком месте до 17 минут в самом узком. Первые четыре пакета в среднем длятся восемь с половиной часов; последние четыре — тридцать три минуты. 28 августа три пакета были опубликованы и сняты с публикации в течение 77 минут.

Сокращение объемов не является постепенным. Оно сосредоточено в период с 26 по 28 августа, и изменилось лишь то, как оператор оценивает, как долго упаковка может безопасно находиться в воздухе.

Каждый запрос на удаление инициируется издателем. В реестре для каждого запроса рядом с ним отображается пустой список сопровождающих. время.неопубликовано запись — это знак отказа от публикации, а не удаления. Девятый пакет, эйюссЭтот документ никогда и не был отозван; именно поэтому все это можно было изучить.

Существует второй режим отмены, который не следует путать с этим. В этом случае применяется только... версия полезной нагрузки Если посылку извлекают, а она остается целой, медианное время доставки составляет примерно 73 часа по 31 посылке. Эти замены поступают партиями по заранее составленному сценарию и оставляют после себя пустую оболочку — пакет.json объявление main Этот режим не отправляет файлы, единственная функция которого — сохранение имени файла. Такой режим — это уборка по расписанию. Этот же — это настроенное окно экспозиции.

Что сохранилось после удаления?

Девять из этих пакетов обслуживаются одним оператором: мойдев, moidevx, moidevz, Мойдева, moidevh, амикат, bmcat, eyevox и эйюссНазвания не имеют единого общего правила — любой, кто следит за этим, не сможет это подтвердить. мойдев Компания stem пропустила бы более половины из них — и они были опубликованы с семи разных учетных записей, почти все из которых зарегистрированы на доменах, используемых для временной рассылки электронной почты.

Их объединяет лишь наличие записи в реестре, не имеющей оснований для существования:

"bin": { "": "bin/kalamasha-tool.js" } }

Перед удалением мы сохранили копии пяти документов. Вся информация по пяти документам в полном объеме. bin / Каталог идентичен по байтам:

ФайлSHA-256
bin/kalamasha-tool.js0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
bin/uia_extract.exee2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
bin/chrome_cookies.ps121b61ec810331850d72423c40c5448e6cd310c4cfad6aed54f92cd7e7cac5f3a
bin/stealth_capture.ps1c9baf5897c03b941c54f736df5af9243ad28794a9e69746d41d4f4a34065589c
bin/uia_extract.pyc20b38c63efd9221930095c54b42cdd5adffa1972c44c4578226cbe1e4dbac3e
bin/uia_get_text.ps14a3f3ada0bdf13aa8e89edb8af817c7816296147dae5be25f169ff960d28a87c

Ещё два сигнала подтверждают это. Три пакета были опубликованы в 03:24, 03:38 и 03:22 UTC 17, 26 и 31 августа — шестнадцатиминутный промежуток в течение пятнадцати дней и три отдельных аккаунта. И два из этих аккаунтов были зарегистрированы в одном и том же временном домене электронной почты, что связывает их независимо от кода.

Счета

Это учетные записи npm publisher, которые отправили полезную нагрузку, с указанием загруженного пакета и времени, в течение которого он оставался активным:

Учетная запись издателяУпаковкаДомен электронной почтыЛевая сторона
letol39119moidev:1.0.0hutdot.com (одноразовый)5h 58m
so1d1a7i27moidevx:1.0.0ogzmail.com (одноразовый)13h 23m
lololololol435678eyiouss:3.0.21, 3.0.22, 4.0.1ogzmail.com (одноразовый)все еще опубликовано
tagadob568moidevz:1.0.0ebflyai.com (одноразовые)12h 56m
tayihim489moideva:1.0.0prodbits.com (одноразовые)1h 33m
sahihai123amicat:1.0.0, bmcat:2.0.9, eyevox:1.0.0веб-почта для потребителей17m / 47m / 21m
heytoshanmoidevh:1.0.0веб-почта для потребителей47m

so1d1a7i27 и лололололол435678 поделиться ogzmail.com домен регистрации — это связь, которая соединяет учетную запись, на которой все еще размещена активная копия, с учетной записью, которая была опубликована под этим доменом. мойдев ствол двумя неделями ранее. sahihai123 28 августа в течение 77 минут были опубликованы и отозваны три разных названия пакетов. Хейтошан зарегистрированный, опубликованный moidevhи отозвала его через 47 минут; это остается единственной публикацией, связанной с этим рассказом.

Все эти учетные записи не подтверждены по электронной почте, не содержат проверенной ссылки на систему контроля версий и не публиковали никаких проектов, не связанных с данной темой. Шесть из семи учетных записей больше ничего не размещают.

Одна посылка так и не была отозвана. eyiouss:4.0.1 Опубликовано с 16 августа, и на момент написания статьи проблема всё ещё оставалась нерешённой. Восемь артефактов не удалось восстановить; кампания была полностью реконструирована на основе того, что осталось. Оператор, который удаляет всё автоматически, в конечном итоге всё равно оставит один артефакт нетронутым.

Что делает инструмент

eyiouss:4.0.1 На npm он позиционирует себя как «высокопроизводительная утилита для работы с DOM и диагностический мост для современных веб-приложений». Это инструмент для захвата экрана и получения ответов, созданный для работы под удаленным контролем за проведением экзаменов, и об этом говорится в исходном коде.

Программа запуска копирует среду выполнения Electron под ложным именем файла перед запуском и указывает, чего именно она избегает:

// 🛡️ СКРЫТОЕ ИМЯ ДВОИЧНОГО ФАЙЛА: НЕ ДОЛЖНО КОНФЛИКРОВАТЬСЯ С РЕАЛЬНЫМ Testpad! const STEALTH_NAME = 'SearchApp.exe';

В заголовке того же файла он называется Анти-Прокторский Призрачный Сторожевой Пёс и реализует цикл возрождения, который замедляется по мере ускорения убийства. В других местах процесс повышает свой собственный приоритет. для борьбы с ограничением производительности процессора при проведении контроляЭта команда выводит приложение для проведения экзаменов из активного экрана, когда оно получает фокус, и завершает дочерний процесс Safe Exam Browser с помощью taskkill /F /T.

Захват данных осуществляется с помощью встроенного скрипта PowerShell, запускаемого с отключенной политикой выполнения и подавленным окном, при этом текст на экране собирается параллельно с помощью автоматизации пользовательского интерфейса Windows. Изображения и текст, находящиеся в очереди, отправляются в сеанс языковой модели во встроенном браузере, а ответ отображается в постоянно наложенном окне. Это соединение намеренно откладывается, и код объясняет причину: во избежание необратимого воздействия NETSTAT.

Посылка также отправляется chrome_cookies.ps1, возглавляемый ЭКСТРАКТОР ХРОМОВЫХ ПЕЧЕНЬЕВ, которая расшифровывает cookie-файлы Chrome и Edge через DPAPI и считывает базу данных cookie из четырех профилей браузеров. Утверждается ранее.cisЭли: Мы не обнаружили, чтобы этот скрипт вызывался по имени из какого-либо поставляемого JavaScript-файла. Присутствует и доступна только та часть, которая его использует и внедряет сохраненные сессионные cookie-файлы во встроенный браузер.

Позиция людей, которые его устанавливают.

Никто не устанавливает это случайно. Оно не работает вне контролируемого экзамена, а его результат — это наложение ответа на экран пользователя. Обманчивое описание пакета вовсе не предназначено для установщика — оно направлено на реестр и на любого, кто будет проверять систему после установки. Установщик знает, что он получает; описание существует для того, чтобы... запись В процессе установки это не отображается.

Пострадавшие стороны — это третьи лица, которые никогда не имели дела с npm: организация, проводящая экзамен, другие кандидаты и все, кто использует этот сертификат в своих целях.

Но, следовательно, установщик небезопасен, и именно это стоит подчеркнуть, поскольку именно модель исчезающего пакета создает уязвимость.

Они запускают неподписанный исполняемый файл, который никто не запускает. uia_extract.exe Файлы с кораблями, собранные без указания источника и происхождения сборки, взяты из учетной записи, которая больше не существует. Тот же файл, по хешу, был повторно опубликован кем-то другим. letol39119, so1d1a7i27, лололололол435678, tagadob568, tayihim489, sahihai123 и Хейтошан В течение пятнадцати дней. Нет никого, у кого можно было бы спросить разрешения, нет репозитория для чтения и нет истории для проверки — каждая учетная запись, которая его распространяла, удалила себя.

Они наделили его именно теми возможностями, которые необходимы вредоносному ПО. Скрытый процесс, работающий под вымышленным именем, расшифровывает хранилище cookie браузера, непрерывно считывает данные с экрана, завершает работу программного обеспечения безопасности и перезапускается после завершения. Сегодня расшифровка cookie ограничена доменами одного поставщика и обслуживает собственную сессию пользователя. Эта область действия представляет собой изменение всего одной строки кода, и никакие изменения в модели доставки не выдадут её, если она произойдет — новое имя, новая учетная запись, новая загрузка.

Они не могут получить исправление. Пакет удаляется из сети в течение часа. Нет пути обновления, нет уведомлений, и нет возможности узнать позже, что установленная ими версия отличается от той, что установил их друг. Всё, что находится на компьютере, остаётся там.

Они не могут провести аудит того, что сами же и запускали. Теперь в их файле блокировки содержится ссылка на пакет, который больше не разрешается. Если бы они позже захотели установить, что находится на их компьютере — после инцидента или спора — в реестре не было бы никакой информации, которую они могли бы им предоставить.

И они не могут сообщать о причиненном вреде. Пользователь, скомпрометированный этим инструментом, не может подать отчет о нарушении, не сообщив, зачем он его установил. Это не случайно. Отчеты о нарушениях реестра являются основным каналом обнаружения кратковременных пакетов, и пользовательская база этого оператора структурно не способна им пользоваться. Единственным оставшимся противником является автоматическое сканирование, для которого откалиброван семнадцатиминутный интервал.

Структура жертв и продолжительность воздействия — это один и тот же факт, наблюдаемый дважды. Это также объясняет аномалию во временной шкале: если бы причиной отмены был страх перед жалобами, то долгоживущий популярный пакет мер был бы отменен первым. Но этого не произошло, потому что жалобы так и не поступили.

Та же схема, другой оператор

Оператор, осуществляющий контроль за выполнением заданий, не одинок в этом, и наиболее очевидный параллельный запуск осуществляется на совершенно несвязанной полезной нагрузке.

В период с 24 по 27 августа появились четыре пакета npm под названиями, заимствованными из инструментов двухфакторной аутентификации. auth-otp, secretkey-2fa, secretkey2fa и 2fa-secretkey — имея в общей сложности шестнадцать версий. Каждая была опубликована со своего собственного недавно зарегистрированного аккаунта.бейилол, jeanpaul686g, zzzalipay, длууууВсе письма не были проверены по электронной почте, ни одно не имело проверенной ссылки на систему контроля версий, и ни одно не публиковало ничего другого. Каждое письмо было отозвано собственным издателем.

Эта вредоносная программа не имеет ничего общего с программным обеспечением для тестирования. Она считывает хранилища учетных данных браузера и токены Discord, а также использует алгоритм аутентификации Xbox Live в лаунчере Minecraft для получения токена обновления. Вот установщик. is жертва в обычном смысле этого слова — именно это делает сравнение полезным, поскольку поведение при доставке одинаково в любом случае.

Четыре цикла выполнялись в порядке публикации со временем 274.9, 37.8, 37.6 и 35.7 минут: одна долгая первая попытка, затем сходимость к устойчивому значению. Три дополнительных пакета снова принадлежат другим операторам и демонстрируют такое же поведение при выводе средств.

УпаковкаоператорЛевая сторона
octopus-actionразведывательный маяк2.5 мин
mt-ts-serverless-starterразведывательный маяк9.6 мин
2fa-secretkeyИмена обложки 2FA35.7 мин
secretkey2faИмена обложки 2FA37.6 мин
secretkey-2faИмена обложки 2FA37.8 мин
auth-otpИмена обложки 2FA274.9 мин
hex-encode-utilsдругими724.2 мин

Семь пакетов, медиана времени 37.8 минут, ни один из них не был связан с программным обеспечением для проведения экзаменов.

Три несвязанных полезных нагрузки, три несвязанных набора учетных записей, одна общая методика.

Почему окно возможностей закрывается

В 2026 году в среде реестра произошли какие-то изменения, и очевидным кандидатом на роль в этом является ускорение сканирования.

До недавнего времени вредоносные пакеты обнаруживались в основном постфактум: пользователем, который что-то замечал, сообщением от пользователя или в ходе периодической проверки. Время обнаружения измерялось днями. Теперь это не единственный способ обнаружения. Анализ вновь опубликованных пакетов в режиме, близком к реальному времени, — Система раннего предупреждения о вредоносном ПО от Xygeni Эта система, являющаяся частью растущего числа подобных систем в отрасли, значительно сокращает разрыв между публикацией и проверкой.

Оператор, столкнувшийся с подобной проблемой, имеет два варианта. Сделать полезную нагрузку сложнее для распознавания или сократить время, в течение которого её можно просмотреть. Второй вариант дешевле, не требует инженерных разработок, а реестр предоставляет механизм бесплатно: в течение 72-часового окна отмены публикации npm издатель может в одностороннем порядке удалить пакет, и его имя можно будет использовать повторно. Удаление ничего не стоит оператору.

Время совпадает. Оба оператора, описанные выше, сходятся к определенному значению и удерживают его, а не смещаются, что и является признаком правильно настроенного параметра, а не вопросом удобства. И параметр, к которому они пришли — десятки минут — находится в пределах заданного значения.cisместо установки, необходимое для прохождения автоматической проверки, при этом оставляя устанавливаемый пакет достаточно долго, чтобы дойти до целевой аудитории.

Это пока лишь гипотеза. Данные о времени не позволяют отделить реакцию на сканирование от реакции на принудительное соблюдение требований реестра или от обычного операционного развития, поскольку эти операторы учатся друг у друга. То, что можно сказать без выводов, более узконаправленно, но все же полезно: Теперь период экспозиции настолько короткий, что любой контроль, зависящий от проверки упаковки после публикации, работает в режиме гонки со временем, установленным оператором. Меры контроля, не зависящие от проверки — карантин по возрасту, отключение скриптов установки — не затрагиваются этой расой, что и является практической причиной для их предпочтения.

Что с этим делать

Карантин по возрасту. Ни один из элементов в таблице времени пребывания не просуществовал тринадцать часов. Политика, согласно которой ни одна версия зависимости не может быть установлена, пока она не просуществует 72 часа, исключила бы каждый из них, ничего не обнаружив.

По умолчанию скрипты установки отключены. –Ignore-scripts Удаляет механизм доставки, от которого зависят пакеты для кражи учетных данных в этом корпусе. Это не помогает против инструмента, который пользователь запускает преднамеренно, что является предварительным решением.cisЭто различие заслуживает понимания.

Рассматривайте исчезновение как инцидент, связанный с безопасностью. Оповещение при прекращении разрешения установленной зависимости. Доказательства сохраняются в вашем файле блокировки, а не в реестре.

Отслеживайте контент, а не имена. Шесть приведенных выше дайджестов совпадают независимо от имени пакета, учетной записи издателя или строки версии — каждое поле, которое, как показал этот оператор, будет изменяться. Правило на стороне реестра, согласно которому новая зарегистрированная учетная запись, удаляющая свой единственный пакет в течение часа, является подлежащим отчету шаблоном, сработало бы для каждого пакета здесь, только на основе метаданных.

А если вы рассматриваете возможность установки чего-либо из этой категории: Свойства, которые затрудняют обнаружение проблем реестром, — это те же самые свойства, которые лишают вас возможности защититься. Нет издателя, которого можно было бы привлечь к ответственности, нет пути обновления и нет записи о том, что вы запускали.

индикаторы

ТипЗначение
Файлbin/kalamasha-tool.js — не-standard точка входа в мусорный контейнер
SHA-2560c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
SHA-256e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
РазработкаSearchApp.exe написанный рядом с легитимной средой выполнения Electron
Поведениеpowershell -ExecutionPolicy Bypass -File с windowsHide: true
Поведениеtaskkill /F /T целевая платформа для безопасного просмотра экзаменационных материалов
МетаданныеПустой список сопровождающих рядом с time.unpublished запись
Аккаунтletol39119, so1d1a7i27, lolololol435678, tagadob568, tayihim489, sahihai123, хейтошан
Регистрацияogzmail.com, hutdot.com, ebflyai.com, prodbits.com — домены для одноразовой почты

Референсы

sca-инструменты-программное обеспечение-композиция-анализ-инструменты
Расставьте приоритеты, устраните и защитите риски, связанные с программным обеспечением
Получите бесплатный аккаунт.
Нет необходимости кредитную карту.

Защитите свою разработку и доставку программного обеспечения

с пакетом продуктов Xygeni