Laporkan tentang kompromi repositori git dan pangkalan pengguna projek PHP

Keputusan pertama analisis insiden yang berkaitan dengan pengenalpastian dua komit berniat jahat dalam repositori Git projek PHP dengan pintu belakang diaktifkan apabila menghantar permintaan dengan pengepala Ejen Pengguna yang direka khas telah diterbitkan. Semasa mengkaji jejak aktiviti penyerang, telah disimpulkan bahawa pelayan git.php.net itu sendiri, di mana repositori git terletak, tidak digodam, tetapi pangkalan data dengan akaun pemaju projek telah terjejas .

Ada kemungkinan penyerang dapat memuat turun pangkalan data pengguna yang disimpan dalam DBMS pada pelayan master.php.net. Kandungan master.php.net telah pun dipindahkan ke pelayan main.php.net baharu yang dipasang dari awal. Semua kata laluan pembangun yang digunakan untuk mengakses infrastruktur php.net telah ditetapkan semula dan proses menukarnya telah dimulakan melalui borang pemulihan kata laluan khas. Repositori git.php.net dan svn.php.net kekal baca sahaja (pembangunan telah dialihkan ke GitHub).

Selepas penemuan komit berniat jahat pertama yang dibuat melalui akaun Rasmus Lerdorf, pengasas PHP, diandaikan bahawa akaunnya telah digodam dan Nikita Popov, salah seorang pembangun PHP utama, melancarkan semula perubahan dan menyekat hak komit untuk akaun yang bermasalah. Selepas beberapa lama, menyedari bahawa penyekatan itu tidak masuk akal, kerana tanpa pengesahan komit menggunakan tandatangan digital, mana-mana peserta yang mempunyai akses kepada repositori php-src boleh membuat perubahan dengan menggantikan nama pengarang rekaan.

Seterusnya, penyerang menghantar komitmen jahat bagi pihak Nikita sendiri. Dengan menganalisis log perkhidmatan gitolite, yang digunakan untuk mengatur akses kepada repositori, percubaan telah dibuat untuk menentukan peserta yang benar-benar membuat perubahan. Walaupun kemasukan perakaunan untuk semua komitmen, tiada entri dalam log untuk dua perubahan berniat jahat. Ia menjadi jelas bahawa terdapat kompromi infrastruktur, kerana komit ditambahkan secara langsung, memintas sambungan melalui gitolite.

Pelayan git.php.net telah dilumpuhkan serta-merta, dan repositori utama telah dipindahkan ke GitHub. Dengan tergesa-gesa, terlupa bahawa untuk mengakses repositori, sebagai tambahan kepada SSH menggunakan gitolite, terdapat input lain yang membolehkan anda menghantar komit melalui HTTPS. Dalam kes ini, git-http-backend digunakan untuk berinteraksi dengan Git, dan pengesahan dilakukan menggunakan pelayan HTTP Apache2, yang mengesahkan kelayakan dengan mengakses pangkalan data yang dihoskan dalam DBMS pada pelayan master.php.net. Log masuk dibenarkan bukan sahaja dengan kunci, tetapi juga dengan kata laluan biasa. Analisis log pelayan http mengesahkan bahawa perubahan berniat jahat telah ditambahkan melalui HTTPS.

Apabila mengkaji log, ia mendedahkan bahawa penyerang tidak menyambung pada kali pertama, tetapi pada mulanya cuba mencari nama akaun, tetapi selepas mengenal pastinya, mereka log masuk pada percubaan pertama, i.e. mereka tahu kata laluan Rasmus dan Nikita lebih awal, tetapi tidak tahu log masuk mereka. Jika penyerang dapat memperoleh akses kepada DBMS, tidak jelas mengapa mereka tidak segera menggunakan log masuk yang betul yang dinyatakan di sana. Percanggahan ini masih belum mendapat penjelasan yang boleh dipercayai. Penggodaman master.php.net dianggap sebagai senario yang paling mungkin, kerana pelayan ini menggunakan kod yang sangat lama dan OS yang sudah lapuk, yang tidak dikemas kini untuk masa yang lama dan mempunyai kelemahan yang tidak ditambal.

Tindakan yang diambil termasuk pemasangan semula persekitaran pelayan master.php.net dan pemindahan skrip ke versi baharu PHP 8. Kod untuk bekerja dengan DBMS telah diubah suai untuk menggunakan pertanyaan berparameter yang merumitkan penggantian kod SQL. Algoritma bcrypt digunakan untuk menyimpan cincang kata laluan dalam pangkalan data (sebelum ini, kata laluan disimpan menggunakan cincang MD5 yang tidak boleh dipercayai). Kata laluan sedia ada ditetapkan semula dan anda digesa untuk menetapkan kata laluan baharu melalui borang pemulihan kata laluan. Memandangkan akses kepada repositori git.php.net dan svn.php.net melalui HTTPS telah terikat dengan cincangan MD5, ia telah memutuskan untuk meninggalkan git.php.net dan svn.php.net dalam mod baca sahaja, dan juga memindahkan semua bakinya kepada mereka repositori sambungan PECL di GitHub, serupa dengan repositori PHP utama.

Sumber: opennet.ru

Tambah komen