Бэкдоры в вакансиях на работу

от автора

На Хабре уже приводили примеры, как приглашение на работу превращается в атаку. Вакансия на сайте поиска работы — это зацепка, чтобы привести жертву к запуску эксплоита. Такой метод социальной инженерии особенно опасен в нынешних рыночных условиях, когда интерес к вакансиям вырос.

Внедрение бэкдоров через вакансии на популярных сайтах встречается всё чаще. Об одном таком случае в сети LinkedIn рассказывает Python-разработчик Роман Иманкулов, о другом — разработчик Николай Коновалов, и похожих историй предостаточно.

Бэкдор

Атака начинается с того, что с соискателем связывается рекрутёр из стартапа, предлагает тестовое задание и ссылку на публичный Github-репозиторий. С первого взгляда тот выглядит как вполне обычный фронтенд на React с бэкендом на Node. Расчёт на то, что жертва клонирует репозиторий не на изолированную VM и ли VPS, а на собственный ПК.

В коде репозитория злоумышленники размещают заражённый файл app/test/index.js, в котором эксплоит замаскирован под набор тестов. Внутренний URL собирается из фрагментов:

const protocol = "https",  domain = "store",  separator = "://",  path = "/icons/",  token = "77",  subdomain = "rest-icon-handler",  bearrtoken = "logo";

Эти элементы объединяются в адрес https://rest-icon-handler.store/icons/77.

Полезная нагрузка в минифицированной строке 225 среди закомментированных тестов

Полезная нагрузка в минифицированной строке 225 среди закомментированных тестов

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

Скрипт app/index.js выполняет const test = require('./test'), что загружает и запускает app/test/index.js. Затем бэкдор прописывается в скрипт prepare, это служебный инструмент NPM:

Скрипт prepare выполняется автоматически после каждого запуска npm install, поэтому любая установка зависимостей запускает бэкдор.

Кстати, ещё при передаче соискателю тестового задания рекрутёр заметил, что там стоит обратить внимание «на проблему устаревших моделей Node». Судя по всему, таким образом он пытался подтолкнуть жертву к запуску npm install.

Присвоение чужих личностей

Расследование показало, что злоумышленник действует под именем и электронной почтой реального разработчика, full-stack инженера с обычным профилем в LinkedIn, личным сайтом и давним аккаунтом на Github. Сам этот разработчик в переписке пояснил, что под его именем на Github действуют неизвестные.

Присвоение чужой личности — стандартный приём в социальной инженерии. Гораздо проще вызвать доверие и инициировать нужные действия у жертвы, прикрываясь именем известного и авторитетного человека.

График контрибуторов на GitHub показывает, что в редактировании репозитория принимал участие один разработчик с 39 коммитами. На самом деле программист не имеет отношения к этому стартапу, по его собственным словам

График контрибуторов на GitHub показывает, что в редактировании репозитория принимал участие один разработчик с 39 коммитами. На самом деле программист не имеет отношения к этому стартапу, по его собственным словам

Вторая присвоенная личность — сам рекрутёр. Его профиль принадлежит известному журналисту с глубоким бэкграундом в области культуры и искусства, но нулевым опытом программирования. Было забавно наблюдать, как «журналист» во время переписки внезапно стал экспертом по версиям npm и Node и стал настойчиво рекомендовать запустить npm install.

Таргетированные атаки

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

  • работа жертвы в конкретной компании, которая является настоящей целью хакеров;

  • дружба с конкретным человеком, который является настоящей целью;

  • владение крупными цифровыми активами;

  • и др.

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

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

Так что если вы получите сообщение в LinkedIn с просьбой посмотреть репозиторий, немного паранойи и безопасности никогда не повредит. А посторонний код лучше запускать в изолированном окружении, можно с помощью агента, у которого права только на чтение.

Говорят, что на LinkedIn такие истории с «заражёнными вакансиями» встречаются сплошь и рядом. См. также вышеупомянутую статью на Хабре: «Как приглашение на вакансию мечты превращается в атаку». На заре существования LinkedIn вообще любой пользователь мог указать произвольное место работы и должность, хоть «директора LinkedIn», соцсеть не запрещала такое поведение.

Комедиант Крис Даффи более полугода выдавал себя за исполнительного директора LinkedIn

Комедиант Крис Даффи более полугода выдавал себя за исполнительного директора LinkedIn

В принципе, для максимальной безопасности рекомендуется с крайней осторожностью использовать любые социальные сети. То же самое относится к NPM, который в последнее время частенько используют для проведения различных атак (инфицирование зависимостей, покупка и заражение опенсорсных модулей и др.). Есть версия, что подобные операции против разработчиков проводят хакеры из КНДР, чтобы внедриться в западные IT-компании.

ссылка на оригинал статьи https://habr.com/ru/articles/1065512/