Мы, команда threat intelligence экспертного центра безопасности Positive Technologies, в рамках недавнего автоматизированного аудита проектов, размещенных в главном репозитории Python-кода, нашли 28 вредоносных пакетов, которые уже много месяцев вредили пользователям. В совокупности они были скачаны 59 000 раз.

Отчет о перечисленных ниже проектах был передан команде Python Package Index, благодаря чему проекты были удалены.

Как мы обнаружили эти пакеты

Мы постоянно работаем над качеством нашей экспертизы. В сервисе PyAnalysis мы пробуем новые методы эффективного обнаружения проектов, угрожающих безопасности пользователей. Так, в прошлом году мы подключили обнаружение применения техник typosquatting и starjacking. Первый подразумевает использование видоизмененных названий популярных проектов в надежде, что разработчик опечатается и напишет, к примеру 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 года, отправляют избыточную телеметрию (имя пользователя, путь до текущей рабочей директории вкупе с IP-адресом по факту HTTP-запроса) в процессе установки:

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

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

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

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

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

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

«Многофункциональный стилер 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

Комментарии (0)