Мы, команда Threat Intelligence экспертного центра безопасности Positive Technologies, в рамках недавнего автоматизированного аудита проектов, размещенных в главном репозитории Python-кода, нашли 28 вредоносных пакетов, которые уже много месяцев вредили пользователям. В совокупности они были скачаны 59 000 раз.
Отчет о перечисленных ниже проектах был передан команде Python Package Index (PyPI), благодаря чему проекты были удалены.
Как мы обнаружили эти пакеты
Мы постоянно работаем над качеством нашей экспертизы. В сервисе PyAnalysis мы пробуем новые методы эффективного обнаружения проектов, угрожающих безопасности пользователей. Так, в прошлом году мы подключили обнаружение применения техник typosquatting и starjacking.
Typosquatting подразумевает использование видоизмененных названий популярных проектов в надежде, что разработчик опечатается и напишет, к примеру equests
, request
или rquest
— все это настоящие вредоносные проекты, мимикрирующие под requests
, и их код можно посмотреть в сервисе.
Starjacking — это указание ссылки на популярный репозиторий GitHub в качестве домашней страницы для PyPI-проекта. PyPI отображает информацию о звездах и форках, из-за чего создается неверное впечатление о благонадежности проекта. Механизм этой атаки мы подробно разбирали в этой статье. В начале года мы добавили деобфускатор на основе трансформера AST, значительно облегчающий обнаружение сложных вредоносных проектов.
Сейчас мы внедряем решения ML для поиска плохих проектов, и в рамках сканирования обнаружили несколько десятков плохих релизов в 28 проектах. О наиболее интересных из них мы и расскажем.
«Этический ресерч»
В рамках этой кампании мы выделили проекты следующих разработчиков:
-
ai-codesign
:ai-codesign
;
-
synapseml-dev
:synapseml-vw
;synapseml-opencv
;synapseml-lightgbm
;synapseml-deep-learning
;synapseml-core
;sqlanalyticsconnectorpy
;library-metadata-cooker
;fsspec-wrapper
;azure-synapse-ml-predict
;
-
intel-pytorch
:azureml-data
;
-
prose-codeaccelerator
:prose-datainsights
;prose-codeacceleratorlab
;prose-codeaccelerator
;azureml-codeaccelerator
.
Все эти пакеты были созданы 1 марта 2023 года. Автор использовал названия пакетов, пересекающиеся с именами популярных проектов по машинному обучению. Например, synapseml-lightgbm
мимикрирует сразу под три пакета:
synapseml
, пакет Microsoft для Apache Spark;lightgbm
, популярную библиотеку по машинному обучению;synapseml-cognitive
, существовавшую ранее библиотеку от Microsoft.
В рамках этой кампании вредоносная составляющая пакетов выглядит одинаково:
Исключение сканера безопасности snyk
из целей может свидетельствовать о том, что серия пакетов является исследованием, проводимым этой компанией. Однако авторы не оставили в описании проекта и на полях метаинформации ничего, что помогло бы это подтвердить. Полное условие выглядит так:
К слову, автор многочисленных пакетов лукавит в комментарии к коду на первой картинке, утверждая, что чувствительная информация не отправляется, ведь помимо имени устройства, имени пользователя, текущей рабочей и домашней директорий, от пользователя еще утекает внешний IP-адрес, который как минимум логируется веб-сервером.
Для злоумышленника такие тестовые пакеты могут служить пробой пера для понимания профиля потенциальных жертв в рамках дальнейшего развития вектора атаки.
«Install Utils»
Пакеты за авторством пользователя acamach0
, относящиеся к сентябрю 2022 года (и, получается, обнаруженные только в начале 2024), отправляют избыточную телеметрию (имя пользователя, путь до текущей рабочей директории вкупе с IP-адресом по факту HTTP-запроса) в процессе установки:
Из интересного можно отметить, что в процессе установки проект делает дополнительные проверки с небольшим сокрытием названий:
«Кошачьи баннеры»
В рамках этой кампании мы выделили следующие пакеты:
catbannersxd
;catbannerslol
.
Оба пакета опубликованы 26 сентября 2023 года. Тут все прекрасно: и стать жертвой вредоносного программного обеспечения класса Trojan-Downloader, и на котика посмотреть :)
По ссылке нас ждет файл весом 22 мегабайта, использующий PyInstaller. Исходный код скомпилирован под Python 3.9 и представляет собой проект PySilon
(продвинутый Remote Administration Tool (RAT), написанный на Python и функционирующий через Discord-бота), он включает в себя несколько скриптов:
misc.pyc
— сервисные функции для хеширования файлов и обхода директорий;discord_token_grabber.pyc
— получение сессионного токена учетной записи Discord;get_cookies.pyc
— извлечение кук из Chromium-based браузеров и Firefox;passwords_grabber.pyc
— извлечение паролей из Chromium-based браузеров;source_prepared.pyc
— реализация функций бэкдора; отправление украденной информации злоумышленникам, затем ожидание управляющей команды.
Набор команд включает в себя запись экрана, возможность захватить экран и звук и стримить их в голосовом канале, получение изображений с веб-камеры, подмену криптокошельков в буфере обмена, работу с файловой системой и выкачивание файлов, вызов синего экрана смерти, шифрование файлов и многое, многое другое.
«Pymodify»
Мы обнаружили проекты, использующие одинаковую обфускацию:
muchar
:procleaner
(декабрь 2022 года);pymodify
:pymodify
(ноябрь 2022 года).
Код проектов защищен следующим образом:
При снятии обфускации пакета procleaner
нашему взору предстает реверс-шелл:
В пакете pymodify
логика сложнее: он периодически делает скриншоты экрана и отправляет их по FTP злоумышленнику, обогащая данные IP-адресом жертвы:
«Confuser Malware»
Автором пакета pyconfuserm
, выпущенного в октябре 2023 года, является пользователь Fadi002
. Сам пакет заявляет в своем описании: «This modules allows you to protect python scripts».
Проект состоит из двух файлов: setup.py
и __init__.py
. Второй защищен, под ним ожидается скрипт-протектор:
На деле все не так радужно, нас встречает Trojan-Downloader:
Злоумышленник использует сервис repl.co
, облачную интегрированную среду разработки и хостинга приложений, и это замечательно, ведь это позволит нам посмотреть на все проекты, доступами к которым «поделился» злоумышленник.
Так, троян предлагает нам скачать и запустить файл dism.exe
, но в директории лежит больше файлов:
Исполняемые exe-файлы являются экземплярами трояна XWorm класса RAT, позволяющего скрытно наблюдать за действиями жертвы и дающего полный контроль над всей периферией (в том числе возможность перенаправить злоумышленнику данные с веб-камеры, микрофона, рабочего стола, файловой системы). XWorm также имеет функцию добавления жертвы в ботнет для осуществления DDoS-атаки.
Учетная запись, похоже, создана специально для вредоносных кампаний. Первая активность аккаунта датируется 9 июля 2023 года, последняя — 9 декабря 2023 года. Учетка содержит несколько проектов, хранящих XWorm.
«Многофункциональный стилер MIKU+»
Однострочник на скриншоте выше, относящийся к проекту ForgyP
от апреля 2023 года, раскрывается в комплексную малварь аж на 1369 строк, включая в себя:
кражу учетных записей Discord;
получение сохраненных паролей, платежных карт, кук, данных автозаполнения для форм, истории посещения, закладок из браузеров;
сбор файлов криптокошельков;
сбор с файловой системы файлов с интересными расширениями и ключевыми словами, например
passw
,secret
,seed
,2fa
,nft
,metamask
,wallet
;сбор учетных записей Telegram, Steam, Riot Games.
Некоторые части логики этого стилера почти что в неизменном виде мы встречали в разнообразном вредоносном программном обеспечении, но это, пожалуй, самое полное собрание действий.
«License check проекты»
К этой маленькой кампании мы относим пакеты пользователя `Lonewolf2132` request-forTest
, request-1InterIIT
и request-TestLib
. Они созданы 8 февраля 2023 года, и их объединяет общая логика работы: в процессе установки будет запущена «проверка лицензии»:
Проверка лицензии приводит к исполнению скачанного кода.
«Неправильный калькулятор»
Возможно, вы хотите свой персональный калькулятор? Пользователь tsuto
создал для этого проект calculator-6a16205c5a683383
.
В итоге нас обманули, расходимся: нас встречает реверс-шелл, пусть наверняка уже и не работающий.
Будьте в безопасности в мире открытого программного обеспечения
В рамках исследования мы показали, что вредоносное ПО может скрываться несколько месяцев, а то и лет, пока его обнаружат. Уменьшить шанс того, что вредоносное программное обеспечение попадет в ваши процессы разработки, можно с помощью наших решений:
PT Application Inspector — инструмент для тестирования безопасности вашей кодовой базы и выявления уязвимостей;
PT Container Security — инструмент обеспечения процессов безопасной разработки с использованием Docker и Kubernetes;
PT PyAnalysis — облачный сервис для выявления вредоносных пакетов в Python Package Index. Благодаря ему и был проведен данный ресерч.
? О поиске вредоносного программного обеспечения в PyPI с помощью ML мы подробнее расскажем на киберфестивале Positive Hack Days 2, который пройдет 23–26 мая в «Лужниках». С удовольствием ждем вас!
Обнаруженные вредоносные пакеты
azureml-codeaccelerator
azureml-data
azure-synapse-ml-predict
calculator_6a16205c5a683383
django-navbar-client-TEST
ForgyP
fsspec-wrapper
installutils-demo
installutils-nohook
installutils-nohookwheel
justmsgbox
klldv5
library-metadata-cooker
procleaner
prose-codeaccelerator
prose-codeacceleratorlab
prose-datainsights
pyconfuserm
pymodify
request_1InterIIT
request_forTest
request_TestLib
sqlanalyticsconnectorpy
synapseml-core
synapseml-deep-learning
synapseml-lightgbm
synapseml-opencv
synapseml-vw
Станислав Раковский и команда threat intelligence PT Expert Security Center
Jury_78
В основном потенциальные жертвы это пользователи Windows?
rakovskij_stanislav Автор
В рамках найденных проектов 50/50. Нагрузка в виде xworm и pyinstaller вряд ли отработает на wine, а в остальном тут трояны, не привязанные к окружению.
Пакет
procleaner
не зависит от операционной системы, там универсальный реверс-шелл, аналогично license-check проекты, а вотcalculator-6a16205c5a683383
нацелен на Linux-based, так как использует /bin/shJury_78
Если вопрос глупый извините. Те что не привязаны... что используют Python/JS ?
mayorovp
Что ещё могут использовать трояны в репозитории пакетов Питона?
rakovskij_stanislav Автор
В голову приходят сразу несколько языков программирования, которые позволяют разработчику реализовать не зависящее от операционной системы решение:
- Python (например, посредством кроссплатформенного интерпретатора CPython)
- .Java (нужен Java Runtime Environment (JRE), например Oracle Java или OpenJDK)
- JavaScript (nodejs)
- .Net (и на Windows, и на Linux посредством .Net Core)
Вопрос релевантный, всё в порядке)