Mag-ulat tungkol sa kompromiso ng git repository at user base ng proyektong PHP

Na-publish na ang mga unang resulta ng pagsusuri ng isang insidente na nauugnay sa pagkakakilanlan ng dalawang malisyosong commit sa Git repository ng isang proyektong PHP na may backdoor na naka-activate kapag nagpapadala ng kahilingan na may espesyal na idinisenyong User Agent header. Sa kurso ng pag-aaral ng mga bakas ng mga aktibidad ng mga umaatake, napagpasyahan na ang git.php.net server mismo, kung saan matatagpuan ang git repository, ay hindi na-hack, ngunit ang database na may mga account ng mga developer ng proyekto ay nakompromiso .

Posibleng na-download ng mga umaatake ang database ng user na nakaimbak sa DBMS sa master.php.net server. Ang mga nilalaman ng master.php.net ay nailipat na sa bagong main.php.net server na naka-install mula sa simula. Ang lahat ng mga password ng developer na ginamit upang ma-access ang imprastraktura ng php.net ay na-reset at ang proseso ng pagbabago sa mga ito ay sinimulan sa pamamagitan ng isang espesyal na form sa pagbawi ng password. Ang git.php.net at svn.php.net repository ay nananatiling read-only (inilipat ang development sa GitHub).

Matapos matuklasan ang unang malisyosong commit na ginawa sa pamamagitan ng account ni Rasmus Lerdorf, ang nagtatag ng PHP, ipinapalagay na ang kanyang account ay na-hack at si Nikita Popov, isa sa mga pangunahing developer ng PHP, ay ibinalik ang mga pagbabago at hinarangan ang mga karapatan sa commit para sa ang problemadong account. Pagkaraan ng ilang oras, napagtanto na ang pagharang ay walang saysay, dahil walang pag-verify ng mga commit gamit ang isang digital na lagda, sinumang kalahok na may access sa php-src repository ay maaaring gumawa ng pagbabago sa pamamagitan ng pagpapalit ng isang kathang-isip na pangalan ng may-akda.

Susunod, nagpadala ang mga umaatake ng malisyosong pangako sa ngalan mismo ni Nikita. Sa pamamagitan ng pagsusuri sa mga log ng serbisyong gitolite, na ginamit upang ayusin ang pag-access sa mga repositoryo, isang pagtatangka ang ginawa upang matukoy ang kalahok na aktwal na gumawa ng mga pagbabago. Sa kabila ng pagsasama ng accounting para sa lahat ng commit, walang mga entry sa log para sa dalawang malisyosong pagbabago. Naging malinaw na nagkaroon ng kompromiso sa imprastraktura, dahil direktang idinagdag ang mga commit, na nilalampasan ang koneksyon sa pamamagitan ng gitolite.

Ang git.php.net server ay kaagad na hindi pinagana, at ang pangunahing repository ay inilipat sa GitHub. Sa pagmamadali, nakalimutan na upang ma-access ang repositoryo, bilang karagdagan sa SSH gamit ang gitolite, mayroong isa pang input na nagpapahintulot sa iyo na magpadala ng mga commit sa pamamagitan ng HTTPS. Sa kasong ito, ginamit ang git-http-backend upang makipag-ugnayan sa Git, at isinagawa ang pagpapatotoo gamit ang Apache2 HTTP server, na nag-verify ng mga kredensyal sa pamamagitan ng pag-access sa database na naka-host sa DBMS sa master.php.net server. Ang pag-login ay pinapayagan hindi lamang sa mga susi, kundi pati na rin sa isang regular na password. Ang pagsusuri sa mga log ng http server ay nakumpirma na ang mga nakakahamak na pagbabago ay idinagdag sa pamamagitan ng HTTPS.

Kapag pinag-aaralan ang mga log, ipinahayag na ang mga umaatake ay hindi kumonekta sa unang pagkakataon, ngunit sa una ay sinubukang hanapin ang pangalan ng account, ngunit pagkatapos makilala ito, nag-log in sila sa unang pagsubok, i.e. alam nila ang mga password ni Rasmus at Nikita nang maaga, ngunit hindi nila alam ang kanilang mga login. Kung ang mga umaatake ay nakakuha ng access sa DBMS, hindi malinaw kung bakit hindi nila agad ginamit ang tamang pag-login na tinukoy doon. Ang pagkakaibang ito ay hindi pa nakakatanggap ng maaasahang paliwanag. Ang pag-hack ng master.php.net ay itinuturing na pinakamalamang na senaryo, dahil ang server na ito ay gumamit ng napakalumang code at isang lumang OS, na hindi na-update sa mahabang panahon at may mga hindi na-patch na kahinaan.

Kasama sa mga aksyon na ginawa ang muling pag-install ng master.php.net server environment at ang paglipat ng mga script sa bagong bersyon ng PHP 8. Ang code para sa pagtatrabaho sa DBMS ay binago upang gumamit ng mga parameterized na query na nagpapalubha sa pagpapalit ng SQL code. Ang bcrypt algorithm ay ginagamit upang mag-imbak ng mga hash ng password sa database (dati, ang mga password ay inimbak gamit ang isang hindi mapagkakatiwalaang MD5 hash). Nire-reset ang mga kasalukuyang password at sinenyasan kang magtakda ng bagong password sa pamamagitan ng form sa pagbawi ng password. Dahil ang access sa git.php.net at svn.php.net repository sa pamamagitan ng HTTPS ay nakatali sa MD5 hash, napagpasyahan na iwanan ang git.php.net at svn.php.net sa read-only mode, at ilipat din ang lahat ang mga natitira sa kanila ay PECL extension repository sa GitHub, katulad ng pangunahing PHP repository.

Pinagmulan: opennet.ru

Magdagdag ng komento