Вредоносный пакеты Go имитируют библиотеку UUID от Google для кражи данных

information security

Исследователи из команды Socket Threat Research обнаружили два связанных вредоносных пакета для языка программирования Go, которые более четырёх лет скрывались в экосистеме, маскируясь под популярную библиотеку для генерации UUID. Пакеты "github[.]com/bpoorman/uuid" и "github[.]com/bpoorman/uid" использовали тактику "типосквоттинга" (typosquatting), имитируя легитимные библиотеки "github.com/google/uuid" и "github.com/pborman/uuid". При этом они сохраняли заявленный функционал, но добавляли скрытую функцию-бэкдор для шифрования и передачи данных на внешний сервис.

Описание

Первый пакет был опубликован ещё в мае 2021 года и до сих пор доступен на официальном сайте для обнаружения пакетов Go "pkg.go.dev", а также через публичное зеркало модулей "proxy.golang.org". Второй пакет был удалён с "pkg.go.dev", но также остаётся кэширован в публичном зеркале. Оба пакета были переданы команде безопасности Go для удаления, а аккаунт издателя на GitHub - для блокировки.

Библиотеки UUID являются критически важным компонентом в экосистеме Go. Оригинальные пакеты от Google импортируются более чем 100 000 других пакетов и служат стандартом де-факто для создания уникальных идентификаторов пользователей, сессий, заказов и записей в базах данных. Именно эта популярность делает их привлекательной мишенью для атак на цепочку поставок (supply chain attacks).

Злоумышленники скопировали не только название, но и структуру легитимных библиотек. При беглом изучении README и API пакет выглядит совершенно нормально. Единственным видимым дополнением стала вспомогательная функция с обманчивым названием "Valid" ("Проверить"). На практике эта функция не выполняет валидацию, а является примитивом для эксфильтрации данных. Она шифрует переданные ей аргументы с использованием AES и отправляет их на сервис "dpaste.com" - аналог Pastebin - используя вшитый в код токен доступа API.

Анализ кода показывает, что функция "Valid" принимает строку "s" и байтовый срез "dst", объединяет их, шифрует алгоритмом AES в режиме CFB и передаёт зашифрованные данные на внешний сервер через HTTPS POST-запрос. Ключ шифрования формируется из жёстко заданного префикса и случайного суффикса. Важно отметить, что функция подавляет практически все возможные ошибки и использует короткий таймаут для HTTP-клиента. Это позволяет ей работать по принципу "отправил и забыл", оставаясь незаметной даже в высоконагруженных сервисах.

Угроза заключается в том, что функция крадёт ровно те данные, которые передаёт в неё разработчик. Если в коде приложения "Valid" используется для "проверки" идентификатора пользователя, email, токена сессии или конфигурационного параметра, эта информация будет украдена. Особенно опасным может быть использование такого пакета в средах непрерывной интеграции (CI) или развёртывания (CD), где он может получить доступ к долгоживущим токенам, ключам подписи или другим критическим секретам.

Аккаунт злоумышленника на GitHub под именем "bpoorman" имеет минимальный профиль и содержит всего один публичный репозиторий. Выбор публичного сервиса для вставок кода ("dpaste") в качестве точки сбора данных является осознанной тактикой. Это позволяет злоумышленнику смешать вредоносный трафик с обычной активностью разработчиков, избежать необходимости поддерживать собственную инфраструктуру и усложнить обнаружение утечки средствами защиты предприятия.

Данный инцидент демонстрирует растущую изощрённость атак на цепочки поставок. Эксперты предупреждают, что злоумышленники могут применять аналогичные схемы, маскируясь под другие ключевые утилиты для работы с логами, HTTP, JSON и т.д. Для защиты рекомендуется относиться к каждому новому зависимому пакету как к недоверенному, пока не будет доказано обратное. Командам следует тщательно проверять пути импорта, анализировать код на предмет неожиданных сетевых подключений или криптографических операций и регулярно сканировать проекты на наличие пакетов-имитаторов. Специальное внимание следует уделять средам сборки и развёртывания.

В качестве мер противодействия исследователи предлагают использовать инструменты безопасности, которые интегрируются в процесс разработки. Например, сканирование pull request'ов в реальном времени может помешать слиянию кода с подозрительными зависимостями. CLI-утилиты позволяют блокировать установку пакетов с рискованным поведением, таким как неожиданный сетевой доступ или выполнение скриптов после установки. Расширения для браузера могут предупреждать разработчиков о подозрительных пакетах прямо при просмотре документации. Внедрение подобных инструментов в ежедневные рабочие процессы помогает снизить риск случайного использования враждебных пакетов.

Индикаторы компрометации

Malicious Go Packages

  • github.com/bpoorman/uuid
  • github.com/bpoorman/uid

Threat Actor’s GitHub

  • github.com/bpoorman

AES Key Prefix String

  • 57a475a22da17139

HTTP header

  • Authorization: Bearer 5bd4e8cb8165d4d2
Комментарии: 0