Pull to refresh

Неправильные ML-библиотеки, обфускация и кража аккаунтов Телеграм. Очищаем PyPI от вредоносных библиотек

Level of difficultyEasy
Reading time7 min
Views2.5K

Мы, команда 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-запроса) в процессе установки:

Логика отчетов проектов installutils
Логика отчетов проектов installutils

Из интересного можно отметить, что в процессе установки проект делает дополнительные проверки с небольшим сокрытием названий:

Функция check_path ищет файл или папку mwinit в листинге директорий, перечисленных в PATH, а find_path — evaluate
Функция check_path ищет файл или папку mwinit в листинге директорий, перечисленных в PATH, а find_pathevaluate

«Кошачьи баннеры»

В рамках этой кампании мы выделили следующие пакеты:

  • 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 года).

Код проектов защищен следующим образом:

Xor-обфускация с длинным ключом
Xor-обфускация с длинным ключом

При снятии обфускации пакета procleaner нашему взору предстает реверс-шелл:

Хоть общение и ведется по каналу без шифрования, сообщение от сервера закодировано base64 и пожато zlib, что может обеспечить толику защищенности
Хоть общение и ведется по каналу без шифрования, сообщение от сервера закодировано base64 и пожато zlib, что может обеспечить толику защищенности

В пакете 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.

Если в процессе скачивания новых npm/pip-проектов внезапно умрет телега, то у вас будет несколько мгновений, чтобы вырубить сеть :)
Если в процессе скачивания новых npm/pip-проектов внезапно умрет телега, то у вас будет несколько мгновений, чтобы вырубить сеть :)

Некоторые части логики этого стилера почти что в неизменном виде мы встречали в разнообразном вредоносном программном обеспечении, но это, пожалуй, самое полное собрание действий.

«License check проекты»

К этой маленькой кампании мы относим пакеты пользователя `Lonewolf2132` request-forTest, request-1InterIIT и request-TestLib. Они созданы 8 февраля 2023 года, и их объединяет общая логика работы: в процессе установки будет запущена «проверка лицензии»:

Процесс установки в setup.py
Процесс установки в setup.py
Логика «проверки лицензии». За base64 скрывается ссылка на скрипт в GitHub
Логика «проверки лицензии». За base64 скрывается ссылка на скрипт в GitHub

Проверка лицензии приводит к исполнению скачанного кода.

«Неправильный калькулятор»

Возможно, вы хотите свой персональный калькулятор? Пользователь 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

Tags:
Hubs:
Total votes 19: ↑19 and ↓0+24
Comments5

Articles

Information

Website
www.ptsecurity.com
Registered
Founded
2002
Employees
1,001–5,000 employees
Location
Россия