(Не)безопасная разработка: как выявить вредоносный Python-пакет в открытом ПО

(Не)безопасная разработка: как выявить вредоносный Python-пакет в открытом ПО

Открытое ПО сегодня привлекает повышенное внимание с разных сторон — разработки, бизнеса, технологий. Естественно, и его безопасность стоит отдельным вопросом, ведь злоумышленники также активно интересуются 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

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

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

  • тайпсквоттинг (использование опечаток и названий, похожих на легитимные пакеты);
  • заимствование названия ранее удаленного пакета;
  • фишинговые атаки на разработчиков;
  • starjacking — накрутка репутации проекта;
  • вредоносный пакет в зависимостях;
  • «левые» гайды по вредоносным пакетам (гипотетический).

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

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

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

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

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

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

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

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

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

Документация по правилам

Веб-интерфейс

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

Пример таймлайна проекта

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

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

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

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

Пример 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


pt esc pypi pyanaysis python cybersecurity уязвимости пакеты репозитории malware сторонние зависимости
Alt text

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться