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 gyorsan leállították, és az elsődleges repositoryt áthelyezték a GitHub-ra. A sietségben figyelmen kívül hagyták, hogy a gitolite-on keresztüli SSH-hozzáférés mellett létezik egy másik bejelentkezési mód is a repositoryhoz, amely lehetővé teszi a commitok HTTPS-en keresztüli küldését. Ebben az esetben a git-http-backend-et használták a Gittel való interakcióhoz, a hitelesítést pedig az Apache2 HTTP-szerverrel végezték, amely a jogosultságokat egy, a következő címen található adatbázis elérésével ellenőrizte: szerver master.php.net. A bejelentkezés nemcsak kulcsokkal, hanem normál jelszóval is engedélyezett volt. A HTTP szerver naplóinak elemzése megerősítette, hogy a rosszindulatú módosításokat HTTPS-en keresztül adták hozzá.
A naplók vizsgálata során kiderült, hogy a támadók nem elsőre csatlakoztak, hanem először megpróbálták kitalálni a fióknevet. Miután azonosították, elsőre bejelentkeztek. Ez azt jelenti, hogy előre tudták Rasmus és Nikita jelszavát, de a felhasználónevüket nem. Ha a támadók hozzáfértek az adatbázis-kezelő rendszerhez (DBMS), nem világos, miért nem használták azonnal a megadott helyes felhasználónevet. Ezt az eltérést még nem sikerült megbízhatóan megmagyarázni. A master.php.net feltörése tekinthető a legvalószínűbb forgatókönyvnek, mivel jelenleg... szerver Nagyon régi kódot és elavult operációs rendszert használtak, amelyet régóta nem frissítettek, és javítatlan sebezhetőségeket tartalmazott.
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
