Содержание
Коротко: дважды в 2026 году фейковый «заказчик» пытался заставить меня запустить его код. В июне это сработало: тестовый проект прятал вредонос в одной из своих npm-зависимостей, тот работал несколько дней, и ни один антивирус не сказал ни слова. В октябре я отказался. Оба раза всё шло по схеме, которую ФБР связывает с Северной Кореей; официально мои два случая никто не атрибутировал, но они с ней совпадают. Совет ФБР: не запускайте код с собеседований на рабочем компьютере, если без этого никак — используйте отдельную виртуальную машину, и проверяйте, кто вас нанимает, через другой канал.
Июнь: тестовый проект и был вредоносом
Вся история — в моём предыдущем посте, Две фейковые вакансии на Upwork и один заражённый Mac. Если коротко: «заказчик» на фриланс-платформе дал мне тестовое задание по программированию.
"He sent over a Node.js test project called "Online_Store". The malicious code was hidden in one of its npm dependencies." («Он прислал тестовый проект на Node.js под названием „Online_Store“. Вредоносный код прятался в одной из его npm-зависимостей».)
Заметил я это не сразу: "By the time I noticed, it had been running in the background for days." («Когда я это заметил, он уже несколько дней работал в фоне».)
И ничто меня не предупредило: "neither macOS's built-in XProtect nor traditional antivirus made a sound, either time" («ни встроенный в macOS XProtect, ни обычный антивирус ни разу не подали голоса»).
Октябрь: камера выключена, «установите это приложение для встреч»
Через четыре месяца — новый «заказчик», на этот раз из фейковой фирмы. На видеозвонке "He kept his camera off" («он так и не включил камеру»). Потом "we had to switch to a meeting app called "Zeff"" («надо было перейти в приложение для встреч под названием „Zeff“»), а чтобы его получить, мне нужно было "run a curl | bash command in the terminal, or download a DMG. I didn't install it." («выполнить в терминале команду curl | bash или скачать DMG. Я не стал его ставить».)
Команды и адреса не попали ни в видео, ни в этот пост: речь о том, как распознать приманку, а не о том, что она устанавливает.
Известная схема
Если оглянуться назад, у обеих попыток была одна форма: "Both attacks followed the same playbook: contact, build trust, the ask, the payload. The second time, I stopped at the payload." («Обе атаки шли по одному сценарию: контакт, завоевание доверия, просьба, вредоносная нагрузка. Во второй раз я остановился на нагрузке».)
Именно о такой форме предупреждало ФБР. Его публичное предупреждение PSA 240903 называется "North Korea Aggressively Targeting Crypto Industry with Well-Disguised Social Engineering Attacks" («Северная Корея агрессивно атакует криптоиндустрию с помощью хорошо замаскированной социальной инженерии»). Мои случаи совпадают с описанной там схемой; официально их никто не атрибутировал, поэтому я не утверждаю, что меня взломала Северная Корея.
Почему мишень — люди
После взлома Binance Маккензи Джексон из Aikido рассказал BBC о сдвиге. В пересказе BBC: "He says hackers have shifted from going after company infrastructure to going after the machines of the people who run it." («По его словам, хакеры переключились с инфраструктуры компаний на компьютеры людей, которые её обслуживают».)
И о том, как именно: "Jackson says techniques vary, but include tricking workers into installing malware under the pretext of a job interview, or interfering with code that developers rely on." («Джексон говорит, что приёмы бывают разные, но среди них — обманом заставить сотрудников установить вредонос под предлогом собеседования или вмешаться в код, на который полагаются разработчики».)
Джексон описывал распространённые приёмы, а не то, как был взломан Binance.
Тревожные признаки
ФБР называет среди своих индикаторов вот этот: "Requests to conduct a "pre-employment test" or debugging exercise that involves executing non-standard or unknown Node.js packages, PyPI packages, scripts, or GitHub repositories." («Просьбы пройти „тест перед наймом“ или упражнение по отладке, в ходе которого нужно запускать нестандартные или неизвестные пакеты Node.js, пакеты PyPI, скрипты или репозитории GitHub».)
Из моих двух случаев — ещё два: «заказчик», который не включает камеру и хочет перейти в приложение, о котором вы никогда не слышали, и просьба вставить команду в терминал.
Что помогает
- Не на рабочем компьютере. ФБР: "Avoid taking pre-employment tests or executing code on company owned laptops or devices." («Не проходите тесты перед наймом и не запускайте код на ноутбуках и устройствах, принадлежащих компании».)
- Если код всё-таки нужно запустить, держите его отдельно. Совет ФБР вкратце: используйте виртуальную машину на устройстве, не подключённом к компании, или устройство, которое предоставит проверяющий.
- Проверяйте через другой канал. ФБР: "Develop your own unique methods to verify a contact's identity using separate unconnected communication platforms." («Выработайте собственные способы проверять личность контакта через отдельные, не связанные между собой платформы для связи».)
Что я сделал после этого
После этого я сделал инструмент: "So I built a small macOS menu bar app called Tsuba" («поэтому я сделал небольшое приложение для строки меню macOS под названием Tsuba»). Идея: "before unfamiliar code runs for the first time, it takes a look for you" («прежде чем незнакомый код запустится впервые, оно смотрит на него за вас»). Tsuba бесплатен и с открытым кодом. Он идёт после привычек выше, а не вместо них.
Источники
- Oliver Zhang, Две фейковые вакансии на Upwork и один заражённый Mac, oliverz.dev, 28 октября 2026 года
- FBI, PSA 240903: North Korea Aggressively Targeting Crypto Industry with Well-Disguised Social Engineering Attacks, 3 сентября 2024 года
- BBC News, онлайн-трансляция о взломе Binance, 30 октября 2026 года
Видео анимировано кодом, а сценарий написан с помощью ИИ; каждый факт выше сверен с источниками. Условно показаны дерево проекта и красная зависимость, щит «угроз нет», видеозвонок и скрытая команда в терминале. Этот пост объясняет риск и способы защиты, а не шаги атаки. Видео на английском. Сделано в Shotloop — моём бесплатном Mac-приложении для объясняющих видео из кода, которые правятся по одной сцене за раз.
