В рамках исследования и отслеживания угроз группа Supply Chain Security департамента Threat Intelligence экспертного центра Positive Technologies (PT ESC) обнаружила и предотвратила вредоносную кампанию в главном репозитории пакетов Python Package Index (PyPI). Атака была нацелена на разработчиков, ML-специалистов и простых энтузиастов, которым могла быть интересна интеграция DeepSeek в свои системы.

Репозиторий пакетов PyPI используется по умолчанию в пакетных менеджерах pip, pipenv, poetry.

Цепочка атаки

Злоумышленник, создавший учетную запись bvk в июне 2023 года и до этого не проявлявший активности, зарегистрировал вредоносные пакеты deepseeek и deepseekai 29 января 2025 года.

Рисунок 1. Скриншот страницы пользователя bvk (Vamsi)
Рисунок 1. Скриншот страницы пользователя bvk (Vamsi)

Функции найденных пакетов направлены на сбор данных о пользователе, его компьютере и кражу переменных окружения после установки пакетов. Вредоносная функциональность выполняется при вызове консольных команд deepseeek или deepseekai, в зависимости от установленного пакета. Переменные окружения часто содержат конфиденциальные данные, необходимые для работы приложений, например API-ключи для S3-хранилища, учетные данные для баз данных и доступы к другим инфраструктурным ресурсам.

Рисунок 2. Регистрация консольной команды deepseekai одноименным пакетом
Рисунок 2. Регистрация консольной команды deepseekai одноименным пакетом
Рисунок 3. Вредоносная нагрузка пакетов
Рисунок 3. Вредоносная нагрузка пакетов

В качестве контрольного сервера, куда выгружаются данные, разработчик этих двух пакетов использовал сервис Pipedream, который является интеграционной платформой для разработчиков. 

Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии, объясняющие строки кода.

Мы оперативно уведомили администраторов PyPI, пакеты уже удалены. Несмотря на быструю реакцию, пакет успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch и 186 раз — при помощи браузера, библиотеки requests и других средств.

Рисунок 4. Страница проекта deepseekai, уже под карантином
Рисунок 4. Страница проекта deepseekai, уже под карантином

Хронология атаки (UTC+0):

Время

Событие

1/29/25 15:52

Опубликован пакет deepseeek 0.0.8

1/29/25 16:13

Опубликован пакет deepseekai 0.0.8

1/29/25 16:21

В рамках нашего репорта оба пакета отправлены в карантин и недоступны для скачивания через менеджеры пакетов

1/29/25 16:41

Администрация PyPI удалила пакет deepseeek и уведомила нас

1/29/25 16:42

Администрация PyPI удалила пакет deepseekai и уведомила нас

Список скачиваний (по данным PyPI):

Страна

Способ скачивания

Количество

США

Браузер

33

requests

19

pip

8

bandersnatch

2

Иной

55

Китай

bandersnatch

8

pip

6

Браузер

4

Иной

18

Россия

Браузер

3

requests

1

Иной

8

Гонконг

pip

4

Браузер

4

bandersnatch

2

requests

1

Германия

bandersnatch

4

requests

4

Браузер

2

Канада

Браузер

3

requests

2

Швейцария

requests

3

Браузер

2

Хорватия

Браузер

4

Швеция

requests

4

Польша

Браузер

2

Великобритания

Браузер

2

Ирландия

Иной

2

Норвегия

Браузер

2

Сингапур

bandersnatch

2

Франция

requests

2

Украина

Браузер

1

Саудовская Аравия

Браузер

1

Заключение

Хакеры всегда следят за современными трендами и в нужный момент могут подсуетиться, используя хайп в своих целях. В этом кейсе мы разобрали достаточно безобидную атаку. Впрочем, из-за ажиотажа вокруг сервиса DeepSeek она могла бы привести к большему количеству жертв, если бы вредоносная активность пакета дольше оставалась незамеченной.

Эти пакеты были выявлены с помощью сервиса для выявления подозрительных и вредоносных пакетов PT PyAnalysis. Сервис анализирует на предмет нежелательной активности новые релизы, создаваемые пользователями PyPI, в режиме реального времени.

Рекомендуем проявлять бдительность в отношении ранее неизвестных вам пакетов, которые выдают себя за обертки для популярных сервисов.

IoCs

IoC

Тип

deepseeek

пакет PyPI

deepseekai

пакет PyPI

eoyyiyqubj7mquj.m.pipedream.net

C2

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


  1. yrub
    01.02.2025 10:50

    а почему нельзя ввести верификацию всех таких коммитеров? фото с паспортом, аккаунт в сторонних сетях и т.д.


    1. DarkPyDoor
      01.02.2025 10:50

      Звучит не очень разумно, так как я не хочу раскрывать свои паспортные данные. При этом хакеры могут легко обойти такую защиту, используя украденные документы или просто заплатив людям за верификацию.

      Поэтому не вижу в этом смысла.


    1. maksimtor
      01.02.2025 10:50

      Давайте представим, во сколько раз сократится количество пакетов, учитывая, что мало кто захочет для публикации присылать свой паспорт


      1. rakovskij_stanislav Автор
        01.02.2025 10:50

        Да, это будет драма)

        Если даже без показа паспорта, а просто модерации, количество пакетов сократится с 605 тысяч до чуть меньше 4 тысяч, то просто не представляю, сколько пакетов останется после введения проверки паспорта. Добросовестные разработчики предпочтут публиковаться в другом месте, а злоумышленников такая мера вряд ли остановит.


    1. 9982th
      01.02.2025 10:50

      PyPI прямо сейчас позволяет верифицировать, что код был загружен тем, кто контролирует, к примеру, определенный Github-репозиторий.

      Вот так

      А позволяет и не верифицировать.


      1. rakovskij_stanislav Автор
        01.02.2025 10:50

        Это часть механизма Trusted Publisher, и он служит для верификации, что данный релиз был опубликован из оригинального настроенного репозитория. Если злоумышленнику подкинут прав, позволяющих беспрепятственно создавать новые релизы, как это было с xz-utils в прошлом году, либо учётку разработчика подломят, то мера не будет такой эффективной


  1. Genka_pokos
    01.02.2025 10:50

    Жесть, и как теперь верить людям))


    1. rakovskij_stanislav Автор
      01.02.2025 10:50

      Важно помнить, что во всех процессах разработки и поставки ПО есть люди. Проверить всех на благонадёжность маловозможно, но предпринять попытку уменьшения рисков всегда можно. Главное читать новости, поясняющие, какие цели преследовал злоумышленник)

      Если вы корпоративный разработчик, то можно обратиться к локальным депопсам/девсекопсам с уточнениями, какие методы безопасности у вас практикуются.

      Параноикам и датасаентистам можно воспользоваться Anaconda, но нужно убедиться, что необходимые пакеты там есть)

      Ну и базово нужно помнить, что часто целью инфостилеров являются криптокошельки, пароли из браузеров, сессии месседжеров. В этом случае разработка в контейнере может значительно ограничить ландшафт угроз. Да, переменные окружения утекут, но секреты оттуда можно быстренько инвалидировать.

      Тут могло быть упоминание того, что у нас тоже есть решения по анализу кода, мы же как-то нашли эти пакеты)


  1. mrpoteto
    01.02.2025 10:50

    В pipy же есть модерации пакетов, как его пропустили