Кампания PolinRider нацелена на разработчиков через репозитории ПО
PolinRider, кампания, связанная с КНДР, нацелена на разработчиков и распространяется через вредоносные файлы в репозиториях программного обеспечения. Обычно заражение запускается при открытии проекта в VS Code: файл .vscode/tasks.json выполняет полезную нагрузку. Вредоносное ПО также распространяется с заражённых машин разработчиков: оно меняет историю доступных скомпрометированной учётной записи репозиториев и принудительно отправляет изменённые коммиты.
Заражение через файлы проекта
Полезная нагрузка может находиться в файле, замаскированном под шрифт, например fa-solid-400.woff2. В нём JavaScript скрыт с помощью пробельных символов. Другие варианты добавляют обфусцированный JavaScript в легитимные файлы, например eslint.config.mjs. Такой код выполняется при загрузке конфигурации ESLint, в том числе при запуске линтинга, работе хуков pre-commit, выполнении задач CI или использовании расширений редактора.
Злоумышленные рабочие файлы исключены с помощью .gitignore, поэтому не отображаются в стандартном выводе команды Git status. В результате кампания может затрагивать нескольких участников и репозитории, оставляя ограниченные следы на диске. Коммиты с принудительно отправленной историей могут повторно использовать сообщения коммитов об очистке. Полезная нагрузка восстанавливается после удаления разработчиками, а журнал репозитория выглядит чистым.
Варианты вредоносного ПО и их обнаружение
Недавняя активность указывает на одновременное использование нескольких вариантов, а не на последовательную эволюцию одного. Полезные нагрузки размещали в легитимных каталогах на разных уровнях вложенности, а не только в ожидаемом каталоге верхнего уровня public/fonts. Имена файлов, например 400, 500 и 900, не позволяют надёжно определить, актуальна ли полезная нагрузка. В одной из наблюдаемых организаций варианты 500 и 900 действовали одновременно; вариант 500 повторно развернули уже после появления варианта 900.
Сборка 500 использовала распространённый обфускатор массивов строк с префиксом `_0x` и загрузчик NullReceiver. Он получал последнюю транзакцию из фиксированного кошелька Ethereum, декодировал адрес C2 из адреса получателя и загружал вторую стадию. Маркер сборки передавался в HTTP-заголовке Sec-V. Сборка 900 применяла шифр с перемешиванием на основе ключа (keyed-shuffle cipher) и переместила маркер в файл шрифта. Механизм разрешения адреса C2 для этой сборки всё ещё анализируется.
Вредоносное ПО также меняет файл .vscode/settings.json, добавляя правдоподобные настройки разработки и модификации, направленные на подавление механизмов защиты VS Code или видимой активности выполнения. Авторы отчёта рекомендуют для обнаружения анализировать содержимое файлов, а не только их имена, проверять JavaScript в файлах шрифтов и конфигурации, а также сканировать все ветки, не клонируя репозитории в среды, где может выполниться вредоносное ПО.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



