Разработчиците на Python пакети PyPI (Python Package Index) обявиха внедряването на механизъм за цифрова атестация за удостоверяване на автентичността на публикуваните пакети, който заменя верификацията с PGP подписи. Основната разлика на атестацията е, че публикуването на пакет се удостоверява не от разработчика, а от трета страна (каталог на пакетите) след потвърждение на достоверността на публикацията чрез външен доставчик OpenID Connect (например, след проверка, че публикуваният пакет съответства на свързания с него репозиторий в GitHub или GitLab).
Системата за атестация отстранява недостатъците, присъщи на механизма за верификация с PGP подписи, който преди това беше обявен за остарял в PyPI. Това решение беше прието поради проблеми с удостоверяването на принадлежността на разработчиците към отворените PGP ключове, използвани за удостоверяване на цифровите подписи — от 1069 PGP ключа, използвани от 2020 година за формиране на подписи в PyPI, 29% от отворените ключове липсваха в големи публични сървъри ключове, а 35% от ключовете не можаха да бъдат потвърдени по време на одита. При това потвърдените 36% PGP ключове обхващаха едва 0.3% от всички подписани файлове.
В новата система използваните за заверяване на пакети подписи се генерират с помощта на краткоживеещи ефермерни ключове, генерирани на базата на пълномощия, потвърдени от доставчиците на OpenID Connect. В момента на генериране на ключовете, необходими за създаване на цифровата подпис, разработчикът се идентифицира чрез доставчик на OpenID, който потвърджава връзката му с основния проект. Инфраструктурата за цифрова атестация е изградена с помощта на системата Sigstore и инструментариума in-toto Attestation Framework.
Сред предимствата на атестацията е отсъствието на привързаност към постоянни PGP-ключове — загубата или компрометиране на частния ключ разрушава доверието в подписите, създадени въз основа на него, докато при атестация подписът се формира с привързаност към токена, потвърдващ правомощията в момента на качването на пакета и връзката между пакета и основния репозиторий с кода. Например, при публикуването на пакет, подготвен чрез GitHub Action, атестацията определя проверима и потвърдена връзка между качения файл в 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.
Източник: opennet.ru
