Исследователь выявил 10 000 репозиториев на GitHub, распространяющих трояны через поддельные проекты

information security

Независимый специалист по информационной безопасности обнаружил масштабную кампанию по распространению вредоносного ПО, использующую механизмы платформы GitHub. В ходе анализа более 16 миллионов событий за пять дней он идентифицировал 10 000 репозиториев, каждый из которых содержит ссылку на ZIP-архив с трояном. Репозитории существуют от нескольких месяцев до года, не детектируются автоматическими алгоритмами GitHub и остаются активными даже после обращения в службу поддержки.

Описание

Инцидент начался два месяца назад, когда исследователь проверял индексацию своего проекта в поисковых системах. В выдаче Bing он обнаружил посторонний репозиторий с таким же названием и описанием, как у его собственного. Репозиторий содержал полную копию его кода со всеми коммитами, а сам исследователь значился в списке контрибьюторов. Часом ранее в README-файл была добавлена ссылка на ZIP-архив. Аналогичная ситуация повторилась с другим его проектом: при просмотре тегов на GitHub он наткнулся на репозиторий, скопировавший все коммиты ещё одного оригинального проекта, а два часа спустя в README появилась та же ссылка.

Наблюдение за этими двумя репозиториями выявило характерный паттерн: каждые несколько часов предыдущий коммит удалялся и отправлялся новый, изменяющий только README-файл. В каждом таком коммите присутствовала строка со ссылкой на ZIP-архив. Исследователь подал запрос в GitHub с просьбой удалить репозитории. Спустя две недели ответа не последовало, и он открыл обсуждение в сообществе. Три участника предложили советы, но ни один не помог решить проблему. Только через месяц служба поддержки удалила указанные репозитории.

Позже, уже после завершения инцидента, исследователь разработал методику поиска подобных репозиториев в масштабе всей платформы. Он выявил общий паттерн: репозитории регулярно обновляются (каждые несколько часов), при каждом обновлении изменяется только README-файл, в нём размещается ссылка на ZIP-архив, все коммиты скопированы из другого репозитория, сам репозиторий не является форком, а контрибьюторы и названия у каждого свои. Такая структура делает поиск по цепочке форков невозможным. Для массового анализа исследователь использовал сервис GH Archive, который предоставляет историю событий GitHub. За пять дней было зафиксировано 16 миллионов пуш-коммитов. Из них он отобрал репозитории, обновлявшиеся от одного до 24 раз за сутки, - таких оказалось 40 000. После дополнительной фильтрации (коммит от пользователя, а не от бота; последний коммит с названием "Update README.md"; изменение только одного файла) осталось 10 000 репозиториев, каждый из которых содержит ссылку на ZIP-архив с трояном.

Архив, как показал предоставленный анализ, включает четыре файла: исполняемый CMD-скрипт (Application.cmd или Launcher.cmd), EXE-файл (loader.exe, luajit.exe или аналогичный), файл со случайным именем с расширением .cso или .txt, а также библиотеку lua51.dll. При проверке самого архива в VirusTotal - сервисе, позволяющем проверять файлы на вредоносное ПО с помощью десятков антивирусных движков - по прямой ссылке результат показывает ноль детекций. Однако при загрузке архива как файла несколько антивирусов распознают в нём троян. Это указывает на целенаправленную попытку обойти статический анализ, используемый при сканировании по URL.

Исследователь предполагает, что злоумышленники копируют не популярные репозитории, а новые, только что созданные. Такой подход позволяет сразу попадать в топ выдачи поисковых систем по свежим низкочастотным запросам. Репозитории добавляются в популярные теги GitHub, что увеличивает шанс индексации и привлекает случайных посетителей. Копирование всей истории коммитов и списка контрибьюторов создаёт иллюзию легитимности: пользователь видит несколько участников, аккаунты которых не похожи на однодневки, и длительную историю разработки. Частая перезапись коммитов, вероятно, служит для обхода алгоритмов безопасности GitHub: механизмы, проверяющие репозитории на вредоносный код, не успевают срабатывать на постоянно меняющихся проектах. Единое название коммита "Update README.md" также может быть частью обфускации.

Важный вывод касается ограниченности автоматической защиты GitHub. Исследователь использовал стандартное API с лимитом 5000 запросов в час и смог выявить 10 000 репозиториев. У команды GitHub такого ограничения нет, она может проанализировать все 500 миллионов репозиториев, сканируя любые архивы и исполняемые файлы. Тот факт, что вредоносные репозитории существуют более года и не удаляются автоматически, говорит о необходимости усиления мер безопасности на уровне платформы. В частности, GitHub мог бы ввести обязательную проверку файлов, загружаемых по ссылкам из README, или отслеживать аномальное поведение репозиториев с повторяющимися коммитами.

Исследователь опубликовал полный список найденных репозиториев и скрипт для поиска подобных проектов в открытом доступе. Он не планирует повторно обращаться в поддержку GitHub из-за большого объёма находок, но надеется, что служба безопасности платформы обратит внимание на данную проблему. Ситуация демонстрирует, что современные кампании по распространению вредоносного ПО активно адаптируются к особенностям хостинг-платформ, используя асимметрию между ограничениями внешнего исследователя и возможностями владельца сервиса. Пользователям GitHub рекомендуется проверять ссылки на архивы в репозиториях с подозрительной частотой обновлений и не запускать скачанные из непроверенных источников исполняемые файлы.

Индикаторы компрометации

Комментарии: 0