Správa o kompromitácii úložiska git a používateľskej základne projektu PHP

Boli zverejnené prvé výsledky analýzy incidentu súvisiaceho s identifikáciou dvoch škodlivých commitov v Git repozitári projektu PHP so zadnými vrátkami aktivovanými pri odoslaní požiadavky so špeciálne navrhnutou hlavičkou User Agent. Počas skúmania stôp po činnosti útočníkov sa dospelo k záveru, že samotný server git.php.net, na ktorom sa nachádzalo úložisko git, nebol napadnutý hackermi, ale bola ohrozená databáza s účtami vývojárov projektu. .

Je možné, že sa útočníkom podarilo stiahnuť databázu používateľov uloženú v DBMS na serveri master.php.net. Obsah master.php.net už bol migrovaný na nový main.php.net server nainštalovaný od začiatku. Všetky heslá vývojárov používané na prístup k infraštruktúre php.net boli resetované a proces ich zmeny bol spustený prostredníctvom špeciálneho formulára na obnovenie hesla. Repozitáre git.php.net a svn.php.net zostávajú len na čítanie (vývoj bol presunutý na GitHub).

Po zistení prvého škodlivého potvrdenia vykonaného prostredníctvom účtu Rasmusa Lerdorfa, zakladateľa PHP, sa predpokladalo, že jeho účet bol napadnutý a Nikita Popov, jeden z kľúčových vývojárov PHP, vrátil zmeny a zablokoval práva na odovzdanie pre problematický účet. Po určitom čase prišlo zistenie, že blokovanie nedáva zmysel, keďže bez overenia commitov pomocou digitálneho podpisu môže každý účastník s prístupom do php-src úložiska vykonať zmenu nahradením fiktívneho mena autora.

Potom útočníci poslali zlomyseľný záväzok v mene samotného Nikitu. Analýzou protokolov služby gitolite, ktorá sa používa na organizáciu prístupu k úložiskám, sa pokúsil určiť účastníka, ktorý skutočne vykonal zmeny. Napriek zahrnutiu účtovania pre všetky potvrdenia neboli v protokole žiadne záznamy pre dve škodlivé zmeny. Bolo jasné, že došlo ku kompromisu v infraštruktúre, keďže commity boli pridávané priamo, čím sa obchádzalo spojenie cez gitolite.

Server git.php.net bol okamžite deaktivovaný a primárne úložisko bolo prenesené na GitHub. V zhone sa zabudlo, že na prístup k úložisku bol okrem SSH pomocou gitolite ešte jeden vstup, ktorý umožňoval odosielať commity cez HTTPS. V tomto prípade sa na interakciu s Git použil git-http-backend a autentifikácia sa vykonala pomocou servera Apache2 HTTP, ktorý overil poverenia prístupom k databáze hostenej v DBMS na serveri master.php.net. Prihlasovanie bolo povolené nielen kľúčmi, ale aj bežným heslom. Analýza protokolov http servera potvrdila, že škodlivé zmeny boli pridané cez HTTPS.

Pri študovaní logov vyšlo najavo, že útočníci sa nepripojili na prvý krát, ale spočiatku sa snažili nájsť názov účtu, no po jeho identifikácii sa prihlásili na prvý pokus, t.j. vopred poznali Rasmusove a Nikitove heslá, no nepoznali ich prihlasovacie údaje. Ak sa útočníkom podarilo získať prístup do DBMS, nie je jasné, prečo okamžite nepoužili správne tam uvedené prihlásenie. Tento rozpor zatiaľ nedostal spoľahlivé vysvetlenie. Hacknutie master.php.net sa považuje za najpravdepodobnejší scenár, keďže tento server používal veľmi starý kód a zastaraný OS, ktorý nebol dlho aktualizovaný a mal neopravené zraniteľnosti.

Vykonané akcie zahŕňali preinštalovanie serverového prostredia master.php.net a presun skriptov na novú verziu PHP 8. Kód pre prácu s DBMS bol upravený tak, aby využíval parametrizované dotazy, ktoré komplikujú nahradenie SQL kódu. Algoritmus bcrypt sa používa na ukladanie hesiel hesiel v databáze (predtým sa heslá ukladali pomocou nespoľahlivého hashu MD5). Existujúce heslá sa resetujú a prostredníctvom formulára na obnovenie hesla sa zobrazí výzva na nastavenie nového hesla. Keďže prístup k úložiskám git.php.net a svn.php.net cez HTTPS bol viazaný na MD5 hash, bolo rozhodnuté ponechať git.php.net a svn.php.net v režime iba na čítanie a tiež presunúť všetky zostávajúce k nim repozitáre rozšírení PECL na GitHub, podobne ako v hlavnom repozitári PHP.

Zdroj: opennet.ru

Pridať komentár