![](https://habrastorage.org/getpro/habr/upload_files/649/9b7/5f0/6499b75f0d204d261dc0569f9afe029d.png)
Мы, команда 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.
В рамках этой кампании вредоносная составляющая пакетов выглядит одинаково:
![Отправка информации о пользователе Отправка информации о пользователе](https://habrastorage.org/getpro/habr/upload_files/d0c/e12/010/d0ce12010f3c006b01ff56df60831bdc.png)
Исключение сканера безопасности snyk
из целей может свидетельствовать о том, что серия пакетов является исследованием, проводимым этой компанией. Однако авторы не оставили в описании проекта и на полях метаинформации ничего, что могло бы об этом свидетельствовать. Полное условие выглядит так:
![](https://habrastorage.org/getpro/habr/upload_files/a01/f17/12e/a01f1712e960431a79c022861162e2de.png)
К слову, автор многочисленных пакетов лукавит в комментарии на скриншоте выше, утверждая, что чувствительная информация не утекает: помимо имени устройства, имени пользователя, текущей рабочей и домашней директорий, от пользователя еще утекает внешний IP-адрес, который как минимум логируется веб-сервером.
Для злоумышленника это может служить пробой пера для понимания профиля потенциальных жертв в рамках дальнейшего развития вектора атаки.
«Install Utils»
Пакеты за авторством пользователя acamach0
, относящиеся к сентябрю 2022 года, отправляют избыточную телеметрию (имя пользователя, путь до текущей рабочей директории вкупе с IP-адресом по факту HTTP-запроса) в процессе установки:
![Логика отчетов проектов installutils Логика отчетов проектов installutils](https://habrastorage.org/getpro/habr/upload_files/c4a/cc0/49c/c4acc049c07ad458cf3eb129cc4391ff.png)
Из интересного можно отметить, что в процессе установки проект делает дополнительные проверки с небольшим сокрытием названий:
![Функция check_path ищет файл или папку mwinit в листинге директорий, перечисленных в PATH, а find_path — evaluate Функция check_path ищет файл или папку mwinit в листинге директорий, перечисленных в PATH, а find_path — evaluate](https://habrastorage.org/getpro/habr/upload_files/4bb/b22/704/4bbb227048b5dfcae5cb18aadb242c46.png)
check_path
ищет файл или папку mwinit
в листинге директорий, перечисленных в PATH, а find_path
— evaluate «Кошачьи баннеры»
В рамках этой кампании мы выделили следующие пакеты:
catbannersxd
;catbannerslol
.
![Исполнение вредоносной логики полностью оправдано котиком Исполнение вредоносной логики полностью оправдано котиком](https://habrastorage.org/getpro/habr/upload_files/ee1/d2b/af4/ee1d2baf4c2dc81b966f3b19ba6c2dd9.png)
Оба пакета опубликованы 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
— реализация функций бэкдора; отправляет украденную информацию злоумышленникам, затем ожидает управляющую команду.
Набор команд включает в себя запись экрана, возможность захватить экран и звук и стримить их в голосовом канале, получение изображений с веб-камеры, подмену криптокошельков в буфере обмена, работу с файловой системой и выкачивание файлов, вызов синего экрана смерти, шифрование файлов и многое, многое другое.
![Часть функций, предоставляемых этим трояном Часть функций, предоставляемых этим трояном](https://habrastorage.org/getpro/habr/upload_files/845/b82/343/845b82343d467719c2747e47174c341a.png)
«Pymodify»
Мы обнаружили проекты, использующие одинаковую обфускацию:
muchar: procleaner
(декабрь 2022 года);pymodify: pymodify
(ноябрь 2022 года).
Проекты обфусцированы, код представлен следующим образом:
![Xor-обфускация с длинным ключом Xor-обфускация с длинным ключом](https://habrastorage.org/getpro/habr/upload_files/b28/05e/824/b2805e82440b23c9ca84d45a2374abcf.png)
При снятии обфускации пакета procleaner нашему взору предстает реверс-шелл:
![Хоть общение и ведется по каналу без шифрования, сообщение от сервера закодировано base64 и пожато zlib Хоть общение и ведется по каналу без шифрования, сообщение от сервера закодировано base64 и пожато zlib](https://habrastorage.org/getpro/habr/upload_files/82b/710/5d1/82b7105d12bc524709479b47f2d0cb86.png)
В пакете pymodify
логика сложнее: он периодически делает скриншоты экрана и отправляет их по FTP злоумышленнику, обогащая данные его внешним IP-адресом:
![Злоумышленник собирает скриншоты, благо не ваши Злоумышленник собирает скриншоты, благо не ваши](https://habrastorage.org/getpro/habr/upload_files/669/bb2/679/669bb26794ad2bf1063249422d553dc0.png)
«Confuser Malware»
Автором пакета pyconfuserm
, выпущенного в октябре 2023 года, является пользователь Fadi002
. Сам пакет заявляет в своем описании: «This modules allows you to protect python scripts».
Проект состоит из двух файлов: setup.py и __init__.py. Второй защищен, под ним ожидается скрипт-протектор:
![Красивый длинный однострочник скрывает логику работы Красивый длинный однострочник скрывает логику работы](https://habrastorage.org/getpro/habr/upload_files/48e/7c0/f20/48e7c0f200221995743725ff26db916c.png)
На деле все не так радужно, нас встречает Trojan-Downloader:
![Скачивание исполняемого файла во временную директорию с последующим исполнением Скачивание исполняемого файла во временную директорию с последующим исполнением](https://habrastorage.org/getpro/habr/upload_files/778/848/72a/77884872a4ca80554cdd41e2d3b13c37.png)
Злоумышленник использует сервис repl.co
облачной интегрированной среды разработки и хостинга приложений, и это замечательно, ведь это позволит нам посмотреть не только на проект, доступом с которым «поделился» злоумышленник, но и в целом получить больше информации о последнем.
Так, троян предлагает нам скачать и запустить файл dism.exe
, но в директории лежит больше файлов:
![Директория, где лежит сам файл Директория, где лежит сам файл](https://habrastorage.org/getpro/habr/upload_files/4c2/c14/624/4c2c14624c770e025832e85bde7c0a40.png)
Исполняемые EXE-файлы являются экземплярами трояна XWorm класса RAT, позволяющего скрытно наблюдать за действиями жертвы и дающего полный контроль над всей периферией (в том числе возможность перенаправить злоумышленнику данные с веб-камеры, микрофона, рабочего стола, файловой системы). XWorm также имеет функцию добавления жертвы в ботнет для осуществления DDoS-атаки.
Учетная запись, похоже, создана специально для вредоносных кампаний. Первая активность аккаунта датируется 9 июля 2023 года, последняя — 9 декабря 2023 года.
«Многофункциональный стилер MIKU+»
![Островок обфускации в море бессмысленного кода Островок обфускации в море бессмысленного кода](https://habrastorage.org/getpro/habr/upload_files/99c/8cf/7c7/99c8cf7c7b4e29bb8ab909cff8d4ba89.png)
Однострочник на скриншоте выше, относящийся к проекту ForgyP от апреля 2023 года, раскрывается в комплексную малварь аж на 1369 строк, включая в себя:
кражу учетных записей Discord;
получение сохраненных паролей, платежных карт, кук, данных автозаполнения для форм, истории посещения, закладок из браузеров;
сбор папок с конфигурационными файлами криптокошельков;
сбор с файловой системы файлов с интересными расширениями и ключевыми словами, например passw, secret, seed, 2fa, nft, metamask, wallet;
сбор учетных записей Telegram, Steam, Riot Games.
![Если в процессе скачивания новых npm/pip-проектов внезапно умрет телега, то у вас будет несколько мгновений, чтобы вырубить сеть :) Если в процессе скачивания новых npm/pip-проектов внезапно умрет телега, то у вас будет несколько мгновений, чтобы вырубить сеть :)](https://habrastorage.org/getpro/habr/upload_files/03b/37d/118/03b37d11819347bb8016cc3c314a827f.png)
Некоторые части логики этого стилера почти что в неизменном виде мы встречали в разнообразном вредоносном программном обеспечении, но это, пожалуй, самое полное собрание действий.
«License check проекты»
К этой маленькой кампании мы относим пакеты пользователя Lonewolf2132: request-forTest
, request-1InterIIT
и request-TestLib
. Они созданы 8 февраля 2023 года, и их объединяет общая логика работы: в процессе установки будет запущена «проверка лицензии»:
![Процесс установки в setup.py Процесс установки в setup.py](https://habrastorage.org/getpro/habr/upload_files/e01/c6a/239/e01c6a23920f6d0607acad0ae964a902.png)
![Логика «проверки лицензии». За base64 скрывается ссылка на скрипт в GitHub Логика «проверки лицензии». За base64 скрывается ссылка на скрипт в GitHub](https://habrastorage.org/getpro/habr/upload_files/6d2/b47/7ef/6d2b477ef257f0618a9d0dacd2c8f44d.png)
Нетрудно увидеть, что проверка лицензии приводит к исполнению полученного кода.
![](https://habrastorage.org/getpro/habr/upload_files/2b8/773/af1/2b8773af178268752e15c876134915f8.png)
«Неправильный калькулятор»
Возможно, вы хотите свой персональный калькулятор? Пользователь tsuto
создал для этого проект «calculator-6a16205c5a683383».
![Однако функция сложения вам явно не понравится Однако функция сложения вам явно не понравится](https://habrastorage.org/getpro/habr/upload_files/0b6/224/841/0b6224841baf644ecc7ffa610b5fc3ba.png)
В итоге нас обманули, расходимся: нас встречает реверс-шелл, пусть наверняка уже и не работающий.
Будьте в безопасности в мире открытого программного обеспечения
В рамках исследования мы показали, что вредоносное ПО может скрываться несколько месяцев, а то и лет, пока его обнаружат. Уменьшить шанс того, что вредоносное программное обеспечение попадет в ваши процессы разработки, можно с помощью наших решений:
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