Raportti PHP-projektin git-arkiston ja käyttäjäkunnan kompromissista

Ensimmäiset tulokset analyysistä tapahtumasta, joka liittyi kahden haitallisen sitoumuksen tunnistamiseen PHP-projektin Git-varastossa, jonka takaovi on aktivoitu lähetettäessä pyyntöä erityisesti suunnitellun User Agent -otsikon kanssa, on julkaistu. Hyökkääjien toiminnan jälkiä tutkittaessa päädyttiin siihen tulokseen, että itse git.php.net-palvelinta, jolla git-varasto sijaitsi, ei hakkeroitu, vaan tietokanta projektin kehittäjien tilien kanssa oli vaarantunut. .

On mahdollista, että hyökkääjät pystyivät lataamaan master.php.net-palvelimen DBMS-järjestelmään tallennetun käyttäjätietokannan. Master.php.net:n sisältö on jo siirretty uudelle main.php.net-palvelimelle, joka on asennettu tyhjästä. Kaikki php.net-infrastruktuurin käyttämiseen käytetyt kehittäjän salasanat nollattiin ja niiden vaihto käynnistettiin erityisen salasanan palautuslomakkeen kautta. Git.php.net- ja svn.php.net-arkistot pysyvät vain luku -tilassa (kehitys on siirretty GitHubille).

PHP:n perustajan Rasmus Lerdorfin tilin kautta tehdyn ensimmäisen haitallisen sitoumuksen löytämisen jälkeen oletettiin, että hänen tilinsä oli hakkeroitu ja Nikita Popov, yksi tärkeimmistä PHP-kehittäjistä, peruutti muutokset ja esti sitoutumisoikeudet ongelmallinen tili. Jonkin ajan kuluttua tuli ymmärrys, että estämisessä ei ollut järkeä, koska ilman digitaalisen allekirjoituksen vahvistamista, jokainen osallistuja, jolla on pääsy php-src-tietovarastoon, voisi tehdä muutoksen korvaamalla kuvitteellisen tekijän nimen.

Seuraavaksi hyökkääjät lähettivät haitallisen sitoumuksen Nikitan itsensä puolesta. Analysoimalla arkistoihin pääsyn järjestämiseen käytetyn gitolite-palvelun lokeja yritettiin määrittää osallistuja, joka todella teki muutokset. Huolimatta kaikkien sitoumusten kirjanpidosta, lokissa ei ollut merkintöjä kahdesta haitallisesta muutoksesta. Kävi selväksi, että infrastruktuurissa oli kompromissi, koska sitoumukset lisättiin suoraan, ohittaen yhteyden gitoliitin kautta.

Git.php.net-palvelin poistettiin välittömästi käytöstä ja ensisijainen arkisto siirrettiin GitHubille. Kiireessä unohdettiin, että arkistoon pääsyä varten oli gitolitea käyttävän SSH:n lisäksi toinen syöte, jonka avulla voit lähettää sitoumuksia HTTPS:n kautta. Tässä tapauksessa git-http-taustaa käytettiin vuorovaikutukseen Gitin kanssa, ja todennus suoritettiin Apache2 HTTP-palvelimella, joka vahvisti valtuustiedot käyttämällä master.php.net-palvelimen DBMS:ssä isännöityä tietokantaa. Kirjautuminen sallittiin paitsi avaimilla, myös tavallisella salasanalla. http-palvelimen lokien analyysi vahvisti, että haitallisia muutoksia lisättiin HTTPS:n kautta.

Lokeja tutkiessa paljastui, että hyökkääjät eivät muodostaneet yhteyttä ensimmäisellä kerralla, vaan yrittivät aluksi löytää tilin nimen, mutta tunnistettuaan sen kirjautuivat sisään ensimmäisellä kerralla, ts. he tiesivät Rasmuksen ja Nikitan salasanat etukäteen, mutta eivät tienneet heidän kirjautumistunnuksiaan. Jos hyökkääjät pääsivät DBMS:ään, on epäselvää, miksi he eivät heti käyttäneet oikeaa siellä määritettyä kirjautumistunnusta. Tämä ristiriita ei ole vielä saanut luotettavaa selitystä. Master.php.net-sivuston hakkerointia pidetään todennäköisimpänä skenaariona, koska tämä palvelin käytti erittäin vanhaa koodia ja vanhentunutta käyttöjärjestelmää, jota ei ollut päivitetty pitkään aikaan ja jossa oli korjaamattomia haavoittuvuuksia.

Toimenpiteisiin sisältyi master.php.net-palvelinympäristön uudelleenasennus ja komentosarjojen siirto PHP 8:n uuteen versioon. DBMS:n kanssa työskentelyn koodia muutettiin käyttämään parametroituja kyselyitä, jotka vaikeuttavat SQL-koodin korvaamista. Bcrypt-algoritmia käytetään salasanojen hajautusten tallentamiseen tietokantaan (aiemmin salasanat tallennettiin epäluotettavalla MD5-tiivisteellä). Nykyiset salasanat nollataan ja sinua kehotetaan asettamaan uusi salasana salasanan palautuslomakkeen kautta. Koska pääsy git.php.net- ja svn.php.net-tietovarastoihin HTTPS:n kautta oli sidottu MD5-tiivisteisiin, päätettiin jättää git.php.net ja svn.php.net vain luku -tilaan ja siirtää myös kaikki loput heille PECL-laajennusvarastot GitHubissa, samanlaiset kuin PHP:n pääarkisto.

Lähde: opennet.ru

Lisää kommentti