Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Открытое ПО сегодня привлекает повышенное внимание с разных сторон — разработки, бизнеса, технологий. Естественно, и его безопасность стоит отдельным вопросом, ведь злоумышленники также активно интересуются 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-пакетов.
Среди них были, конечно, и вредоносные, в которых злоумышленники использовали различные техники, связанные с компрометацией разработчиков, мимикрией под легитимные пакеты и обфускацией. Со временем эти техники становятся все более функциональными и незаметными. Чтобы построить полноценную систему защиты от таких угроз, требуется привлечение специалистов по анализу вредоносного кода.
Среди способов (техник) компрометации можно выделить используемые и гипотетические:
тайпсквоттинг (использование опечаток и названий, похожих на легитимные пакеты);
заимствование названия ранее удаленного пакета;
фишинговые атаки на разработчиков;
starjacking — накрутка репутации проекта;
вредоносный пакет в зависимостях;
«левые» гайды по вредоносным пакетам (гипотетический).
Создать репозиторий с незанятым именем на pypi.org для хранения Python-пакетов сегодня может любой желающий. Здесь нет ограничений по корпоративной почте, наличию прокаченного аккаунта на GitHub или другим критериям добросовестного разработчика.
Стоит отметить, что у PyPI есть система выявления вредоносного кода Malware Checks, но ее правила детектирования лежат в исходном коде проекта, и обойти их достаточно просто. Сама система при этом не является блокирующей: сигналы приходят на почту администраторам, после чего они проверяют код пакета и принимают решение о блокировке.
В рамках нашего исследования за десять месяцев начиная с прошлого года мы обнаружили более 200 вредоносных пакетов, причем часть из них находилась там еще с 2018-го. Это в два с лишним раза больше, чем заявляли другие аналитики и компании, публикующие об этом отчеты. Для сравнения, компания Sonatype рассказывала только о цифра получена путем изучения новостей в блоге компании</p>" data-abbr="53 пакетах">53 пакетах.
В найденных нами пакетах были обнаружены различные типы и следы вредоносного ПО: стилеры (63%) и бэкдоры (20%), нежелательная для пользователя активность (8%), программы-загрузчики (6%), proof of concept вредоносного ПО без вредоносной активности, разрушительных действий или краж (2%) и программы-вымогатели (1%).
Мы также установили, что средняя продолжительность жизни вредоносного пакета до его удаления — 13 дней. Это достаточный срок для того, чтобы пользователь сервиса скачал и установил этот пакет и тем самым заразил свой компьютер.
Как выявить вредоносный Python-пакет
Проанализировав репозиторий PyPI, мы подумали — почему бы все разработанные под это дело инструменты не преобразовать в систему с веб- и API-интерфейсами? Полученный MVP мы представили нашим DevSecOps, и они встроили его в процесс безопасной разработки Positive Technologies.
Спустя несколько месяцев тестов и фиксов мы решили выпустить нашу систему в паблик. Сама система состоит из трех элементов: веб-интерфейса, API (реализован SDK) и документации по правилам.
В самом интерфейсе можно прогуляться по релизам проекта, посмотреть, что происходило внутри него (выпуск релиза, смена владельца, удаление) и посмотреть вердикты для различных компонентов.
Можно посмотреть и исходный код компонентов релиза.
Система отличается максимальной автоматизацией: пользователи могут отправить название Python-пакета на проверку через API и получить оценку его опасности: clean, suspicious, malicious. Наш инструмент не только выдает вердикт, но и объясняет, почему тот или иной пакет является вредоносным.
Сейчас система находится в состоянии MVP, но мы активно ее дорабатываем. Замечания первых пользователей будут учтены, чтобы улучшить сервис и сделать его более удобным. Мы будем поддерживать и развивать систему, делиться новостями об интересных техниках и находках с комьюнити. Ближайший roadmap по разработке выглядит так:
улучшение PSE (Python scan engine) и качества вердиктов;
улучшение системы выявления тайпсквоттинга;
выявление накручивания репутации проекта;
анализ встроенных в релиз бинарных файлов (ELF, EXE) с помощью нашей системы Salomon с выдачей вердикта;
выдача вердикта по встроенным в релиз URL;
возможность поиска в системе по метаданным автора, построение вердиктов на основе профиля разработчика.
В дальнейшем мы планируем добавить анализ npm и Docker Hub.
Чтобы узнать больше о проблеме доставки вредоносного кода через сторонние зависимости и возможностях PT PyAnalysis, вы можете посмотреть наш вебинар.
Денис Кувшинов
Руководитель отдела исследования угроз ИБ, Positive Technologies
Станислав Раковский
Специалист отдела исследования угроз ИБ, Positive Technologies