Фальшивый проект PawCommerce: новая атака на разработчиков через поддельное собеседование и вредоносный код в VS Code

information security

Сценарии атак на разработчиков через фиктивные трудоустройства становятся всё изощрённее. На этот раз злоумышленники использовали LinkedIn, Google Календарь и OneDrive, чтобы доставить жертве ZIP-архив с якобы тестовым заданием. Внутри оказался полноценный репозиторий, который запускал скрытые цепочки заражения сразу в двух средах - при открытии в редакторе кода VS Code и при стандартной сборке проекта через NPM. Аналитики в новом отчёте выявили, что обе цепочки ведут к одному и тому же набору модулей, нацеленных на кражу браузерных данных, криптовалютных кошельков и конфиденциальных файлов разработчика.

Описание

Всё началось с сообщения в LinkedIn от вымышленного рекрутера по имени Nathaniel Nicdao. Потенциальному кандидату предлагали обсудить интересную техническую задачу и просили прислать резюме. После этого назначалась встреча через Google Календарь от имени Mark Harris, а затем приходила ссылка на OneDrive, где под учётной записью Mimori Okamoto лежал файл pawCommerce.zip. Образец весил около 12 мегабайт и содержал 557 записей, включая полный локальный Git-репозиторий. Важно отметить, что профиль рекрутера вскоре стал недоступен, а использованные имена являются лишь фиктивными персонами - никакие реальные люди в атаке не участвовали.

Далее следует самый интересный этап: после распаковки архива вредонос мог сработать двумя способами. Первый путь - открытие папки в VS Code. В каталоге .vscode лежали файлы settings.json и tasks.json, которые пытались включить автоматическое выполнение задач при открытии проекта. Если разработчик доверял рабочей области, VS Code запускал shell-команду: git config core.hooksPath .github; git checkout main. Эта команда перенаправляла Git-хуки в подконтрольную злоумышленнику папку .github и сразу же активировала хук post-checkout. В свою очередь хук определял операционную систему жертвы и скачивал с домена tanxilabs.com специфичный скрипт-загрузчик для macOS, Linux или Windows. При этом все настройки панели задач в VS Code были выключены: эхо отсутствовало, окно терминала закрывалось, - так что пользователь почти не замечал активности.

Второй путь запускался, если разработчик решал собрать проект через npm install или npm run dev. В файле package.json была прописана команда postinstall, которая запускала серверную часть приложения. Серверный bootstrap.js декодировал переменную DEV_API_KEY и обращался к скрытому JSON на сервере pink-aloise-9.tiiny.site. Ответ содержал поле cookies, которое компилировалось через Function.constructor('require', s) и исполнялось как JavaScript. Такой приём позволяет выполнить произвольный код с доступом к системному модулю require. Оба пути в итоге загружали одинаковый фреймворк, но с разными идентификаторами кампании - 705 и 706.

После успешной загрузки и исполнения промежуточных скриптов на машине жертвы появлялся обфусцированный финальный пакет на Node.js. Он запускал три дочерних модуля: ldbScript, autoUploadScript и socketScript. Первый модуль целенаправленно искал и копировал учётные данные из браузеров семейства Chromium, а также файлы криптовалютных кошелёк (MetaMask, Phantom, Exodus и другие). Второй модуль просматривал каталоги пользователя - Рабочий стол, Документы, Загрузки, а также папки проектов, OneDrive, Google Drive и, что особенно важно, /mnt в WSL. Он искал файлы конфигурации .env, ключи SSH, сертификаты, токены и документы размером до 5 МБ. Третий модуль устанавливал постоянное командное соединение через Socket.IO с сервером 45.61.148[.]220 на порту 8087, позволяя управлять хостом: выполнять команды, просматривать каталоги, загружать файлы и отслеживать содержимое буфера обмена каждую секунду. Все собранные данные отправлялись на тот же IP по портам 8085 и 8086.

Интересно, что злоумышленники предусмотрели кражу данных даже из среды WSL - подсистемы Windows для Linux. Если скрипты обнаруживали WSL, они обращались к файлам хостовой Windows через /mnt/c/Users и использовали powershell.exe для доступа к буферу обмена. Это важный нюанс: разработчики часто считают, что работа в WSL изолирована от основной системы, но в данной атаке граница не соблюдается.

Аналитики отмечают, что данная техника полностью совпадает с описанными в публичных отчётах Microsoft, ESET и Abstract Security кампаниями Contagious Interview и DeceptiveDevelopment. В них также использовались поддельные собеседования, Git-хуки и VS Code-задачи для доставки вредоносных загрузчиков. Однако точная атрибуция остаётся на среднем уровне доверия: хотя многие детали указывают на северокорейские группы, конкретные артефакты не позволяют назвать определённого государственного актора.

