Jelentés a PHP projekt git tárházának és felhasználói bázisának kompromisszumáról

Megjelentek egy olyan incidens elemzésének első eredményei, amely egy olyan PHP projekt Git tárházában történt két rosszindulatú commit azonosításával kapcsolatos, amelynek hátsó ajtója egy speciálisan kialakított User Agent fejléccel rendelkező kérés elküldésekor aktiválódott. A támadók tevékenységének nyomainak tanulmányozása során arra a következtetésre jutottak, hogy magát a git.php.net szervert, amelyen a git repository található, nem törték fel, hanem a projektfejlesztők fiókjait tartalmazó adatbázist kompromittálták. .

Lehetséges, hogy a támadók a master.php.net kiszolgálón lévő DBMS-ben tárolt felhasználói adatbázist tudták letölteni. A master.php.net tartalma már áttelepült a nulláról telepített új main.php.net szerverre. A php.net infrastruktúrához való hozzáféréshez használt összes fejlesztői jelszót alaphelyzetbe állítottuk, és egy speciális jelszó-helyreállítási űrlapon indították el a módosításukat. A git.php.net és svn.php.net adattárak csak olvashatóak maradnak (a fejlesztés átkerült a GitHubba).

Rasmus Lerdorf, a PHP alapítója fiókján keresztül végrehajtott első rosszindulatú elkövetés felfedezése után azt feltételezték, hogy fiókját feltörték, és Nikita Popov, az egyik legfontosabb PHP fejlesztő visszavonta a változtatásokat, és blokkolta a végrehajtási jogokat a problémás fiók. Egy idő után jött a felismerés, hogy a letiltásnak nincs értelme, hiszen a véglegesítések digitális aláírással történő ellenőrzése nélkül a php-src adattárhoz hozzáféréssel rendelkező résztvevők fiktív szerzői név helyettesítésével változtathatnak.

Ezután a támadók rosszindulatú kötelezettséget küldtek Nikita nevében. A repozitóriumokhoz való hozzáférés megszervezésére szolgáló gitolite szolgáltatás naplóinak elemzésével megkísérelték meghatározni, hogy a változtatást ténylegesen végrehajtó résztvevőt. Annak ellenére, hogy az összes véglegesítés elszámolása szerepelt, a naplóban nem szerepelt két rosszindulatú módosítás. Világossá vált, hogy az infrastruktúra kompromisszumról van szó, mivel a commitokat közvetlenül adták hozzá, megkerülve a gitolite-on keresztüli kapcsolatot.

A git.php.net szervert azonnal letiltották, és az elsődleges adattárat áthelyezték a GitHubba. A sietségben elfelejtették, hogy a repository eléréséhez a gitolitot használó SSH mellett volt egy másik bemenet is, amivel HTTPS-en keresztül lehetett commitokat küldeni. Ebben az esetben a git-http-backendet használták a Git-tel való interakcióhoz, és a hitelesítést az Apache2 HTTP-kiszolgáló segítségével végezték el, amely a master.php.net kiszolgálón lévő DBMS-ben tárolt adatbázis elérésével ellenőrizte a hitelesítési adatokat. A belépés nem csak kulcsokkal, hanem normál jelszóval is megengedett volt. A http-kiszolgáló naplóinak elemzése megerősítette, hogy rosszindulatú módosítások történtek HTTPS-en keresztül.

A naplók áttanulmányozása során kiderült, hogy a támadók nem az első alkalommal csatlakoztak, hanem eleinte a fiók nevét próbálták megkeresni, de annak azonosítása után már az első próbálkozásra bejelentkeztek, i. előre tudták Rasmus és Nikita jelszavát, de nem tudták a bejelentkezési adataikat. Ha a támadók hozzá tudtak férni a DBMS-hez, nem világos, hogy miért nem használták azonnal az ott megadott helyes bejelentkezést. Ez az eltérés még nem kapott megbízható magyarázatot. A master.php.net feltörését tartják a legvalószínűbb forgatókönyvnek, mivel ez a szerver nagyon régi kódot és elavult operációs rendszert használt, amelyet sokáig nem frissítettek, és javítatlan sérülékenységekkel rendelkezik.

A végrehajtott intézkedések közé tartozik a master.php.net szerverkörnyezet újratelepítése és a szkriptek átvitele a PHP 8 új verziójába. A DBMS-sel való munkavégzés kódja módosult, hogy paraméterezett lekérdezéseket használjon, amelyek megnehezítik az SQL kód helyettesítését. A bcrypt algoritmus a jelszókivonatok tárolására szolgál az adatbázisban (korábban a jelszavakat megbízhatatlan MD5 hash segítségével tárolták). A rendszer visszaállítja a meglévő jelszavakat, és a rendszer kéri, hogy állítson be új jelszót a jelszó-helyreállítási űrlapon keresztül. Mivel a git.php.net és svn.php.net tárolókhoz HTTPS-en keresztüli hozzáférés MD5-kivonatokhoz volt kötve, úgy döntöttek, hogy a git.php.net és az svn.php.net csak olvasható módban marad, és az összeset áthelyezi. a fennmaradó PECL-bővítménytárak a GitHubon, hasonlóan a fő PHP-tárolóhoz.

Forrás: opennet.ru

Hozzászólás