В последние годы киберугрозы, исходящие от государственно поддерживаемых группировок, становятся всё более изощрёнными и направленными на узкоспециализированные цели. Одним из ярких примеров такой активности является недавняя кампания, исходящая из Северной Кореи, в ходе которой обнаружено 35 новых вредоносных npm-пакетов, направленных на разработчиков и инженеров, ищущих работу. Эта атака, известная как «Contagious Interview», представляет собой сложный многоступенчатый механизм заражения с использованием социальных ловушек и современных технологий скрытого распространения вредоносного кода. Основу кампании составляют вредоносные npm-пакеты, опубликованные через множество аккаунтов на платформе npm. Многие из этих пакетов тщательно замаскированы под популярные и доверенные библиотеки, часто используя околопопулярные названия — так называемые подделки или «тайпосквоттинг».
Среди таких пакетов обнаружены react-plaid-sdk, sumsub-node-websdk, vite-plugin-next-refresh, vite-loader-svg и node-orm-mongoose, которые суммарно были загружены более 4000 раз. Несмотря на удаление части пакетов после обнаружения, шесть из них до сих пор остаются активными, представляя серьёзную угрозу для пользователей и экосистемы разработки. Вредоносные модули включают в себя хекс-кодированный загрузчик под названием HexEval, который при установке собирает системные данные у жертвы, а затем в фоновом режиме загружает основной вредоносный скрипт BeaverTail. Этот второй этап отвечает за кражу информации, сканирование локальных данных, включая куки браузеров, базы данных IndexedDB и криптовалютные кошельки. Помимо этого, BeaverTail способен загружать третий этап — бекдор InvisibleFerret, предоставляющий злоумышленникам глубокий и скрытый контроль над заражённой системой.
Такое многоуровневое устройство вируса значительно осложняет его обнаружение и анализ, так как основной вредоносный код не хранится напрямую в npm-пакетах. Особое внимание привлекает подробный пример HexEval Loader: код использует функцию, которая во время выполнения декодирует строки, закодированные в шестнадцатеричном формате. Это позволяет скрыть названия используемых модулей и адреса командных серверов (C2). После декодирования загрузчик обращается к одному из нескольких серверов управления с целью получить и выполнить дополнительный вредоносный код. При этом серверы нередко возвращают «пустой» или безобидный ответ, чтобы избежать подозрений, и запускают полноценную атаку лишь при выполнении определённых условий на машине жертвы.
Также в кампании отмечены пакеты с расширенными функциями разведки. К примеру, react-plaid-sdk содержит код для детального снятия отпечатков с хоста, включая информацию о платформе, имени пользователя, имени компьютера и MAC-адресах, что позволяет злоумышленникам собирать исчерпывающую информацию о целевой системе. В рамках кампании выявлен специализированный пакет jsonsecs, снабжённый кроссплатформенным кейлоггером. Он способен захватывать нажатия клавиш на Windows, macOS и Linux, используя нативные бинарные модули для каждой платформы. Эта функциональность указывает на готовность мошенников проводить глубокий шпионаж и мониторинг жертв, выходящий далеко за рамки простого сбора данных софта.
Самая уникальная и опасная часть данной атаки — её тщательно продуманная социальная инженерия. Для первичного доступа злоумышленники создают фальшивые аккаунты на LinkedIn, выдавая себя за рекрутеров и менеджеров по подбору персонала. Они активно охотятся на разработчиков и инженеров, которые находятся в поиске работы, используя заманчивые предложения с высокими зарплатными ставками. В рекламных объявлениях фигурируют позиции с зарплатами до 25 тысяч долларов в месяц при удалённой работе, что повышает доверие целей. После установления контакта жертвам отправляют задания по программированию, размещённые в Google Docs или PDF-файлах.
Эти задания содержат инструкции по клонированию репозиториев Bitbucket и внедрению вредоносных npm-зависимостей, предназначенных для дальнейшей компрометации систем разработчиков. Более того, злоумышленники часто настаивают на выполнении заданий вне изолированных контейнеров, таких как Docker, зачастую во время совместных видеоконференций, требуя демонстрации экрана, чтобы убедиться, что вредоносный код выполняется на «голой» системе и не блокируется мусорными процессами контейнера. Примеры пострадавших, размещённые на Reddit, подтверждают целенаправленность и системность данной кампании. В одном из случаев пользователь обнаружил четыре вредоносных npm-пакета, как только запустил задание в локальной среде с контейнеризацией. Анализ показал, что HexEval загрузчик получил команду на выполнение BeaverTail, который начал сбор конфиденциальных данных и загрузку InvisibleFerret.
Сразу после заражения фальшивый «рекрутер» удалял свой профиль LinkedIn, перекрывая любые возможности для обратной связи или расследования. Особо стоит отметить взаимосвязь кампании с открытыми социальными сетями и репозиториями кода. Злоумышленники проводят разведывательную работу (OSINT), изучая публичные GitHub-проекты и профессиональные профили целей, что позволяет создавать убедительные фальшивые предложения и задания, в которых упоминаются реальные детали из биографии и опыта жертвы. Это значительно увеличивает уровень доверия и шансы на успешное внедрение вредоносного кода. Эксперты по кибербезопасности отмечают, что используемые методы — от использования HexEval Loader и BeaverTail до кроссплатформенных кейлоггеров — свидетельствуют о высоком уровне подготовки и ресурсоёмкости операции.
Соединяя социальную инженерию с многоступенчатым внедрением вредоносных компонентов, атакующие обеспечивают глубокий и устойчивый доступ на взломанные машины. Для борьбы с такими угрозами специалистам по безопасности рекомендуют вводить комплексные меры контроля и мониторинга. Крайне важна предварительная проверка всех внешних зависимостей и пакетов с использованием специализированных инструментов безопасности, таких как автоматизированные системы анализа исходного кода и мониторинга репозиториев. Кроме того, необходимо повышать осведомлённость сотрудников и разработчиков об опасностях, связанных с выполнением кода от непроверенных источников и взаимодействием с незнакомыми рекрутерами. Важной рекомендацией также является использование изолированных сред для тестирования и выполнения внешнего кода — контейнеризация, виртуальные машины и песочницы значительно снижают шансы удачного проникновения вредоносного ПО на основную систему.
Помимо технических мер, компаниям следует развивать процедуры проверки подлинности рекрутеров и кандидатов, уделять внимание аномалиям в поведении при взаимодействии с потенциальными сотрудниками и интегрировать процессы безопасности с процессами найма. Современные угрозы, подобные кампании Contagious Interview, ярко демонстрируют, как угроза безопасности всё больше интегрируется в повседневные профессиональные процессы. Разработчики и технологические компании должны быть готовы к тому, что вредоносные действия могут исходить под видом легитимных рабочих процессов, и предпринимать системные меры по выявлению и нейтрализации таких рисков. Отслеживание индикаторов компрометации, среди которых — списки вредоносных npm-пакетов, поддельных профилей и командных точек управления, а также признаков присутствия HexEval, BeaverTail и InvisibleFerret, позволяет своевременно выявлять атаку и ограничивать ущерб. В целом, кампания северокорейских хакеров с использованием 35 новых вредоносных npm-пакетов стала очередным тревожным сигналом для индустрии разработки и информационной безопасности.
Она подчёркивает необходимость постоянной бдительности, быстрого реагирования на инциденты и интеграции современных технологий раннего обнаружения угроз в повседневную практику. Только совместными усилиями разработчиков, служб безопасности и платформ, управляющих библиотеками, можно уменьшить риски от подобных комплексных атак и обезопасить цифровую инфраструктуру от государственных и криминальных киберпреступников.