Фонд OpenSSF (Open Source Security Foundation), сформированный организацией Linux Foundation и нацеленный на повышение безопасности открытого ПО, представил открытый проект Package Analysis, развивающий систему анализа наличия вредоносного кода в пакетах. Код проекта написан на языке Go и распространяется под лицензией Apache 2.0. Предварительное сканирование рпозиториев NPM и PyPI при помощи предложенного инструментария позволило выявить более 200 ранее не замеченных вредоносных пакетов.
Основная часть выявленных проблемных пакетов манипулирует пересечением имён с внутренними непубличными зависимостями проектов (атака dependency confusion) или используют методы тайпсквотинга (назначение имён, похожих на названия популярных библиотек), а также вызывают в процессе установки скрипты, обращающиеся к внешним хостам. По мнению разработчиков Package Analysis, большая часть выявленных проблемных пакетов скорее всего создана исследователями безопасности, участвующими в программах получения вознаграждений за выявление уязвимостей (bug bountie), так как отправляемые данные ограничиваются именем пользователя и системы, и действия выполняются явно, без попыток скрыть своё поведение.
Из пакетов с вредоносной активностью отмечаются:
- PyPI-пакет discordcmd, в котором была зафиксирована отправка нетипичных запросов к raw.githubusercontent.com, Discord API и ipinfo.io. Указанный пакет загружал код бэкдора с GitHub и устанавливал его в каталог Windows-клиента Discord, после чего запускал процесс поиска токенов Discord в файловой системе и отправки их на внешний Discord-сервер, подконтрольный атакующим.
- NPM-пакет colorsss, который также пытался пересылать на внешний сервер токены от учётной записи в Discord.
- NPM-пакет @roku-web-core/ajax – в процессе установки отправлял данные о системе и запускал обработчик (reverse shell), принимающий внешние соединения и запускающий команды.
- PyPI-пакет secrevthree – запускал reverse shell при импортировании определённого модуля.
- NPM-пакет random-vouchercode-generator – после импортирования библиотеки отправлял запрос на внешний сервер, который возвращал команду и время в которое её необходимо запустить.
Работа Package Analysis сводится к анализу в исходных текстах пакетов кода для установки сетевых соединений, доступа к файлам и запуска команд. Дополнительно отслеживается изменение состояния пакетов для определения добавления вредоносных вставок в одном из выпусков изначально безобидного ПО. Для мониторинга появления новых пакетов в репозиториях и внесения изменений в ранее размещённые пакеты применяется инструментарий Package Feeds, унифицирующих работу с репозиториями NPM, PyPI, Go, RubyGems, Packagist, NuGet и Crate.
Package Analysis включает три базовых компонента, которые могут использоваться как в связке, так и по отдельности:
- Планировщик запуска работ по анализу пакетов на основе данных из Package Feeds.
- Анализатор, непосредственно проверяющий пакет и оценивающий его поведение с использованием методов статического анализа и динамической трассировки. Проверка осуществляется в изолированном окружении.
- Загрузчик, помещающий результаты проверки в хранилище BigQuery.