Verslag oor die kompromie van die git-bewaarplek en gebruikersbasis van die PHP-projek

Die eerste resultate van die ontleding van 'n voorval wat verband hou met die identifikasie van twee kwaadwillige commits in die Git-bewaarplek van 'n PHP-projek met 'n agterdeur wat geaktiveer is wanneer 'n versoek met 'n spesiaal ontwerpte User Agent-kopskrif gestuur word, is gepubliseer. In die loop van die bestudering van die spore van die aanvallers se aktiwiteite, is tot die gevolgtrekking gekom dat die git.php.net-bediener self, waarop die git-bewaarplek geleë was, nie gekap is nie, maar die databasis met die rekeninge van die projekontwikkelaars is gekompromitteer .

Dit is moontlik dat die aanvallers die gebruikersdatabasis wat in die DBBS gestoor is op die master.php.net-bediener kon aflaai. Die inhoud van master.php.net is reeds gemigreer na die nuwe main.php.net-bediener wat van nuuts af geïnstalleer is. Alle ontwikkelaarwagwoorde wat gebruik is om toegang tot die php.net-infrastruktuur te verkry, is teruggestel en die proses om dit te verander is deur 'n spesiale wagwoordherstelvorm begin. Die git.php.net- en svn.php.net-bewaarplekke bly leesalleen (ontwikkeling is na GitHub geskuif).

Na die ontdekking van die eerste kwaadwillige verbintenis wat gemaak is deur die rekening van Rasmus Lerdorf, die stigter van PHP, is daar aanvaar dat sy rekening gekap is en Nikita Popov, een van die sleutel PHP-ontwikkelaars, het die veranderinge teruggedraai en pleegregte vir die problematiese rekening. Na 'n geruime tyd het die besef gekom dat die blokkering nie sin maak nie, aangesien sonder verifikasie van verbintenisse met 'n digitale handtekening, enige deelnemer met toegang tot die php-src-bewaarplek 'n verandering kan maak deur 'n fiktiewe outeurnaam te vervang.

Vervolgens het die aanvallers 'n kwaadwillige pleeg namens Nikita self gestuur. Deur die logs van die gitolite-diens, wat gebruik word om toegang tot bewaarplekke te organiseer, te ontleed, is 'n poging aangewend om die deelnemer te bepaal wat werklik die veranderinge gemaak het. Ten spyte van die insluiting van rekeningkunde vir alle verpligtinge, was daar geen inskrywings in die logboek vir twee kwaadwillige veranderinge nie. Dit het duidelik geword dat daar 'n kompromie van die infrastruktuur was, aangesien commits direk bygevoeg is, wat die verbinding via gitolite omseil.

Die git.php.net-bediener is onmiddellik gedeaktiveer, en die primêre bewaarplek is na GitHub oorgedra. Daar is haastig vergeet dat om toegang tot die bewaarplek te verkry, benewens SSH met behulp van gitolite, daar nog 'n invoer was wat jou toegelaat het om commits via HTTPS te stuur. In hierdie geval is die git-http-backend gebruik om met Git te kommunikeer, en verifikasie is uitgevoer met behulp van die Apache2 HTTP-bediener, wat geloofsbriewe geverifieer het deur toegang te verkry tot die databasis wat in die DBMS op die master.php.net-bediener aangebied word. Aanmelding is nie net met sleutels toegelaat nie, maar ook met 'n gewone wagwoord. Ontleding van die http-bedienerlogboeke het bevestig dat kwaadwillige veranderinge via HTTPS bygevoeg is.

By die bestudering van die logs is dit aan die lig gebring dat die aanvallers nie die eerste keer verbind het nie, maar aanvanklik probeer het om die rekeningnaam te vind, maar nadat hulle dit geïdentifiseer het, het hulle met die eerste probeerslag aangemeld, m.a.w. hulle het Rasmus en Nikita se wagwoorde vooraf geken, maar nie hul logins nie. As die aanvallers toegang tot die DBBS kon verkry, is dit onduidelik hoekom hulle nie dadelik die korrekte aanmelding gebruik het wat daar gespesifiseer is nie. Hierdie teenstrydigheid het nog nie 'n betroubare verduideliking gekry nie. Die hack van master.php.net word as die mees waarskynlike scenario beskou, aangesien hierdie bediener baie ou kode en 'n verouderde bedryfstelsel gebruik het, wat vir 'n lang tyd nie opgedateer is nie en onverwerkte kwesbaarhede gehad het.

Die aksies wat geneem is, sluit in die herinstallering van die master.php.net-bedieneromgewing en die oordrag van skrifte na die nuwe weergawe van PHP 8. Die kode vir die werk met die DBMS is gewysig om geparameteriseerde navrae te gebruik wat die vervanging van SQL-kode bemoeilik. Die bcrypt-algoritme word gebruik om wagwoord-hashes in die databasis te stoor (voorheen is wagwoorde met behulp van 'n onbetroubare MD5-hash gestoor). Bestaande wagwoorde word teruggestel en jy word gevra om 'n nuwe wagwoord in te stel deur die wagwoordherstelvorm. Aangesien toegang tot die git.php.net- en svn.php.net-bewaarplekke via HTTPS aan MD5-hashes gekoppel was, is daar besluit om git.php.net en svn.php.net in leesalleenmodus te laat, en ook alle oorblywende PECL-uitbreidingsbewaarplekke op GitHub, soortgelyk aan die hoof PHP-bewaarplek.

Bron: opennet.ru

Voeg 'n opmerking