ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ PyPI Π²Π½Π΅Π΄Ρ€ΠΈΠ» Π½ΠΎΠ²ΡƒΡŽ систСму ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ рСпозитория 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 Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, workflow-процСссом ΠΈ Ρ…ΡΡˆΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сформирован ΠΏΠ°ΠΊΠ΅Ρ‚.

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ 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