Mozilla berusaha melindungi repositori di GitHub dari perubahan berbahaya. Seperti yang ditunjukkan oleh
insiden Gentoo baru-baru
ini , serangan seperti itu nyata.
Mozilla awalnya menggunakan GitHub sebagai hosting cadangan. Seperti Gentoo, repositori asli disimpan di infrastruktur mereka sendiri. Meskipun sebagian besar kode Firefox masih didistribusikan dengan infrastrukturnya sendiri, banyak proyek hanya ada di GitHub. Beberapa hanya eksperimen, sementara yang lain digunakan dalam produksi (mis.
Akun Firefox ). Repositori "sensitif" seperti itu perlu dilindungi dari suntingan jahat, sementara tidak mempersulit komitmen untuk orang normal.
Langkah-langkah nyata dijelaskan di sini terhadap mendistribusikan (atau menggunakan) kode dari repositori yang dikompromikan. Kami berbagi pengalaman dan
beberapa alat audit. Perlindungan semacam itu hampir tidak mengganggu alur kerja normal di GitHub.
Di sini kami mempertimbangkan risiko meretas akun GitHub melalui mekanisme unik situs ini. Seperti yang ditunjukkan oleh kasus Gentoo dan insiden lainnya, jika terjadi peretasan, semua kode yang dapat diakses pengguna dikompromikan.
Inti dari masalah
GitHub adalah ekosistem yang hebat dengan banyak ekstensi atau "aplikasi" untuk menyederhanakan alur kerja tertentu. Aplikasi menerima izin dari pengguna untuk melakukan tindakan atas namanya. Mereka dapat meminta izin, termasuk mengubah atau menambahkan akun tambahan. GitHub dengan jelas menunjukkan permintaan ini: pengguna harus menyetujuinya melalui antarmuka web, tetapi tidak semua orang memahami konsekuensinya. Banyak yang tidak mengerti bahwa izin untuk mengakses repositori pribadi memberikan akses yang sama ke repositori apa pun di GitHub atas nama pengguna.
Kelebihan izin membahayakan repositori dengan informasi rahasia, sementara admin repositori tidak melihat apa pun. Hal terbaik yang bisa dia lakukan adalah memperhatikan komit jahat setelah fakta. Baik GitHub maupun Git tidak dapat dikonfigurasi untuk mencegah atau menandai komit berbahaya semacam ini. Hanya pemantauan eksternal.
Implementasi
Rekomendasi berikut diambil dari
sistem keamanan kami, hanya untuk artikel ini fitur khusus Mozilla telah dihapus. Sebisa mungkin, kami meminjam praktik terbaik dari Internet, menggunakan fungsi GitHub dan berusaha untuk tidak terlalu mempersulit kehidupan pengembang.
Rekomendasi untuk organisasi
- 2FA wajib untuk semua karyawan.
- Untuk semua atau setidaknya pengguna dengan izin lebih tinggi:
- Berikan kontak (email, IM) ke organisasi atau admin (GitHub memungkinkan Anda menyembunyikan informasi kontak untuk privasi).
- Pastikan untuk memberi tahu organisasi atau admin tentang kemungkinan kompromi akun Anda (misalnya, tentang pencurian laptop).
Pedoman Repositori
- Repositori penting hanya boleh di-host di organisasi yang mengikuti rekomendasi di atas.
- Tentukan dan konfigurasikan cabang produksi:
- Ban dipaksa mendorong.
- Izin untuk berkomitmen hanya untuk sejumlah kecil pengguna.
- Terapkan pembatasan ini juga untuk admin dan pemilik.
- Masuk semua komit dengan kunci GPG yang sebelumnya dikenal.
Rekomendasi Alur Kerja
- Penyebaran, rilis, dan acara lain yang layak untuk audit harus dicatat dengan tag yang ditandatangani dengan kunci GPG yang sebelumnya dikenal.
- Semua penyebaran dan rilis harus dikeluarkan hanya setelah audit atas semua komitmen dan tag yang ditandatangani untuk kunci yang benar.
Implementasi dari langkah-langkah perlindungan ini melibatkan biaya-biaya tertentu, terutama sehubungan dengan penandatanganan komitmen. Kami telah mengembangkan alat untuk konfigurasi audit dan berencana untuk merilis alat untuk melakukan audit. Semuanya ada di
repositori kami .

Ini adalah contoh audit. Pertama, kami mendapatkan salinan data lokal untuk organisasi
octo_org
, dan kemudian laporan dikompilasi untuk setiap repositori:
$ ./get_branch_protections.py octo_org 2018-07-06 13:52:40,584 INFO: Running as ms_octo_cat 2018-07-06 13:52:40,854 INFO: Gathering branch protection data. (calls remaining 4992). 2018-07-06 13:52:41,117 INFO: Starting on org octo_org. (calls remaining 4992). 2018-07-06 13:52:59,116 INFO: Finished gathering branch protection data (calls remaining 4947).
Sekarang dengan data cache lokal Anda dapat menghasilkan laporan apa pun. Misalnya, satu laporan menunjukkan kepatuhan dengan rekomendasi di atas:
$ ./report_branch_status.py --header octo_org.db.json name,protected,restricted,enforcement,signed,team_used octo_org/react-starter,True,False,False,False,False octo_org/node-starter,False,False,False,False,False
Seperti yang Anda lihat, hanya
octo_org/react-starter
termasuk perlindungan terhadap paksa mendorong cabang produksi. Hasilnya dalam format CSV untuk dengan mudah dimasukkan ke dalam spreadsheet.
Bagaimana Anda bisa membantu?
Kami masih menerapkan rekomendasi dan pembelajaran ini di sepanjang jalan. Jika Anda merasa
rekomendasi keamanan repositori kami tepat untuk Anda, bantu sederhanakan implementasinya. Bagikan pengalaman Anda di
halaman tips atau
buka tiket di repositori
GitHub-Audit .