Гит репозиторийинин жана PHP долбоорунун колдонуучу базасынын компромисси жөнүндө отчет

Атайын иштелип чыккан User Agent аталышы менен суроо-талапты жөнөтүүдө иштетилген бэкдору бар PHP долбоорунун Git репозиторийинде эки зыяндуу кылмыштарды аныктоого байланышкан инциденттин анализинин алгачкы жыйынтыктары жарыяланды. Чабуулчулардын иш-аракеттеринин изин изилдөөнүн жүрүшүндө git репозиторий жайгашкан git.php.net серверинин өзү бузулган эмес, бирок долбоорду иштеп чыгуучулардын аккаунттары менен маалымат базасы бузулган деген тыянак чыгарылган. .

Мүмкүн, чабуулчулар master.php.net серверинде МББда сакталган колдонуучунун маалымат базасын жүктөй алышкан. master.php.net мазмуну мурунтан эле нөлдөн баштап орнотулган жаңы main.php.net серверине көчүрүлгөн. php.net инфраструктурасына кирүү үчүн колдонулган бардык иштеп чыгуучунун сырсөздөрү баштапкы абалга келтирилген жана аларды өзгөртүү процесси атайын сырсөздү калыбына келтирүү формасы аркылуу башталган. git.php.net жана svn.php.net репозиторийлери окуу үчүн гана калууда (иштеп чыгуу GitHub'ка жылдырылды).

РНРдин негиздөөчүсү Расмус Лердорфтун аккаунту аркылуу жасалган биринчи зыяндуу иш табылгандан кийин, анын аккаунту хакердик чабуулга кабылган деп болжолдонгон жана PHPдин негизги иштеп чыгуучуларынын бири Никита Попов өзгөртүүлөрдү артка кайтарып, милдеттенмелерди аткаруу укугун бөгөттөп койгон. көйгөйлүү эсеп. Бир нече убакыт өткөндөн кийин, бөгөттөө мааниси жок экенин түшүндүм, анткени санариптик кол тамганы колдонуу менен милдеттенмелерди текшербестен, php-src репозиторийине кирүү мүмкүнчүлүгү бар каалаган катышуучу автордун жасалма атын алмаштыруу менен өзгөртүү киргизе алат.

Андан кийин кол салгандар Никитанын өзүнүн атынан кара ниеттик билдирүү жөнөтүшкөн. Репозиторийлерге кирүүнү уюштуруу үчүн колдонулган гитолит кызматынын журналдарын талдоо менен, чындыгында өзгөртүүлөрдү киргизген катышуучуну аныктоо аракети жасалды. Бардык милдеттенмелерди эсепке алуу киргизилгенине карабастан, эки зыяндуу өзгөртүүлөр журналында эч кандай жазуулар болгон эмес. Инфраструктуранын компромисси бар экени айкын болду, анткени гитолит аркылуу байланышты айланып өтүү менен милдеттенмелер түз кошулду.

git.php.net сервери дароо өчүрүлүп, негизги репозиторий GitHubга өткөрүлүп берилди. Шашылыш менен, репозиторийге кирүү үчүн SSH гитолиттен тышкары, HTTPS аркылуу милдеттенмелерди жөнөтүүгө мүмкүндүк берген дагы бир киргизүү бар экени унутулуп калды. Бул учурда, git-http-backend Git менен өз ара аракеттенүү үчүн колдонулган жана аутентификация Apache2 HTTP серверинин жардамы менен аткарылган, ал master.php.net сервериндеги МББда жайгаштырылган маалымат базасына кирүү аркылуу эсептик дайындарды текшерген. Кирүүгө ачкычтар менен гана эмес, кадимки сырсөз менен да уруксат берилген. http серверинин журналдарын талдоо зыяндуу өзгөртүүлөр HTTPS аркылуу кошулганын тастыктады.

Журналдарды изилдеп жатканда, чабуулчулар биринчи жолу туташпай, адегенде аккаунттун атын табууга аракет кылганы, бирок аны аныктагандан кийин, биринчи аракетте киргени, б.а. алар Расмус менен Никитанын паролдорун алдын ала билишкен, бирок алардын логиндерин билишкен эмес. Эгерде чабуулчулар DBMSке кире алган болсо, анда алар эмне үчүн ошол жерде көрсөтүлгөн туура логинди дароо колдонбогону түшүнүксүз. Бул келишпестик азырынча ишенимдүү түшүндүрмө ала элек. Master.php.net сайтын бузуп алуу эң мүмкүн болгон сценарий катары каралат, анткени бул сервер өтө эски кодду жана көптөн бери жаңыртылбаган жана чабал жерлери бар эскирген ОСти колдонгон.

Аткарылган иш-аракеттерге master.php.net сервер чөйрөсүн кайра орнотуу жана PHP 8дин жаңы версиясына скрипттерди өткөрүп берүү кирет. DBMS менен иштөө коду SQL кодун алмаштырууну татаалдаштырган параметрлештирилген сурамдарды колдонуу үчүн модификацияланган. bcrypt алгоритми сырсөз хэштерин маалымат базасында сактоо үчүн колдонулат (мурда сырсөздөр ишенимсиз MD5 хэштин жардамы менен сакталган). Учурдагы сырсөздөр баштапкы абалга келтирилет жана сизден сырсөздү калыбына келтирүү формасы аркылуу жаңы сырсөз коюу сунушталат. HTTPS аркылуу git.php.net жана svn.php.net репозиторийлерине кирүү MD5 хэштерине байлангандыктан, git.php.net жана svn.php.netти окуу үчүн гана режимде калтыруу, ошондой эле бардыгын жылдыруу чечими кабыл алынды. калгандары GitHub'дагы PECL кеңейтүү репозиторийлери, негизги PHP репозиторийине окшош.

Source: opennet.ru

Комментарий кошуу