Bagaimana jaminan keaslian paket Debian?

8

Sistem dan proses keamanan apa yang ada untuk mencegah pihak ketiga jahat meretas / mengkompromikan keamanan kode di mirror Debian, atau untuk memverifikasi bahwa paket-paket yang kami dapatkan sebenarnya adalah paket-paket yang menurut para pengelola dipelihara?

ggl
sumber

Jawaban:

14

Memverifikasi paket

Isi mirror ditandatangani menggunakan kunci PGP, secara langsung atau tidak langsung. Mulai dari "root" dari distribusi Debian:

  • Release, ditandatangani dengan tanda tangan terpisah Release.gpg, berisi hash (MD5, SHA1, SHA256) dari semua indeks paket dan hash pemasang ( InReleasesekarang menggabungkan keduanya);
  • indeks paket ( misalnya , binary-amd64) berisi hash (MD5 dan SHA256) dari paket.

Tanda pagar dan tanda tangan diperiksa oleh alat seperti apt-getmenggunakan kunci PGP yang disimpan pada sistem (dikelola oleh apt-key). Jadi selama sistem penerima tetap sehat, secara default tidak ada paket yang dapat diinstal dari arsip Debian jika belum ditandatangani (secara tidak langsung) oleh kunci PGP arsip. Setiap penyusup di cermin tidak akan dapat menggantikan binari jika mereka juga tidak memiliki kendali atas kunci PGP yang relevan.

Mengontrol cermin

Ini berarti bahwa mengkompromikan arsip tidak cukup untuk benar-benar membahayakan sistem pengguna akhir; Anda juga harus berkompromi dengan kunci PGP yang sudah dipercaya sistem-sistem itu. (Sebuah konsekuensi dari ini adalah bahwa menambahkan kunci ke sistem Debian bukan sesuatu yang bisa dianggap enteng.) Itu membahas pertanyaan pertama Anda sampai batas tertentu, karena keamanan arsip tidak terlalu penting. Namun demikian, sistem kritis (di mana penandatanganan terjadi) dipantau dan diawasi secara ketat, dan sangat sedikit orang yang memiliki akses ke sana.

Harapan pemelihara

Memastikan bahwa paket-paket itu "sebenarnya adalah paket yang menurut pengelola adalah" sedikit lebih terlibat. Ini adalah jalur yang diambil oleh sebuah paket:

  • paket disiapkan oleh pengelola, dan ditandatangani dengan kunci di Debian keyring ( yaitu kunci milik Pengembang Debian yang diunggah, atau Debian Maintainer, yang diunggah ke server keyring Debian dan digabung oleh tim pemeliharaan kunci);
  • paket yang ditandatangani diunggah ke arsip, di mana itu diverifikasi (antara lain, kunci yang digunakan harus dalam keyring saat ini dan tidak boleh kadaluarsa, tanda tangan harus valid, dan jika paket ditandatangani oleh DM, yang DM harus memiliki izin yang relevan untuk paket tersebut);
  • setiap binari yang diunggah didorong ke arsip final apa adanya (Saya menyederhanakan sedikit di sini, tapi itulah efeknya);
  • setiap binari yang hilang dibangun oleh buildd dan ditandatangani oleh kunci PGP buildd, dan didorong ke arsip terakhir (yang tahu kunci buildd apa yang valid, dan memverifikasi file terhadap mereka);
  • semua pembaruan ini pada akhirnya didorong ke jaringan mirror, dengan pembaruan indeks yang sesuai (yang ditandatangani seperti dijelaskan di atas).

Jika pengelola mengunggah binari bersama dengan sumber paket, ini adalah file yang akhirnya dilayani (untuk saat ini). Karena mengunggah binari sekarang opsional, lebih dan lebih umum untuk melewatkannya, dan akhirnya binari yang diunggah akan dihapus. (Ini selalu terjadi di Ubuntu.) Apakah binari lain sesuai dengan harapan pengelola tergantung pada jaringan buildd; jadi buildd juga merupakan sistem kritis, di bawah pengawasan ketat dan dengan sedikit akses manusia. Karena semua artefak ditandatangani, selalu memungkinkan untuk memverifikasi integritas file: pertama terhadap kunci pengelola, kemudian terhadap kunci buildd, dan akhirnya terhadap kunci arsip.

Seperti yang ditunjukkan oleh plugwash , tanda tangan asli tidak tersedia di mirror, dan setiap DD dapat mengunggah biner yang hilang. Tanda tangan asli dapat diambil dari arsip debian-devel-changes .

Singkatnya , sementara sistem saat ini tidak sempurna, itu memang memberikan keterlacakan untuk semua file yang dapat Anda unduh dari mirror. Ada sejumlah upaya untuk memperbaiki situasi: membangun yang dapat direproduksi (yang akan memungkinkan verifikasi independen korespondensi biner dengan sumber yang dipublikasikan), menjatuhkan biner yang disediakan pengelola ...

Stephen Kitt
sumber
Sangat luar biasa komprehensif, tetapi Anda juga bisa mengatakan kepada poster itu untuk pergi dan membaca dokumentasinya. :-)
Faheem Mitha
@FaheemMitha saya ragu-ragu, tapi dokumentasi apa? Ada wiki.debian.org/SecureApt tetapi tidak mencakup semuanya ... Menyatukan semuanya cukup rumit, kecuali ada beberapa dokumentasi lain yang tidak saya sadari!
Stephen Kitt
Jadi apakah OS debian yang dijalankan pengguna memiliki kunci PGP publik yang telah disematkan sebelumnya - yang dipasangkan dengan kunci privat pada sistem kritis (di mana penandatanganan terjadi) - dan apt-getmemverifikasi paket menggunakan kunci pra-tempel lokal ini, karena mempercayai mereka?
the_velour_fog
1
@the_velour_fog ya, itu (hampir) benar; kunci publik dikirimkan dalam debian-archive-keyringpaket. apt-getmemverifikasi Releasefile menggunakan kunci itu, dan paket menggunakan hash yang terkandung dalam Releasedan Packagesfile.
Stephen Kitt