TL, д-р
Пакет PyPI под названием gcli-control Пакет поставлялся с полноценным инструментом удаленного доступа к Windows: запись нажатий клавиш, захват изображения с веб-камеры и микрофона, мониторинг буфера обмена, доступ к учетным данным браузера, управление экраном, сохранение состояния, повышение привилегий и, как заявлялось, «более 140 команд». Он не скрывал, что это такое: в описании пакета на PyPI он описывался как «инструмент удаленного доступа через npoint.io".
Стоит обратить внимание на эту фразу. "через npoint.io." Вместо того чтобы обращаться к выделенному серверу, имплантат использовал npoint[.]io (бесплатный, легитимный сервис для размещения небольших JSON-документов) в качестве ретранслятора команд и управления. Оператор записывает команды в JSON-хранилище; имплант опрашивает это хранилище, выполняет команду и записывает результаты обратно. Нет домена, принадлежащего злоумышленнику, который нужно блокировать, нет нового IP-адреса, который нужно помечать: трафик направляется к сервису, который разработчики используют каждый день.
Было выпущено шесть версий, каждая из которых длилась примерно тринадцать с половиной часов и превосходила предыдущую. Каждая из них была озвучена. ml_predicted_safe Автоматизированный классификатор перед ручной проверкой переклассифицировал семейство как вредоносное.
Анатомия атаки
gcli-control устанавливает пакет импорта gcliЭто кодовая база на Python, состоящая из 35 модулей. Установка не требуется. hooks — ничего не запускается во время пип установитьЭта возможность реализована в самих модулях, которые вызываются при запуске инструмента, а структура модулей напоминает техническое описание продукта:
| Область компетенций | Модули |
|---|---|
| наблюдение за хостом | keylog, webcam, audio, clipboard, desktop, monitoring |
| Доступ к учетным данным и данным | browser, forensics, fileops, transfer, users |
| Закрепление позиций и эскалация | persistence, elevator, registry, security |
| Восстановление хоста и сети | system, processes, network_config, wifi, bluetooth, netutils |
| Командование и контроль | client, host, session, protocol, npoint, crypto, encrypt |
Самая интересная часть — это канал управления. Большинство инструментов удаленного доступа обращаются к серверу, контролируемому оператором — IP-адресу, домену, хостинг-провайдеру, на который можно пожаловаться и отключить. gcli-control вместо этого рассматривает Бесплатный сервис JSON-bin в качестве места для хранения файлов., n-точка модуль считывает и записывает небольшие JSON-документы. npoint[.]io по обычному HTTPS; крипто-/шифровать Модули упаковывают передаваемые полезные нагрузки таким образом, чтобы содержимое контейнера не представляло собой команды в открытом текстовом виде. В результате получается опосредованный, зашифрованный ретранслятор:
- Оператор помещает (зашифрованную) инструкцию в JSON-хранилище.
- Встроенный вредоносный код, работающий на хосте-жертве, опрашивает этот контейнер, расшифровывает данные, выполняет один из своих обработчиков команд и записывает (зашифрованный) результат обратно.
- Для сетевого монитора жертва просто общается с npoint[.]io — сервис, имеющий законные основания для появления в трафике разработчиков.
Здесь нет загрузки на втором этапе и нет обфусцированного загрузчика: функционал поставляется целиком, в читаемом формате Python, и единственное «скрытие» — это выбор ретранслятора и шифрование передаваемых данных.
Стоит подробно объяснить, почему использование JSON-хранилища в качестве временного хранилища данных является оперативным преимуществом, поскольку это объясняет, почему мы ожидаем увидеть эту закономерность снова:
- Нет конечной точки, принадлежащей оператору. Нет домена управления и контроля (C2), который нужно регистрировать, нет VPS для аренды, и нет ничего, что могли бы конфисковать защитник или регистратор. Удаление пакет не затрагивает канал; удаление канал Это означает, что нужно поручить универсальному SaaS-сервису отслеживать один документ среди миллионов.
- Отмывание репутации. Исходящий HTTPS-трафик к известному сервису для разработчиков не влечет за собой тех негативных последствий для репутации, которые возникают при использовании нового домена или необработанного IP-адреса. Многие системы фильтрации исходящего трафика позволяют это делать автоматически.
- Асинхронность и возможность отрицания. Модель опроса — когда имплант получает документ с заданным интервалом, а не поддерживает открытый сокет — генерирует трафик, который выглядит как периодический опрос API, а не как интерактивная сессия. Шифрование содержимого документа означает, что даже аналитик, обнаруживший корзину, увидит зашифрованный текст, а не список команд.
- Тривиальное вращениеПеремещение в другую ячейку или в совершенно другую службу для добавления заметок/вставки — это всего лишь изменение конфигурации в одну строку для оператора. Любой черный список, привязанный к конкретному ретранслятору, становится неактуальным в момент его отправки.
Оператор соглашается на компромисс между пропускной способностью и задержкой: ретранслятор с «мертвой трубкой» работает медленнее и имеет меньшую пропускную способность, чем прямое соединение. Для системы наблюдения и управления, которая в основном выдает короткие команды и собирает результаты с течением времени, такой компромисс легко допустить.
Лента
Ситуация в семье развивалась стремительно. Временные метки создания заявок для помеченных версий указывают на то, что весь наблюдаемый процесс занял около тринадцати с половиной часов, а количество доказательств, полученных сканером, росло вместе с кодом — от пары помеченных участков в первой версии до четырнадцати в последней.
| Версия | Первое упоминание (UTC) | Внимание |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Первоначальная загрузка; минимальное количество помеченных поверхностей. |
0.5.0 | 2026-07-21 18:01 | Возможности расширяются. |
0.2.0 | 2026-07-21 18:03 | (нумерация версий не совпадает с порядком загрузки) |
0.6.0 | 2026-07-22 00:44 | Более широкий набор модулей |
0.7.0 | 2026-07-22 01:58 | Практически полный набор инструментов |
0.7.1 | 2026-07-22 02:28 | Новейшая версия; 35 модулей, полная функциональность. |
Номера версий не были опубликованы в строгом порядке, но направление ясно: небольшой первый вариант, затем быстрая итерация к полнофункциональной версии 0.7.1. Это характерно для проекта, находящегося в активной разработке и выходящего в публичный реестр по мере роста, а не для разового выпуска.
Показатели компромисса
Все приведенные ниже показатели были подтверждены на основе содержимого пакета на диске и детерминированного сканирования показателей версии 0.7.1; ни один из них не является предположительным.
| Тип | Индикаторные |
|---|---|
| Пакет (PyPI) | gcli-control, версии 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Импортировать пакет | gcli |
| Реле C2 | npoint[.]io (Транзакция JSON-bin; зашифрованные данные) |
| Указанный репозиторий | github[.]com/gcli-control/gcli |
| Поведенческий отпечаток | Совмещенные модули видеонаблюдения: keylog, webcam, audio, clipboard, browserплюс обеспечение постоянного хранения данных, функция повышения производительности и уровень управления клиентом/хостом/протоколом в одном пакете. |
| Установите hooks | Нет: эта функция работает во время выполнения инструмента, а не во время установки. |
Примечание защитника: Самый сильный и устойчивый сигнал — это не домен (хост-ретранслятор вращается тривиально), а... формировать: единый пакет, объединяющий три или более различных примитива наблюдения за хостом. и Направляет цикл команда/ответ через общедоступный сервис размещения контента. Блокировка. npoint[.]io Прямое оповещение непрактично для большинства магазинов; гораздо надежнее оповещать о неожиданном процессе, который одновременно захватывает входные устройства и взаимодействует со службой JSON-bin.
Наблюдаемое поведение и формулировка проблемы
Два фактора делают эту выборку необычной, и оба являются наблюдаемыми фактами, а не выводами о мотивах.
Оно рекламировало себя само. В описании пакета, распространяемого на PyPI, возможности были перечислены простым языком: удаленный доступ, управление рабочим столом, управление пользователями, веб-камера, аудио, кейлоггер, сохранение данных, данные браузера, Wi-Fi, реестр, «более 140 команд». Не было попыток выдать код за вспомогательный инструмент сборки, оболочку CLI или утилиту для ИИ-агента, что является более распространенной маскировкой, которую мы видим в общедоступных реестрах. Вопрос о том, отражает ли эта открытость инструмент для «красной команды», опубликованный без контроля доступа, или что-то другое, сам по себе не решает этот вопрос; несомненно одно: любой пользователь мог установить работающий, универсальный набор инструментов для удаленного доступа и наблюдения. типун.
Оно основывалось на доверии к доброжелательному сервису. . npoint[.]io Поскольку ретрансляция является определяющим методом. Это пример более широкой схемы — маршрутизация C2 через легитимный SaaS-сервис (сайты для вставки, JSON-хранилища, веб-чаты).hooks(документация по облачным сервисам), чтобы вредоносный трафик сливался с обычной деятельностью разработчиков, и не было принадлежащей оператору конечной точки, которую можно было бы захватить. Полезные нагрузки на ретрансляторе были зашифрованы, поэтому содержимое контейнера не было бы воспринято случайным наблюдателем как команды.
Сигналы от издателя слабые и общие. В заявленном пакете содержалась информация о Автор с указанием «участников gcli» и лицензией MIT, а также с указанием адреса на своей домашней странице и в полях репозитория. github[.]com/gcli-control/gcliНичто из этого не является проверкой: строка с именем автора — это свободный текст, заголовок лицензии MIT ничего не стоит, а URL-адрес репозитория в метаданных пакета — это утверждение, а не доказательство происхождения. Эта схема — совершенно новое имя, общий коллективный автор и самореферентная организация/репозиторий, созданный вокруг пакета — это то, как выглядит проект, созданный специально для размещения кода, а не устоявшийся инструмент, который случайно обзавёлся функцией удалённого управления. Мы отмечаем это как наблюдения; они согласуются с, но сами по себе не доказывают, что это специализированный дистрибутив.
Мы описываем данное решение как злонамеренное, исходя из его возможностей и способа доставки: полноценный, работоспособный имплант для удаленного доступа и наблюдения, распространяемый через общедоступный индекс пакетов с помощью скрытого ретранслятора. Мы не указываем цель или мотив.
Влияние, тенденции и что могут сделать защитники
Слепое пятно для сортировки пациентов с учетом маскировки. Много ключей для автоматической сортировки пакетов на скрывать сигналы типичное вредоносное ПО для реестра — завуалированные пятна, время установки hooksОднострочные команды для сбора учетных данных. Пакет, который просто открыто крысаБлагодаря чистому, читаемому коду и отсутствию механизма установки, этот класс не демонстрирует никаких из перечисленных признаков и может обойти эвристические алгоритмы, предполагающие скрытность. Сигналы, которые надежно обнаруживают этот класс, носят структурный, а не основанный на маскировке характер: перепись возможностей (сколько различных примитивов наблюдения за хостом сосуществуют в одном пакете) и анализ структуры C2 (цикл команд/ответов, проходящий через универсальный сервис размещения контента). Эти проверки срабатывают независимо от того, насколько честен или затемненный Упаковка есть.
Тенденция использования SaaS в качестве C2-платформы. Использование легитимного хостинга в качестве тайника — не новая практика, но она продолжает работать, потому что затраты на защиту от блокировки такого сервиса высоки, а затраты на нападение при смене сервиса практически равны нулю. Ожидайте, что таких случаев станет больше. Сетевые средства защиты, ориентированные на конкретные вредоносные домены, быстро устаревают; правила поведения («этот процесс считывает содержимое буфера обмена и веб-камеры, а затем взаимодействует с API хостинга заметок») — нет.
Схема обнаружения бетона. Прочное правило не называет npoint[.]io вообще. Это сочетание двух наблюдений, которые по отдельности распространены, но вместе являются редкими для обычного разработчика или хоста CI:
alert when a single process, within one session, both:
(A) accesses a host-surveillance primitive — input device (keyboard/mouse hook), camera, microphone, screen capture, clipboard read-loop, or a browser credential store ("Login Data" / "Local State" / DPAPI); AND
(B) makes outbound requests to a public content-hosting / paste / JSON-bin / chat-webhook service then raise for review, regardless of the specific service in (B).
Ни одна из половин сама по себе не вызывает подозрений: множество легитимных инструментов делают скриншоты, и многие отправляют JSON-данные в API хостинга. Соединение внутри одного кратковременного процесса является сигналом, и оно сохраняется при любой ротации ретранслятора.
Практические шаги для команд:
- Рассматривайте установку публичных пакетов на хостах разработчиков и CI как границу выполнения, а не как удобство — RAT на агенте сборки — это RAT, имеющий доступ к вашим секретам.
- Предпочтительнее использовать внутренние зеркала из списка разрешенных; пакет, название которого буквально означает «удаленное управление» и описывает кейлоггер, никогда не должен разрешаться в корпоративном индексе.
- Предупреждение о сочетание — ввод с устройства или захват экрана плюс исходящий трафик в сервис для вставки контента/вставки/JSON-файлов — вместо использования какого-либо одного примитива, который сам по себе имеет безобидное применение.
- Не следует полагаться на автоматический «безопасный» рейтинг как на окончательный вердикт для пакетов с широкими возможностями доступа к хосту; направляйте их на проверку человеку.
Семейство пакетов классифицировано как вредоносное и направлено на удаление из реестра. Поскольку система управления и контроля на основе ретрансляции не оставляет хост, принадлежащий оператору, для перехвата данных, надежная защита заключается в приведенном выше поведенческом отпечатке, а не в какой-либо отдельной записи в черном списке.





