Исследователи из Jamf Threat Labs раскрыли новые детали масштабной кампании GhostClaw, которая эволюционирует от использования исключительно пакетов npm к более изощрённым методам распространения через GitHub и автоматизированные рабочие процессы с искусственным интеллектом. Целью атаки остаются компьютеры под управлением macOS, с которых злоумышленники похищают учётные данные пользователей. Этот сдвиг в тактике значительно расширяет потенциальную аудиторию жертв, превращая в мишень не только разработчиков, но и любого пользователя или автоматизированный процесс, следующий инструкциям из интернета.
Описание
Ранние сообщения о кампании, получившей названия GhostClaw или GhostLoader, фокусировались на вредоносных пакетах в реестре npm. Однако, как выяснили эксперты Jamf, параллельно действовал и другой канал доставки, активно использующий платформу GitHub. Злоумышленники создают репозитории, маскирующиеся под легитимные инструменты: торговых ботов, SDK (комплекты для разработки программного обеспечения) и утилиты для программистов. Эти проекты тщательно оформлены, чтобы с первого взгляда выглядеть правдоподобно, а некоторые даже набирают сотни звёзд (stars), что дополнительно укрепляет доверие к ним в сообществе. Для большей убедительности репозитории могут изначально содержать безвредный или частично рабочий код, который остаётся неизменным в течение некоторого времени, прежде чем в него будут внедрены вредоносные компоненты. Такая подготовительная стадия помогает наработать репутацию и привлечь внимание до момента реальной атаки.
Механизм заражения варьируется в зависимости от целевой аудитории. В классическом сценарии злоумышленники полагаются на прямое взаимодействие с пользователем. В файле README репозитория размещаются пошаговые инструкции по установке, которые побуждают скопировать и выполнить в терминале определённую команду. Обычно она использует утилиту "curl" для загрузки и немедленного запуска удалённого скрипта. Эта техника эксплуатирует доверие пользователя, представляя опасное действие как часть стандартного процесса установки, и обходит традиционные средства защиты, связанные с менеджерами пакетов.
Более сложный и современный вектор атаки нацелен на автоматизированные рабочие процессы с использованием ИИ-агентов для разработки. В этом случае репозитории содержат специальные файлы SKILL.md. Эти файлы выглядят совершенно безобидно: они описывают метаданные "скилла" - команды, зависимости и точку входа для выполнения. Вредоносная нагрузка скрыта не в манифесте, а в процессе установки. Когда разработчик или ИИ-агент (например, в рамках таких фреймворков, как OpenClaw) следует стандартным шагам настройки из репозитория - запускает "install.sh" или устанавливает зависимости, - он невольно запускает цепочку заражения. Таким образом, атакующие используют в своих интересах стандартные процедуры установки и неявное доверие к инструментам разработки.
Независимо от точки входа, цепочка выполнения во всех наблюдаемых вариантах остаётся единой и состоит из нескольких этапов. Всё начинается с выполнения скрипта "install.sh", который маскируется под легитимный установщик: определяет архитектуру системы и версию macOS, проверяет наличие Node.js и при необходимости устанавливает его в пользовательскую директорию, не требуя прав администратора. Однако уже на этом этапе заметны тревожные признаки, например, использование флага "-k" в команде "curl", который отключает проверку TLS-сертификатов, что нетипично для легальных инсталляторов.
Далее управление передаётся обфусцированному скрипту на JavaScript "setup.js". Его основная задача - обман пользователя и кража пароля. Скрипт очищает терминал, показывает фейковые индикаторы прогресса, имитируя установку SDK, а затем выводит запрос на ввод пароля. Хотя подсказка выглядит как стандартная системная, она генерируется самим вредоносным кодом. Для проверки введённых учётных данных используется легальная системная утилита "dscl". Кроме того, с помощью AppleScript могут отображаться нативные диалоговые окна, максимально похожие на запросы системы безопасности macOS, которые просят пользователя предоставить доступ к "безопасному хранилищу кошелька и учётных данных" или включить полный доступ к диску (Full Disk Access).
После успешного сбора данных скрипт связывается с командным сервером (C2, от англ. command-and-control) по домену "trackpipe[.]dev", чтобы загрузить зашифрованную вторичную полезную нагрузку. Этот этап соответствует ранее задокументированному GhostLoader. Полученный модуль записывается во временный файл, запускается как отдельный процесс, после чего временный файл удаляется. Для обеспечения закрепления в системе (persistence) вредоносное ПО копирует себя в пользовательские директории, маскируясь под легитимную активность npm, например, по пути "~/.cache/.npm_telemetry/monitor.js".
Финализирующий этап выполняется скриптом "postinstall.js", который занимается анти-криминалистикой и сокрытием следов. В одних вариантах он просто очищает терминал, стирая видимые свидетельства предыдущих этапов, а затем пытается установить через "npm" старый публичный пакет "antigravity" с несуществующим тегом "@install". Эта ошибка выводится пользователю без контекста, выглядя как изолированная проблема с npm. В других случаях скрипт, напротив, выводит в терминал сообщение об успешной установке, завершая спектакль и укрепляя у жертвы ложное ощущение, что всё прошло штатно.
Анализ инфраструктуры показывает, что кампания скоординирована: все репозитории используют один и тот же C2-домен, но с уникальными идентификаторами в пути запроса, что позволяет атакующим сегментировать трафик от разных приманок. Наблюдаемая активность является частью более широкой тревожной тенденции, когда атакующие переносят фокус с прямого взлома на компрометацию цепочек поставок программного обеспечения. Подобные методы, использующие доверенные платформы и привычные рабочие процессы, позволяют с минимальными усилиями внедрять вредоносный код сразу в большое количество систем, что демонстрируют и другие недавние кампании вроде Glassworm. Этот инцидент служит серьёзным напоминанием для разработчиков и компаний о необходимости повышенной осторожности при выполнении команд установки из непроверенных онлайн-источников, включая репозитории и инструкции для ИИ-агентов. Тщательная проверка происхождения и поведения кода перед запуском остаётся ключевой практикой кибергигиены для снижения подобных рисков.