Содержание
Коротко: Contagious Interview — атака под видом найма, которую проводят северокорейские хакеры. Они выдают себя за заказчиков или рекрутеров на платформах вроде Upwork и LinkedIn и в итоге добиваются, чтобы вы сами запустили «тестовый проект» или установили «приложение для встреч». Распознать её помогает одно правило: если в процессе найма вас просят запустить незнакомый код на своей машине, остановитесь. Если вы уже его запустили, отключитесь от сети, поищите незнакомые фоновые процессы и папки, смените пароли и выйдите из всех устройств на важных для вас сайтах.
Первый раз: июнь 2026
На Upwork мне написал заказчик, назвавшийся украинцем. У него был проект, и он хотел моей помощи, а прислал тестовый проект на Node.js под названием «Online_Store».
Вредоносный код прятался в одной из его npm-зависимостей. Точно, какой это был пакет, я уже не помню; кажется, что-то связанное с Tailwind. Когда я запустил проект, он тихо создал на моей машине папку ~/.node_modules с axios и socket.io-client внутри, настроенными на отправку моих данных наружу.
Когда я это заметил, он уже несколько дней работал в фоне. Поймал я его случайно: с моим коллегой из Великобритании произошло ровно то же самое, и когда он мне рассказал, я понял, что, скорее всего, пострадал и я.
Второй раз: октябрь 2026
На этот раз человек назвался литовцем из инвестиционной компании Veyron Capital (veyron[.]capital), которая разместила на Upwork целую пачку вакансий в Web3.
Сначала он написал мне, потом назначил видеозвонок на Upwork. Камеру он так и не включил и всё время говорил со мной по-китайски. После звонка он попросил добавить его в Telegram и затащил меня в группу, где мне предложили сделать демо на Web3 и показать его команде на встрече.
Когда пришло время показа, мне сказали, что один коллега в поездке и не может пользоваться обычным сервисом для встреч, так что надо перейти в приложение под названием «Zeff» (zeff[.]app). Ещё один участник группы «помог» мне его установить и дал два варианта: выполнить в терминале команду curl | bash или скачать DMG.
Я не стал его ставить. Однажды обжёгшись, я, как только увидел «выполните эту незнакомую команду в терминале, чтобы мы могли провести встречу», понял, что это тот же трюк.
Оглядываясь назад
Оба раза это были северокорейские атаки Contagious Interview: фейковый найм и фейковые собеседования. Они завоёвывают доверие тем, что выглядит как обычная работа, а потом заставляют вас запустить их код своими руками.
Больше всего меня задело, что ни встроенный в macOS XProtect, ни обычный антивирус ни разу не подали голоса.
Claude Code как мой криминалист
После первого заражения проблему по-настоящему раскопал Claude Code. Я использовал Fable 5 (Max), дал ему нужные права и попросил, как следователя, пройтись по всему диску и фоновым процессам. Он быстро обнаружил, что вредонос всё ещё работает, а затем шаг за шагом провёл меня через полную очистку.
Что я потерял
К счастью, ничего. Больше всего такой вредонос охотится за криптокошельками, а на той машине их у меня нет. На всех важных для меня аккаунтах включена двухфакторная аутентификация, так что даже с моими паролями войти никто бы не смог.
Но одно предупреждение: такой вредонос обычно крадёт и сохранённые в браузере сессии (cookies). С ними злоумышленник может обойти двухфакторную аутентификацию и сразу войти в ваши аккаунты. Поэтому, если вас взломали, смените пароли и вдобавок выйдите из всех устройств на важных для вас сайтах.
Поэтому я сделал инструмент: Tsuba
После этих двух случаев я понял, где дыра. Эти атаки каждый раз приходят в новой упаковке и используют самые обычные инструменты вроде node, curl и bash, так что у традиционного антивируса нет причин что-то заподозрить.
Поэтому я сделал небольшое приложение для строки меню macOS под названием Tsuba (鍔, гарда японского меча). Идея простая: прежде чем незнакомый код запустится впервые, оно смотрит на него за вас. Оно выясняет, что код собирается сделать, откуда он взялся и похож ли он на известную атаку, а затем решает: разрешить, предупредить или заблокировать.
Вот как это соотносится с двумя моими случаями:
- Фейковый проект с собеседования, как в первый раз: прежде чем вы запустите
npm installилиnpm start, он проверяет, нет ли зависимостей в публичных списках вредоносных пакетов, и ищет в исходниках проекта скрытый код, зашитые удалённые адреса и код, читающий кошельки и хранилища паролей. Если сомнения остались, проект можно пробно запустить в песочнице и посмотреть, что он делает на самом деле. - Фейковое приложение для встреч, как во второй раз: увидев
curl | bash, он скачивает удалённый скрипт, не запуская его, и проверяет, что тот сделал бы. У скачанных DMG тоже проверяются подпись, нотаризация и источник.
Tsuba бесплатен и с открытым кодом (на GitHub, Apache 2.0). Загрузка для Mac на Apple silicon и Intel и всё остальное о нём — на странице Tsuba. Если вы берёте заказы на Upwork или похожих платформах или часто запускаете код, который вам присылают, попробуйте его.