Izvještaj o kompromitovanju git repozitorija i korisničke baze PHP projekta

Objavljeni su prvi rezultati analize incidenta koji se odnosi na identifikaciju dva zlonamerna urezivanja u Git repozitorijumu PHP projekta sa aktiviranim backdoor-om prilikom slanja zahteva sa posebno dizajniranim zaglavljem User Agent-a. U toku proučavanja tragova aktivnosti napadača, zaključeno je da sam server git.php.net, na kojem se nalazi git repozitorijum, nije hakovan, već je kompromitovana baza podataka sa nalozima programera projekta. .

Moguće je da su napadači uspjeli preuzeti korisničku bazu podataka pohranjenu u DBMS-u na server master.php.net. Sadržaj master.php.net je već migriran na novi main.php.net server instaliran od nule. Sve lozinke programera koje se koriste za pristup php.net infrastrukturi su resetirane i proces njihove promjene je pokrenut putem posebnog obrasca za oporavak lozinke. Spremišta git.php.net i svn.php.net ostaju samo za čitanje (razvoj je premešten na GitHub).

Nakon otkrića prvog zlonamernog urezivanja napravljenog preko naloga Rasmusa Lerdorfa, osnivača PHP-a, pretpostavilo se da je njegov nalog hakovan, a Nikita Popov, jedan od ključnih PHP programera, vratio je promene i blokirao prava na urezivanje za problematični račun. Nakon nekog vremena došlo se do saznanja da blokiranje nema smisla, jer bez verifikacije urezivanja pomoću digitalnog potpisa, svaki učesnik sa pristupom php-src repozitorijumu može da izvrši promenu zamenom izmišljenog imena autora.

Zatim su napadači poslali zlonamerno urezivanje u ime samog Nikite. Analizom logova servisa gitolite, koji se koriste za organizovanje pristupa repozitorijumima, pokušano je da se utvrdi ko je učesnik zaista izvršio izmene. Uprkos uključivanju obračuna za sva urezivanja, nije bilo unosa u dnevnik za dvije zlonamjerne promjene. Postalo je jasno da je došlo do kompromisa infrastrukture, jer su urezivanja dodavana direktno, zaobilazeći vezu preko gitolita.

Server git.php.net je odmah onemogućen, a primarno spremište je prebačeno na GitHub. U žurbi je zaboravljeno da je za pristup spremištu, pored SSH-a pomoću gitolite-a, postojao još jedan ulaz koji je omogućio slanje urezivanja putem HTTPS-a. U ovom slučaju, git-http-backend je korišćen za interakciju sa Gitom, a autentifikacija je izvršena pomoću Apache2 HTTP servera, koji je verifikovao akreditive pristupom bazi podataka hostovanoj u DBMS-u na serveru master.php.net. Prijava je bila dozvoljena ne samo sa ključevima, već i sa običnom lozinkom. Analiza logova http servera potvrdila je da su zlonamjerne promjene dodane putem HTTPS-a.

Prilikom proučavanja logova otkriveno je da se napadači nisu prvi put povezali, već su u početku pokušali da pronađu naziv naloga, ali nakon što su ga identifikovali, u prvom pokušaju su se prijavili, tj. unaprijed su znali Rasmusove i Nikitine lozinke, ali nisu znali njihove logine. Ako su napadači uspjeli da dobiju pristup DBMS-u, nejasno je zašto nisu odmah koristili ispravnu prijavu koja je tamo navedena. Ovo neslaganje još nije dobilo pouzdano objašnjenje. Hak na master.php.net se smatra najverovatnijim scenarijem, pošto je ovaj server koristio veoma stari kod i zastareli OS, koji nije bio ažuriran dugo vremena i imao je nezakrpljene ranjivosti.

Poduzete radnje uključuju ponovnu instalaciju serverskog okruženja master.php.net i prijenos skripti na novu verziju PHP-a 8. Kod za rad sa DBMS-om je modificiran da koristi parametrizovane upite koji komplikuju zamjenu SQL koda. Bcrypt algoritam se koristi za pohranjivanje heševa lozinki u bazi podataka (ranije su lozinke bile pohranjene korištenjem nepouzdanog MD5 heša). Postojeće lozinke se resetuju i od vas se traži da postavite novu lozinku putem obrasca za oporavak lozinke. Pošto je pristup repozitorijumu git.php.net i svn.php.net putem HTTPS-a bio vezan za MD5 hešove, odlučeno je da se git.php.net i svn.php.net ostave u režimu samo za čitanje, a da se sve preostala su im PECL ekstenzija spremišta na GitHub-u, slično glavnom PHP spremištu.

izvor: opennet.ru

Dodajte komentar