Исследователь обнаружил бэкдор, маскирующийся под легитимный Go-пакет, который используют тысячи организаций. Вредонос оставался незамеченным несколько лет и сохранился в кеше Go Module Mirror.
Аналитик из компании Socket Security Кирилл Бойченко рассказал об атаке, связанной с модулем BoltDB, зависимость от которого имеют более 8000 других пакетов и который используют такие крупные организации, как Shopify и Heroku.
BoltDB (github.com/boltdb/bolt) был создан девять лет назад, но год спустя автор проекта объявил о завершении разработки, и с тех пор BoltDB не обновлялся.
Неизвестный злоумышленник использовал тайпсквоттинг, выдавая свой вредоносный пакет за BoltDB. Если разработчик случайно перепутает легитимный пакет с подделкой, расположенной по адресу github[.]com/boltdb-go/bolt, он загрузит бэкдор, позволяющий удаленно выполнить произвольный код.
Бойченко пишет, что вредоносная версия все еще доступна для поиска через Go Module Proxy и оставалась незамеченной в течение трех лет. Только недавно исследователь направил запрос на ее удаление.
К счастью, малварь осталась незамеченной и большинством мейнтейнеров, так как за прошедшие годы было зафиксировано всего два случая импорта бэкдора. Оба были связаны с криптовалютным проектом, у которого насчитывается всего семь подписчиков.
Невозможно узнать, сколько именно раз был загружен вредоносный пакет, поскольку Go не отслеживает эту статистику. Но если посмотреть на страницу подделки на GitHub, можно заметить, что у нее нет ни звезд, ни форков, и за три года не было сделано ни одного пулл-реквеста.
Однако Бойченко подчеркивает, что злоумышленник злоупотреблял системой Go-пакетов таким способом, который требует более внимательного изучения со стороны разработчиков.
Вредоносный пакет boltdb-go был опубликован на GitHub в ноябре 2021 года. При первом запросе Go Module Mirror кешировал его и сделал доступным на неопределенный срок. После этого автор вредоносного проекта изменил Git-теги проекта, указав на легитимную версию пакета (boltdb), чтобы при ручном анализе boltdb-go не обнаруживалось никаких признаков мошенничества. Хотя вредоносная версия по-прежнему распространялась среди ничего не подозревающих разработчиков.
«Эта атака — один из первых задокументированных случаев использования злоумышленником бессрочного кеширования в Go Module Mirror, — объясняет Бойченко. — Хотя о предыдущих случаях не сообщалось публично, этот инцидент подчеркивает острую необходимость повышения осведомленности о подобных тактиках персистенции в будущем».
По словам эксперта, неизменяемые модули (immutable modules) с одной стороны повышают безопасность, но с другой — создают потенциальные векторы для злоупотреблений. Поэтому разработчикам и специалистам по безопасности следует отслеживать атаки, использующие кешированные версии модулей для уклонения от обнаружения.
По сути, неизменяемые модули защищают популярные пакеты от несанкционированных изменений. Это положительно сказывается на безопасности экосистемы и лежит в основе многих функций Go, которые, по мнению разработчиков, помогают смягчить атаки на цепочки поставок. Но также это означает, что если вредоносная версия (такая как boltdb-go) проникнет в кеш, она останется там навсегда.
«Чтобы снизить риски атак на цепочки поставок, разработчикам следует проверять целостность пакетов перед установкой, анализировать зависимости на предмет аномалий и использовать защитные инструменты, которые проверяют установленный код на более глубоком уровне, — заключает Бойченко. — Чтобы экосистема модулей Go оставалась устойчивой к подобным атакам, необходимо постоянно проявлять бдительность, совершенствовать механизмы безопасности и лучше понимать, как злоумышленники эксплуатируют каналы распространения ПО».