Открытое ПО сегодня привлекает повышенное внимание с разных сторон — разработки, бизнеса, технологий. Естественно, и его безопасность стоит отдельным вопросом, ведь злоумышленники также активно интересуются open source и создают угрозы для безопасной разработки. Доставка вредоносного кода через сторонние зависимости стала одним из опасных способов заражения. По нашим прогнозам, этот тренд будет только усиливаться.

Основные источники такого ВПО — репозитории с пакетами для разработки, в частности PyPI и npm. В них содержатся стилеры учетных записей, данных банковских карт и криптовалюты. В 2022 году, впервые в истории open source, киберпреступная группировка LofyGang использовала публичный npm-репозиторий для хранения своего ВПО. Исследователи обнаружили около 200 вредоносных npm-пакетов, с помощью которых злоумышленники похищали учетные и банковские данные, а затем продавали эту информацию в даркнете. Это первый, но наверняка не последний случай, когда именно организованная киберпреступная группировка использовала открытый код репозитория для хранения и распространения ВПО.

В сложившейся ситуации, ввиду развития тренда, уже недостаточно просто искать вредоносный код: его нужно анализировать и прорабатывать возможные интеграции с другим ВПО, связи между контрольными серверами и т. п. Соответственно, к этому нужно привлекать вирусных аналитиков и специалистов по threat intelligence. Именно поэтому наша команда заинтересовалась поиском угроз в публичных репозиториях и разработкой системы для оперативного выявления вредоносов. В нее мы вложили весь наш опыт исследования ВПО, атрибуции — всего, с чем мы сталкивались в процессе изучения APT-группировок. В итоге мы создали систему PT PyAnalysis, которую можно встроить в процесс безопасной разработки.

Поиск уязвимостей в коде занимает особое место в процессе безопасной разработки. В то же время выявлению вредоносного кода во внешних зависимостях должного внимания пока не уделяется. Сторонние пакеты из популярных репозиториев (GitHub, GitLab, PyPI, npm) используют большинство компаний как у себя внутри, так и при разработке продуктов для клиентов. Отсутствие процесса проверки наличия вредоносного кода во внешних зависимостях может привести к инцидентам информационной безопасности. В самом простом варианте у разработчика просто украдут личную информацию (аккаунты, пароли, данные карт и т. п.). При худшем сценарии может получиться, что вредоносный код уедет на прод и клиенты получат «приятное» обновление. Такой тип атак называется атаками на цепочку поставок.

К примеру, в марте 2022 года в npm-пакет node-ipc сам разработчик залил код с политическими лозунгами. А еще там был код вайпера, который удалял все файлы, если запускался на устройстве с российского или белорусского IP. Для нас этот случай стал отправной точкой в исследовании. Нас интересовал вопрос, какие угрозы могут скрываться в публичных репозиториях и как их можно обнаружить. Мы решили начать с репозитория PyPI, так как все инструменты и системы, которыми пользуемся сами в PT Expert Security Center, мы пишем на Python. Забегая вперед, скажем, что в ходе проведенного исследования мы обнаружили более 200 вредоносных пакетов, которые зарепортили админам, и большинство из них было удалено.

Результаты исследования репозитория PyPI

В течение 2022 года ежедневно появлялось около 3 тысяч Python-пакетов.

Суточная статистика новых пакетов в репозитории PyPI
Суточная статистика новых пакетов в репозитории PyPI

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

Среди способов (техник) компрометации можно выделить используемые и гипотетические:

  • тайпсквоттинг (использование опечаток и названий, похожих на легитимные пакеты);

  • заимствование названия ранее удаленного пакета;

  • фишинговые атаки на разработчиков;

  • starjacking — накрутка репутации проекта;

  • вредоносный пакет в зависимостях;

  • «левые» гайды по вредоносным пакетам (гипотетический).

Создать репозиторий с незанятым именем на pypi.org для хранения Python-пакетов сегодня может любой желающий. Здесь нет ограничений по корпоративной почте, наличию прокаченного аккаунта на GitHub или другим критериям добросовестного разработчика.

Стоит отметить, что у PyPI есть система выявления вредоносного кода Malware Checks, но ее правила детектирования лежат в исходном коде проекта, и обойти их достаточно просто. Сама система при этом не является блокирующей: сигналы приходят на почту администраторам, после чего они проверяют код пакета и принимают решение о блокировке.

В рамках нашего исследования за десять месяцев начиная с прошлого года мы обнаружили более 200 вредоносных пакетов, причем часть из них находилась там еще с 2018-го. Это в два с лишним раза больше, чем заявляли другие аналитики и компании, публикующие об этом отчеты. Для сравнения, компания Sonatype рассказывала только о 53 пакетах.

В найденных нами пакетах были обнаружены различные типы и следы вредоносного ПО: стилеры (63%) и бэкдоры (20%), нежелательная для пользователя активность (8%), программы-загрузчики (6%), proof of concept вредоносного ПО без вредоносной активности, разрушительных действий или краж (2%) и программы-вымогатели (1%).

Результаты исследования Positive Technologies
Результаты исследования Positive Technologies

