Ziņojums par PHP projekta git repozitorija un lietotāju bāzes kompromisu

Ir publicēti pirmie analīzes rezultāti incidentam, kas saistīts ar divu ļaunprātīgu apņemšanos identificēšanu PHP projekta Git repozitorijā ar aizmugures durvīm, kas tika aktivizētas, nosūtot pieprasījumu ar īpaši izstrādātu User Agent galveni. Pētot uzbrucēju darbības pēdas, tika secināts, ka pats git.php.net serveris, uz kura atradās git repozitorijs, nav uzlauzts, bet gan tika uzlauzta datubāze ar projekta izstrādātāju kontiem. .

Iespējams, ka uzbrucēji varēja lejupielādēt serverī master.php.net DBVS saglabāto lietotāju datu bāzi. Master.php.net saturs jau ir migrēts uz jauno main.php.net serveri, kas instalēts no jauna. Visas izstrādātāju paroles, kas tika izmantotas, lai piekļūtu php.net infrastruktūrai, tika atiestatītas un to maiņas process tika uzsākts, izmantojot īpašu paroles atkopšanas veidlapu. Git.php.net un svn.php.net krātuves paliek tikai lasāmas (izstrāde ir pārvietota uz GitHub).

Pēc tam, kad tika atklāta pirmā ļaunprātīgā apņemšanās, kas veikta, izmantojot PHP dibinātāja Rasmusa Lerdorfa kontu, tika pieņemts, ka viņa konts ir uzlauzts, un Ņikita Popovs, viens no galvenajiem PHP izstrādātājiem, atsauca izmaiņas un bloķēja saistību tiesības problemātiskais konts. Pēc kāda laika atnāca sapratne, ka bloķēšanai nav jēgas, jo bez saistību pārbaudes, izmantojot digitālo parakstu, jebkurš dalībnieks, kuram ir piekļuve php-src repozitorijam, varēja veikt izmaiņas, aizstājot fiktīvu autora vārdu.

Pēc tam uzbrucēji paša Ņikitas vārdā nosūtīja ļaunprātīgu apņemšanos. Analizējot gitolīta pakalpojuma žurnālus, kas tiek izmantoti, lai organizētu piekļuvi krātuvēm, tika mēģināts noteikt dalībnieku, kurš faktiski veicis izmaiņas. Neskatoties uz visu saistību uzskaites iekļaušanu, žurnālā nebija ierakstu par divām ļaunprātīgām izmaiņām. Kļuva skaidrs, ka pastāv infrastruktūras kompromiss, jo saistības tika pievienotas tieši, apejot savienojumu caur gitolītu.

Git.php.net serveris tika nekavējoties atspējots, un primārā repozitorija tika pārsūtīta uz GitHub. Steidzoties tika aizmirsts, ka, lai piekļūtu repozitorijam, papildus SSH, izmantojot gitolite, bija vēl viena ievade, kas ļāva nosūtīt saistības, izmantojot HTTPS. Šajā gadījumā, lai mijiedarbotos ar Git, tika izmantots git-http-backend, un autentifikācija tika veikta, izmantojot Apache2 HTTP serveri, kas pārbaudīja akreditācijas datus, piekļūstot datu bāzei, kas mitināta DBVS serverī master.php.net. Pieteikšanās bija atļauta ne tikai ar atslēgām, bet arī ar parasto paroli. http servera žurnālu analīze apstiprināja, ka, izmantojot HTTPS, tika pievienotas ļaunprātīgas izmaiņas.

Pētot žurnālus, atklājās, ka uzbrucēji nav pieslēgušies pirmajā reizē, bet sākotnēji mēģinājuši atrast konta nosaukumu, taču pēc tā identificēšanas pieteicās pirmajā mēģinājumā, t.i. viņi iepriekš zināja Rasmusa un Ņikitas paroles, bet nezināja viņu pieteikumvārdus. Ja uzbrucēji varēja piekļūt DBVS, nav skaidrs, kāpēc viņi nekavējoties neizmantoja tur norādīto pareizo pieteikšanās vārdu. Šī neatbilstība vēl nav saņēmusi ticamu skaidrojumu. Master.php.net uzlaušana tiek uzskatīta par visticamāko scenāriju, jo šis serveris izmantoja ļoti vecu kodu un novecojušu OS, kas ilgu laiku nebija atjaunināta un kurā bija neaizlāptas ievainojamības.

Veiktās darbības ietver servera vides master.php.net pārinstalēšanu un skriptu pārsūtīšanu uz jauno PHP 8 versiju. Kods darbam ar DBVS ir modificēts, lai izmantotu parametrizētus vaicājumus, kas sarežģī SQL koda aizstāšanu. Bcrypt algoritms tiek izmantots, lai datubāzē saglabātu paroļu jaucējus (iepriekš paroles tika saglabātas, izmantojot neuzticamu MD5 jaucējkodu). Esošās paroles tiek atiestatītas, un jums tiek piedāvāts iestatīt jaunu paroli, izmantojot paroles atkopšanas veidlapu. Tā kā piekļuve git.php.net un svn.php.net krātuvēm, izmantojot HTTPS, bija saistīta ar MD5 jaucējkodiem, tika nolemts atstāt git.php.net un svn.php.net tikai lasīšanas režīmā, kā arī pārvietot visus atlikušie tiem ir PECL paplašinājumu krātuves GitHub, līdzīgi galvenajai PHP krātuvei.

Avots: opennet.ru

Pievieno komentāru