Для защиты от таких угроз эксперты советуют не доверять рабочей области VS Code при открытии проектов от незнакомых рекрутеров, проверять содержимое .vscode/tasks.json и .git/config перед запуском, а также использовать изолированные виртуальные машины для тестовых заданий. Если вы или ваши коллеги уже выполняли подобный код, необходимо немедленно изолировать машину, проверить наличие файлов в ~/.vscode и %USERPROFILE%\.vscode, а затем сменить все пароли, ключи API и доступы к кошелькам. Современные атаки на разработчиков становятся всё более профессиональными, и единственный способ обезопаситься - сочетать техническую гигиену с критическим отношением к любым входящим "предложениям о работе".

Индикаторы компрометации

IPv4

  • 45.61.148.220

IPv4 Port Combinations

  • 45.61.148.220:8085
  • 45.61.148.220:8086
  • 45.61.148.220:8087

Domains

  • pink-aloise-9.tiiny.site
  • tanxilabs.com

URLs

  • http://45.61.148.220:8085/api/upload-file
  • http://45.61.148.220:8085/upload
  • http://45.61.148.220:8086/upload
  • http://45.61.148.220:8087/api/log
  • http://45.61.148.220:8087/api/notify
  • https://ip-api-psi.vercel.app/api/githook-encrypted/N3RlYW06
  • https://pink-aloise-9.tiiny.site/index.json
  • https://tanxilabs.com/settings/bootstrap?flag=6
  • https://tanxilabs.com/settings/bootstraplinux?flag=6
  • https://tanxilabs.com/settings/env?flag=6
  • https://tanxilabs.com/settings/linux?flag=6
  • https://tanxilabs.com/settings/mac?flag=6
  • https://tanxilabs.com/settings/package
  • https://tanxilabs.com/settings/windows?flag=6

SHA256

  • 013b59b3dc454961afccb8fa355c7bb4a184b4f4cfdc84d50a9b3bfffc423032
  • 017cb09cabd9c909e4fb06e8c668d2f89e472e103eda5230d98761a9f998bdb5
  • 0318447e756ce588c7b699f82e8dcec6f8cae100444a824bb89c98015087d184
  • 0530113b0dbaef971f8753fffdc2ee121b35219176472e27eff754ee66148f5a
  • 07d63608f5f0a070bdfdd17a7cb98ddc614b3ff082d91a0e45a3c71366b59f48
  • 12b7d1156bc16b49ac369eb3e4960db1594db36093bcab4131ce00353ff225f8
  • 16460965b678024801d319d2142a9a39d930f72d0179bcd6a06faef6dd5b8170
  • 193fe17b9ec5af160a9a2bf2eb6db7a59665efb5c180af62b193267a757cae82
  • 1bd64df3cc9c5652294254d67542c2c8dec996b765f49cff1e3fe915a396da3a
  • 2924c4d2ca90c44319a63b2cb11e192e953f8c33d451ba77e9b169e62e559df7
  • 35e4fc9675352c53ff298a73e5ca508991cfbc17eecb4302de01623376a083ea
  • 62f9031511106993c9b656a741391ededf78fd2b808ee55017d85941b9933d8f
  • 6f7fa17c61c3598e3f5e4b69078e3463e7dd859760b6ea0fc76412b6249c7182
  • 7fc561a0568bac02e36e44328b0b600bb3843af9db84d6647065d21ec5f69bec
  • 8183f65097046b89fe5d6697630525541bafe31795c7757941a83709c72fb63b
  • 862e8146372cce9bcc55e1a5553207acb599ce66cbfba6b20ccd1eff66fc1b62
  • 8c420f837a53c075b0ff57ea1a12d1cad0c8247444cb9333eb3ee865260eafc7
  • 8e16504e5e6bcefe45a9fc352ee61e1d5aed7a966434730a73a1b899208445c3
  • 956bafff356c7e8cb309f84d3611904ce706f52583f4fb3495fdbdd30019d8a1
  • 9eda8450bec119442ce165927903b37bb706f573564c8edebc5d5e11409e0548
  • 9fa866547d40783d194fbce567ccef2540b3dd97ba0a865d88d819740216ae34
  • a4d8377c7bb4ad054c1475cdd5cf4e61ad4499b58fad0c1916447cc560b47a80
  • b905367f92847d249ac08fb2e5be61adecf00f0e5f8109c282ac8570f9181de9
  • cb8dae0524af978772e57779f5599a1978777ee628e233a29350367b625d7be0
  • d851abd917b561f304e7f02776203954150569181c9e25cb63e70db2aa30a704
  • eff1a9d27d08f058e3d5490d0b1cb6f695a77ca3bce1e7cc413b322dad25cad2
  • f8f7ed336e109ddeb7d2c0098f43f6d065c479325b84cfb0613b1a2d6f06b4a6

Комментарии: 0