ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ git-рСпозитория ΠΈ Π±Π°Π·Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° PHP

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π°, связанного с выявлСниСм Π² Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° PHP Π΄Π²ΡƒΡ… врСдоносных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с бэкдором, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ запроса со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ User Agent. Π’ Ρ…ΠΎΠ΄Π΅ изучСния слСдов Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ… Π±Ρ‹Π» сдСлан Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ нСпосрСдствСнно сСрвСр git.php.net, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ Π±Ρ‹Π» Π²Π·Π»ΠΎΠΌΠ°Π½, Π½ΠΎ Π±Ρ‹Π»Π° скомпромСтирована Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… с ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹ΠΌΠΈ записями Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

НС ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΈ смогли Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ…Ρ€Π°Π½ΠΈΠ²ΡˆΡƒΡŽΡΡ Π² Π‘Π£Π‘Π” Π½Π° сСрвСрС master.php.net. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ master.php.net ΡƒΠΆΠ΅ пСрСнСсСно Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр main.php.net, установлСнный с нуля. ВсС ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², использовавшиСся для доступа ΠΊ инфраструктурС php.net, Π±Ρ‹Π»ΠΈ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ процСсс ΠΈΡ… смСны Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ восстановлСния пароля. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ git.php.net ΠΈ svn.php.net ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ доступны Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° пСрСнСсСна Π½Π° GitHub).

ПослС обнаруТСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ врСдоносного ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΡΠΎΠ²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π½ΡƒΡŽ запись Расмуса Π›Π΅Ρ€Π΄ΠΎΡ€Ρ„Π°, основатСля PHP, Π±Ρ‹Π»ΠΎ сдСлано ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π·Π»ΠΎΠΌΠ°Π½ Π΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ Никита Попов, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² PHP, ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ» измСнСния ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» ΠΏΡ€Π°Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записи. Π§Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΏΡ€ΠΈΡˆΠ»ΠΎ осознаниС, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π»Π° смысла, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Π΅Π· Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи, любой участник с доступом ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ php-src ΠΌΠΎΠ³ внСсти ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, подставив Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ имя Π°Π²Ρ‚ΠΎΡ€Π°.

Π‘Π»Π΅Π΄ΠΎΠΌ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ врСдоносный ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ самого Никиты. Π§Π΅Ρ€Π΅Π· Π°Π½Π°Π»ΠΈΠ· Π»ΠΎΠ³ΠΎΠ² сСрвиса gitolite, примСняСмого для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ рСпозиториям, Π±Ρ‹Π»Π° прСдпринята ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° опрСдСлСния участника, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ внёс измСнСния. НСсмотря Π½Π° Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΉ ΡƒΡ‡Ρ‘Ρ‚ всСх ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², для Π΄Π²ΡƒΡ… врСдоносных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π»ΠΎΠ³Π΅ Π½Π΅ оказалось записСй. Π‘Ρ‚Π°Π»ΠΎ ясно, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто компромСтация инфраструктуры, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π² ΠΎΠ±Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· gitolite.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Π±Ρ‹Π» ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ сСрвСр git.php.net, Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π½Π° GitHub. Π’ΠΏΠΎΠΏΡ‹Ρ…Π°Ρ… Π±Ρ‹Π»ΠΎ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΈΠ· Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для доступа ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΡ€ΠΎΠΌΠ΅ SSH с использованиСм gitolite имСлся Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Ρ…ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· HTTPS. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС для взаимодСйствия с Git использовался бэкСнд git-http-backend, Π° аутСнтификация Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ HTTP-сСрвСра Apache2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСрял полномочия Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½ΠΎΠΉ Π² Π‘Π£Π‘Π” Π½Π° сСрвСрС master.php.net. Допускался Π²Ρ…ΠΎΠ΄ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ, Π½ΠΎ ΠΈ ΠΏΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ. Π Π°Π·Π±ΠΎΡ€ Π»ΠΎΠ³ΠΎΠ² http-сСрвСра, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ», Ρ‡Ρ‚ΠΎ врСдоносныС измСнСния Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· HTTPS.

ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² Π±Ρ‹Π»ΠΎ выявлСно, Ρ‡Ρ‚ΠΎ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π΅ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, Π° Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ имя ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записи, Π½ΠΎ послС опрСдСлСния вошли с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ, Ρ‚.Π΅. ΠΎΠ½ΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π»ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Расмуса ΠΈ Никиты, Π½ΠΎ Π½Π΅ Π·Π½Π°Π»ΠΈ ΠΈΡ… Π»ΠΎΠ³ΠΈΠ½Ρ‹. Если Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠ΅ смогли ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π‘Π£Π‘Π”, Ρ‚ΠΎ нСпонятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ сразу Π½Π΅ использовали ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π»ΠΎΠ³ΠΈΠ½. Данная нСсостыковка ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° достовСрного объяснСния. Π’Π·Π»ΠΎΠΌ master.php.net рассматриваСтся ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятный сцСнарий, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ сСрвСрС Π±Ρ‹Π» использован ΠΎΡ‡Π΅Π½ΡŒ старый ΠΊΠΎΠ΄ ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ ОБ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π²Π½ΠΎ Π½Π΅ обновлялись ΠΈ ΠΈΠΌΠ΅Π»ΠΈ нСисправлСнныС уязвимости.

Из прСдпринятых дСйствий отмСчаСтся пСрСустановка окруТСния сСрвСра master.php.net ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ скриптов Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ PHP 8. Код для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π£Π‘Π” ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½ для использования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… запросов, ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‰ΠΈΡ… подстановку SQL-ΠΊΠΎΠ΄Π°. Для хранСния Ρ…ΡΡˆΠ΅ΠΉ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² Π‘Π” задСйствован Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bcrypt (Ρ€Π°Π½Π΅Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ с использованиСм Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ Ρ…ΡΡˆΠ° MD5). Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΎΡ€ΠΌΡƒ восстановлСния пароля. Π’Π°ΠΊ ΠΊΠ°ΠΊ доступ ΠΊ рСпозиториям git.php.net ΠΈ svn.php.net ΠΏΠΎ HTTPS Π±Ρ‹Π» привязан ΠΊ Ρ…ΡΡˆΠ°ΠΌ MD5, Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ git.php.net ΠΈ svn.php.net Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСнСсти всС ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Π½ΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ PECL Π½Π° GitHub, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с основным Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ PHP.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