Мы также установили, что средняя продолжительность жизни вредоносного пакета до его удаления — 13 дней. Это достаточный срок для того, чтобы пользователь сервиса скачал и установил этот пакет и тем самым заразил свой компьютер.

Как выявить вредоносный Python-пакет

Проанализировав репозиторий PyPI, мы подумали — почему бы все разработанные под это дело инструменты не преобразовать в систему с веб- и API-интерфейсами? Полученный MVP мы представили нашим DevSecOps, и они встроили его в процесс безопасной разработки Positive Technologies.

Спустя несколько месяцев тестов и фиксов мы решили выпустить нашу систему в паблик. Сама система состоит из трех элементов: веб-интерфейса, API (реализован SDK) и документации по правилам.

Документация по правилам
Документация по правилам
Веб-интерфейс
Веб-интерфейс

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

Пример таймлайна проекта
Пример таймлайна проекта
Состав релиза и вердикты для компонентов
Состав релиза и вердикты для компонентов

Можно посмотреть и исходный код компонентов релиза.

Страница с данными компонента релиза
Страница с данными компонента релиза

Система отличается максимальной автоматизацией: пользователи могут отправить название Python-пакета на проверку через API и получить оценку его опасности: clean, suspicious, malicious. Наш инструмент не только выдает вердикт, но и объясняет, почему тот или иной пакет является вредоносным.

Пример API-запроса и ответа
Пример API-запроса и ответа

PT PyAnalysis работает по модели as a service: Python-разработчики и специалисты по безопасной разработке могут воспользоваться услугой бесплатно, чтобы протестировать ее в своем пайплайне и оценить качество инструмента. Регистрироваться лучше с корпоративной почты; в других случаях стоит указать, для чего нужен доступ.

Сейчас система находится в состоянии MVP, но мы активно ее дорабатываем. Замечания первых пользователей будут учтены, чтобы улучшить сервис и сделать его более удобным. Мы будем поддерживать и развивать систему, делиться новостями об интересных техниках и находках с комьюнити. Ближайший roadmap по разработке выглядит так:

  • улучшение PSE (Python scan engine) и качества вердиктов;

  • улучшение системы выявления тайпсквоттинга;

  • выявление накручивания репутации проекта;

  • анализ встроенных в релиз бинарных файлов (ELF, EXE) с помощью нашей системы Salomon с выдачей вердикта;

  • выдача вердикта по встроенным в релиз URL;

  • возможность поиска в системе по метаданным автора, построение вердиктов на основе профиля разработчика.

В дальнейшем мы планируем добавить анализ npm и Docker Hub. 

Чтобы узнать больше о проблеме доставки вредоносного кода через сторонние зависимости и возможностях PT PyAnalysis, вы можете посмотреть наш вебинар.

А еще присоединяйтесь к телеграм-чату о PT PyAnalysis. Ответим на вопросы, посоветуем полезные ссылки и будем держать в курсе новостей сервиса.


Денис Кувшинов

Руководитель отдела исследования угроз ИБ, Positive Technologies

Станислав Раковский

Специалист отдела исследования угроз ИБ, Positive Technologies

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


  1. Protos
    00.00.0000 00:00

    Если вы осилили python, не является ли логичным далее осилить анализ power shell? Или если его не умеет ваш PT AI, то и ждать анализ PS нет смысла и это скорее должен быть функционал PT AI? И да я понимаю, что PS не проставляется в виде пакетов.


    1. ptsecurity Автор
      00.00.0000 00:00
      +1

      PowerShell не поставляется в виде пакетов, и у него нет публичного репозитория скриптов. На данный момент мы не планируем охватывать PowerShell. Если требуется проверить его на предмет закладок, лучше воспользоваться песочницей.


  1. Dynasaur
    00.00.0000 00:00
    +1

    Очень познавательно. Периодически задумывался на эту тему (возможности злоумышленникам натворить делов через пакеты опенсорс-продуктов, в частности, моего любимого питона), но не знал борется ли с этим кто-нибудь, и если да, то как. Теперь надо осмыслить написанное, много неожиданных фактов.


  1. thepythonicway
    00.00.0000 00:00

    Полезный инструмент, спасибо! Проблема, на самом деле, очень важная на мой взгляд. Еще не так давно читал о количестве вредоносных пакетов в PyPi и думал, что было бы круто иметь адекватный сервис по анализу и детекту таких пакетов.


  1. mrkaban
    00.00.0000 00:00
    +1

    PT PyAnalysis работает по модели as a service: Python-разработчики и специалисты по безопасной разработке могут воспользоваться услугой бесплатно

    Бесплатно и бесплатный пилот это разные вещи.

    Однако, инструмент действительно очень интересный!


  1. glader
    00.00.0000 00:00

    Кажется вы пропустили https://pypi.org/project/safety/


    1. ptsecurity Автор
      00.00.0000 00:00

      Добрый день, PyAnalysis ищет только вредоносное ПО. Более того, мы видим, что поиск уязвимостей в коде занимает особое место в процессе безопасной разработки, в то время как выявлению вредоносного кода во внешних зависимостях уделяется мало внимания.