Перейти к содержимому
Пост

Две фейковые вакансии на Upwork и один заражённый Mac: мои встречи с северокорейской Contagious Interview

Тестовый проект с отравленным npm-пакетом и фейковое приложение для встреч, которое ставится через curl | bash. Что произошло оба раза, как я нашёл вредонос с помощью Claude Code и какой инструмент сделал после этого.

Опубликовано
Чтение
4 мин
Теги
  • security
  • upwork
  • malware
  • macos
  • contagious-interview
Содержание
  1. Первый раз: июнь 2026
  2. Второй раз: октябрь 2026
  3. Оглядываясь назад
  4. Claude Code как мой криминалист
  5. Что я потерял
  6. Поэтому я сделал инструмент: Tsuba

Коротко: 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 (鍔, гарда японского меча). Идея простая: прежде чем незнакомый код запустится впервые, оно смотрит на него за вас. Оно выясняет, что код собирается сделать, откуда он взялся и похож ли он на известную атаку, а затем решает: разрешить, предупредить или заблокировать.

Прежде чем незнакомый код запустится, он проходит четыре проверки Tsuba, которые решают: разрешить, предупредить или заблокировать.
Прежде чем незнакомый код запустится, он проходит четыре проверки Tsuba, которые решают: разрешить, предупредить или заблокировать.

Вот как это соотносится с двумя моими случаями:

  • Фейковый проект с собеседования, как в первый раз: прежде чем вы запустите npm install или npm start, он проверяет, нет ли зависимостей в публичных списках вредоносных пакетов, и ищет в исходниках проекта скрытый код, зашитые удалённые адреса и код, читающий кошельки и хранилища паролей. Если сомнения остались, проект можно пробно запустить в песочнице и посмотреть, что он делает на самом деле.
  • Фейковое приложение для встреч, как во второй раз: увидев curl | bash, он скачивает удалённый скрипт, не запуская его, и проверяет, что тот сделал бы. У скачанных DMG тоже проверяются подпись, нотаризация и источник.

Tsuba бесплатен и с открытым кодом (на GitHub, Apache 2.0). Загрузка для Mac на Apple silicon и Intel и всё остальное о нём — на странице Tsuba. Если вы берёте заказы на Upwork или похожих платформах или часто запускаете код, который вам присылают, попробуйте его.

Следите

Делюсь сборками, экспериментами и выводами по ходу дела.

Новые видео на YouTube, короткие заметки в X. Каждый пост здесь ссылается на оба.

YouTube