👩💻 В PyPI внедрил новую систему проверки подлинности пакетов
Разработчики репозитория Python-пакетов PyPI (Python Package Index)
сообщили о введении нового механизма цифровой аттестации для проверки подлинности загружаемых пакетов.
Этот механизм заменил прежнюю систему верификации с помощью
PGP-подписей. Основное отличие заключается в том, что теперь публикацию пакета подтверждает не сам разработчик, а третья сторона (каталог пакетов), основываясь на проверке через внешнего провайдера OpenID Connect. Это может включать проверку соответствия публикуемого пакета с исходным репозиторием на платформах вроде GitHub или GitLab.
Новая система решает проблемы, присущие старому методу верификации через PGP-подпись, который уже считался устаревшим. Основная трудность заключалась в проверке принадлежности открытых PGP-ключей их владельцам. Из 1069 PGP-ключей, использовавшихся с 2020 года для подписания пакетов в PyPI, 29% ключей вообще не были найдены на крупных публичных серверах ключей, а 35% оказались невозможными для подтверждения в процессе аудита. При этом подтвержденные 36% ключей покрывали всего 0.3% от общего числа подписанных файлов.
В рамках новой системы цифровые подписи формируются с использованием временных эфемерных ключей, создаваемых на основании полномочий, подтвержденных провайдером OpenID Connect.
Когда разработчик создает ключ для подписи, он проходит идентификацию через провайдера, который удостоверяет его связь с основным проектом. Эта инфраструктура основана на системах
Sigstore и in-toto Attestation Framework.
Одним из преимуществ аттестации
является отсутствие зависимости от постоянных PGP-ключей. Если
закрытый ключ теряется или подвергается атаке, все созданные с его помощью подписи становятся ненадежными. Аттестация же связывает подпись с временным токеном, который подтверждает права разработчика в момент загрузки пакета и его соответствие основному репозиторию кода.
Например, при загрузке пакета, подготовленного через GitHub Actions, аттестация гарантирует наличие связи между пакетом в PyPI и исходным хранилищем, рабочим процессом и хешем коммита, на базе которого был собран пакет.
Для мониторинга подлинности ключей и обнаружения потенциальных угроз в проектах, создающих пакеты, и самом PyPI используется централизованный публичный журнал. Чтобы обеспечить целостность данных и предотвратить изменение информации задним числом, в нем применяется структура «дерева Меркла» (Merkle Tree), где каждая ветвь проверяет все подчиненные ветви и узлы посредством древовидной схемы хеширования.
Кроме того, стоит упомянуть обнаруженный в каталог
е PyPI вредоносный пакет под названием «fabrice», который использовал технику тайпсквоттинга – назначение схожего имени, различающегося несколькими символами (например, exampl вместо example, djangoo вместо django, pyhton вместо python и так далее), чтобы замаскироваться под популярную библиотеку «fabric».
Эта библиотека насчитывает около
201 миллиона загрузок (около 7 миллионов за последний месяц). Вредоносный пакет оставался незамеченным с 2021 года и успел набрать более 37 тысяч загрузок.
Пакет «fabrice» имитировал основную функциональность оригинальной библиотеки, но также содержал код для поиска и передачи ключей доступа к AWS (Amazon Web Services), установки бэкдоров и выполнения определенных скриптов.
Активизация вредоносных компонентов происходила как в операционной системе
Linux, так и в
Windows. В случае с Linux, файлы, связанные с вредоносной активностью, загружались в каталог ~/.local/bin/vscode.
@pythonl