Izvješće o kompromitaciji git repozitorija i baze korisnika PHP projekta

Objavljeni su prvi rezultati analize incidenta vezanog uz identifikaciju dva zlonamjerna komitiranja u Git repozitoriju PHP projekta s backdoorom aktiviranim prilikom slanja zahtjeva sa posebno dizajniranim User Agent headerom. Tijekom proučavanja tragova aktivnosti napadača zaključeno je da sam poslužitelj git.php.net na kojem se nalazio git repozitorij nije hakiran, već je ugrožena baza podataka s računima developera projekta. .

Moguće je da su napadači uspjeli preuzeti korisničku bazu podataka pohranjenu u DBMS-u na poslužitelju master.php.net. Sadržaj master.php.net već je migriran na novi main.php.net poslužitelj instaliran ispočetka. Sve razvojne lozinke korištene za pristup php.net infrastrukturi su resetirane te je pokrenut proces njihove promjene putem posebnog obrasca za oporavak lozinke. Spremišta git.php.net i svn.php.net ostaju samo za čitanje (razvoj je premješten na GitHub).

Nakon otkrića prvog zlonamjernog urezivanja napravljenog preko računa Rasmusa Lerdorfa, osnivača PHP-a, pretpostavilo se da je njegov račun hakiran i Nikita Popov, jedan od ključnih PHP programera, poništio je promjene i blokirao prava urezivanja za problematičan račun. Nakon nekog vremena došlo se do spoznaje da blokiranje nema smisla, budući da bez provjere predaja digitalnim potpisom svaki sudionik s pristupom php-src repozitoriju može izvršiti promjenu zamjenom fiktivnog imena autora.

Zatim, napadači su poslali zlonamjerno uvrštavanje u ime samog Nikite. Analizom logova servisa gitolite, koji se koristi za organiziranje pristupa repozitoriju, pokušalo se utvrditi sudionika koji je stvarno izvršio promjene. Unatoč uključivanju računovodstva za sve predaje, u dnevniku nije bilo unosa za dvije zlonamjerne promjene. Postalo je jasno da je došlo do kompromisa infrastrukture, budući da su komitovi dodavani izravno, zaobilazeći vezu preko gitolita.

Poslužitelj git.php.net odmah je onemogućen, a primarni repozitorij prebačen je na GitHub. U žurbi je zaboravljeno da je za pristup repozitoriju, osim SSH-a koji koristi gitolite, postojao još jedan unos koji vam je omogućio slanje obveza putem HTTPS-a. U ovom slučaju, git-http-backend je korišten za interakciju s Gitom, a autentifikacija je izvršena pomoću Apache2 HTTP poslužitelja, koji je verificirao vjerodajnice pristupom bazi podataka smještenoj u DBMS-u na poslužitelju master.php.net. Prijava je bila dopuštena ne samo s ključevima, već i s običnom lozinkom. Analiza zapisnika http poslužitelja potvrdila je da su zlonamjerne promjene dodane putem HTTPS-a.

Proučavanjem logova otkriveno je da se napadači nisu spojili prvi put, već su prvo pokušali pronaći naziv računa, no nakon što su ga identificirali, ulogirali su se iz prvog pokušaja, tj. unaprijed su znali Rasmusove i Nikitine lozinke, ali nisu znali njihove prijave. Ako su napadači uspjeli dobiti pristup DBMS-u, nejasno je zašto nisu odmah upotrijebili ispravnu prijavu navedenu tamo. Ova razlika još nije dobila pouzdano objašnjenje. Hakiranje master.php.net smatra se najvjerojatnijim scenarijem, budući da je ovaj poslužitelj koristio vrlo stari kod i zastarjeli OS, koji dugo nije bio ažuriran i imao je nezakrpane ranjivosti.

Poduzete radnje uključuju ponovnu instalaciju poslužiteljskog okruženja master.php.net i prijenos skripti na novu verziju PHP-a 8. Kod za rad sa DBMS-om je modificiran za korištenje parametriziranih upita koji kompliciraju zamjenu SQL koda. Algoritam bcrypt koristi se za pohranjivanje hashova zaporki u bazi podataka (prije su se lozinke pohranjivale pomoću nepouzdanog hash-a MD5). Postojeće lozinke su poništene i od vas se traži da postavite novu lozinku putem obrasca za oporavak lozinke. Budući da je pristup repozitoriju git.php.net i svn.php.net putem HTTPS-a bio vezan za MD5 hashove, odlučeno je da se git.php.net i svn.php.net ostave u načinu rada samo za čitanje, te da se također premjesti sve ostali njima PECL repozitorij proširenja na GitHubu, sličan glavnom PHP repozitoriju.

Izvor: opennet.ru

Dodajte komentar