Aruanne PHP-projekti git-hoidla ja kasutajabaasi kompromissi kohta

Avaldatud on spetsiaalselt kujundatud User Agent päisega päringu saatmisel aktiveeritud tagauksega PHP projekti Git repositooriumis kahe pahatahtliku toimepanemise tuvastamisega seotud intsidendi analüüsi esimesed tulemused. Ründajate tegevuse jälgede uurimise käigus jõuti järeldusele, et git.php.net serverit ennast, millel git-hoidla asus, ei häkitud, küll aga rikuti projekti arendajate kontodega andmebaasi. .

Võimalik, et ründajad said DBMS-i salvestatud kasutajate andmebaasi alla laadida serveris master.php.net. Master.php.net sisu on juba nullist installitud uude main.php.net serverisse üle viidud. Kõik php.net infrastruktuurile juurdepääsuks kasutatavad arendaja paroolid lähtestati ja nende muutmise protsess käivitati spetsiaalse parooli taastamise vormi kaudu. Hoidlad git.php.net ja svn.php.net jäävad kirjutuskaitstuks (arendus on viidud GitHubisse).

Pärast PHP asutaja Rasmus Lerdorfi konto kaudu tehtud esimese pahatahtliku toimepanemise avastamist eeldati, et tema kontole on sisse häkitud ja Nikita Popov, üks peamisi PHP arendajaid, tühistas muudatused ja blokeeris sissemakseõigused probleemne konto. Mõne aja pärast jõudis arusaam, et blokeerimisel pole mõtet, kuna ilma digitaalallkirja abil tehtud kohustuste kontrollimiseta võib iga osaleja, kellel on juurdepääs php-src hoidlale, teha muudatusi, asendades fiktiivse autorinime.

Järgmiseks saatsid ründajad Nikita enda nimel pahatahtliku toimepanemise. Analüüsides hoidlatele juurdepääsu korraldamiseks kasutatava gitoliidi teenuse logisid, püüti välja selgitada osaleja, kes muudatused tegelikult tegi. Hoolimata kõigi toimepanemiste arvestamise kaasamisest, ei olnud logis kahe pahatahtliku muudatuse kirjeid. Sai selgeks, et tegemist on infrastruktuuri kompromissiga, kuna kohustused lisati otse, jättes gitoliidi kaudu ühendusest mööda.

Server git.php.net keelati koheselt ja esmane hoidla viidi üle GitHubisse. Kiiruga unustati ära, et repositooriumile ligi pääsemiseks oli lisaks gitoliiti kasutavale SSH-le veel üks sisend, mis lubas commit’e saata HTTPS-i kaudu. Sel juhul kasutati Gitiga suhtlemiseks git-http-taustaprogrammi ja autentimine viidi läbi Apache2 HTTP-serveri abil, mis kontrollis mandaate, pääsedes juurde master.php.net serveri DBMS-is hostitud andmebaasile. Sisselogimine oli lubatud mitte ainult võtmetega, vaid ka tavalise parooliga. http-serveri logide analüüs kinnitas, et pahatahtlikud muudatused lisati HTTPS-i kaudu.

Logisid uurides selgus, et ründajad ei loonudki esimest korda ühendust, vaid üritasid esialgu leida konto nime, kuid pärast selle tuvastamist logiti sisse esimesel katsel, s.t. nad teadsid Rasmuse ja Nikita paroole ette, kuid ei teadnud nende sisselogimisi. Kui ründajatel õnnestus DBMS-ile ligi pääseda, on ebaselge, miks nad ei kasutanud kohe seal märgitud õiget sisselogimist. See lahknevus pole veel usaldusväärset selgitust saanud. Kõige tõenäolisemaks stsenaariumiks peetakse saidi master.php.net häkkimist, kuna see server kasutas väga vana koodi ja aegunud OS-i, mida ei olnud pikka aega värskendatud ja millel olid parandamata haavatavused.

Tegevused hõlmasid master.php.net serverikeskkonna uuesti installimist ja skriptide ülekandmist PHP 8 uude versiooni. DBMS-iga töötamise koodi muudeti, et kasutada parameetritega päringuid, mis raskendavad SQL-koodi asendamist. Bcrypt-algoritmi kasutatakse parooliräside salvestamiseks andmebaasi (varem salvestati paroolid ebausaldusväärse MD5 räsi abil). Olemasolevad paroolid lähtestatakse ja teil palutakse parooli taastamise vormi kaudu määrata uus parool. Kuna juurdepääs git.php.net ja svn.php.net hoidlatele HTTPS-i kaudu oli seotud MD5 räsidega, otsustati jätta git.php.net ja svn.php.net kirjutuskaitstud režiimile ning teisaldada ka kõik ülejäänud neile GitHubi PECL-i laienduste hoidlad, sarnaselt peamise PHP hoidlaga.

Allikas: opennet.ru

Lisa kommentaar