Saya baru saja tetapi berdedikasi mengkonversi ke Silverblue, yang saya jalankan di laptop rumah utama saya, dan yang akan saya masukkan ke laptop kerja saya ketika saya jatuh tempo upgrade perangkat keras dalam waktu beberapa bulan. Saya menulis artikel tentang Silverblue di Enable Sysadmin, dan selama akhir pekan, saya juga memindahkan laptop yang dimiliki salah satu anak saya. Dalam hal kegunaan, tampilan, dan nuansa, Silverblue pada dasarnya adalah versi Fedora. Namun, ada satu perbedaan utama, yaitu sistem operasi dipasang hanya-baca, artinya tidak dapat diubah.
Apa yang dimaksud dengan "tidak berubah"? Artinya tidak bisa diubah. Untuk lebih akuratnya, dalam konteks perangkat lunak, ini biasanya berarti bahwa sesuatu tidak dapat diubah selama waktu berjalan.
Penyimpangan penting:Kekekalan konstan
Saya menyadari ketika saya menulis kalimat terakhir bahwa itu mungkin sedikit menyesatkan. Banyak bahasa pemrograman memiliki konsep "konstanta". Konstanta adalah variabel (atau himpunan, atau struktur data) yang bukan variabel. Anda dapat menetapkan nilai ke konstanta, dan umumnya, mengharapkannya tidak berubah. Tapi—dan ini tergantung pada bahasa yang Anda gunakan—mungkin konstantanya tidak tidak berubah.
Pernyataan ini tampaknya bertentangan dengan akal sehat; meskipun, agar adil, frasa "bahasa pemrograman" dan "akal sehat" jarang digunakan secara positif dalam kalimat yang sama dalam pengalaman saya. Tapi begitulah cara beberapa bahasa dirancang. Intinya adalah ini:jika Anda memiliki variabel yang ingin Anda tetapkan, periksa sintaks bahasa pemrograman yang Anda gunakan dan ambil langkah spesifik apa pun yang diperlukan untuk mempertahankan kekekalan itu jika diperlukan.
Kekebalan sistem operasi
Dalam kasus Silverblue, ini adalah sistem operasi yang tidak dapat diubah. Anda menginstal aplikasi dalam wadah (lebih lanjut tentang ini nanti) menggunakan Flatpak, bukan ke sistem file root. Ini berarti tidak hanya penginstalan aplikasi yang diisolasi dari sistem file inti, tetapi juga kemampuan aplikasi jahat untuk menyusup ke sistem Anda berkurang secara signifikan. Bukan tidak mungkin—kami biasanya mencoba menghindari kata "mustahil" saat menjelaskan serangan atau kerentanan dalam keamanan—tetapi risikonya jauh lebih rendah.
Lalu bagaimana Anda memperbarui sistem Anda? Nah, yang Anda lakukan adalah membuat image boot baru yang menyertakan semua paket yang diperbarui yang diperlukan, dan ketika Anda siap, Anda mem-boot ke dalamnya. Silverblue menyediakan alat sederhana untuk melakukan ini:ini bisa dibilang lebih mudah daripada cara standar untuk meningkatkan sistem Anda. Pendekatan ini juga memudahkan untuk memelihara versi yang berbeda dari sistem operasi atau instalasi dengan set paket yang berbeda. Jika Anda perlu menguji aplikasi di lingkungan tertentu, Anda mem-boot ke gambar yang mencerminkan lingkungan itu dan melakukan pengujian. Lingkungan lain? Gambar lain.
Namun, kami lebih tertarik pada properti keamanan yang ditawarkan situasi ini kepada kami. Tidak hanya sulit untuk mengkompromikan sistem operasi inti sebagai pengguna standar (seperti halnya banyak masalah keamanan, setelah Anda memiliki sudo
atau akses root, situasinya menurun secara signifikan), tetapi Anda selalu beroperasi di lingkungan yang dikenal. Knowability adalah properti yang sangat diinginkan untuk keamanan, karena Anda dapat menguji, memantau, dan melakukan analisis forensik dari konfigurasi yang diketahui. Dari sudut pandang keamanan (apalagi manfaat lain yang diberikannya), kekekalan jelas merupakan aset dalam sistem operasi.
Kekekalan wadah
Ini bukan tempat untuk menjelaskan container (juga dikenal sebagai "Linux container" atau, lebih jarang atau lebih akurat akhir-akhir ini, "Docker container") secara detail, tetapi pada dasarnya adalah kumpulan perangkat lunak yang Anda buat sebagai gambar, dan kemudian dijalankan beban kerja pada server host (kadang-kadang dikenal sebagai "pod"). Salah satu hal hebat tentang container adalah mereka umumnya cepat untuk berputar (penyediaan dan eksekusi) dari sebuah gambar, dan yang lainnya adalah bahwa format gambar itu—format kemasannya—didefinisikan dengan baik, sehingga mudah untuk dibuat. gambar itu sendiri.
Namun, dari sudut pandang kami, yang hebat dari container adalah Anda dapat memilih untuk menggunakannya secara permanen. Faktanya, begitulah cara mereka umumnya digunakan:menggunakan wadah yang bisa berubah umumnya dianggap sebagai anti-pola. Cara standar (dan "benar") untuk menggunakan wadah adalah dengan menggabungkan setiap komponen aplikasi dan dependensi yang diperlukan ke dalam wadah yang terdefinisi dengan baik (dan mudah-mudahan kecil), dan kemudian menyebarkannya sesuai kebutuhan. Cara wadah dirancang bukan berarti Anda tidak bisa ubah perangkat lunak apa pun di dalam wadah yang sedang berjalan, tetapi cara menjalankannya membuat Anda enggan melakukannya; yang bagus, karena Anda seharusnya tidak melakukannya.
Ingat, perangkat lunak yang tidak dapat diubah memberikan pengetahuan yang lebih baik dan meningkatkan ketahanan Anda terhadap kompromi run-time. Sebagai gantinya, mengingat betapa ringannya container, Anda harus mendesain aplikasi sedemikian rupa sehingga jika perlu, Anda dapat mematikan instance container dan menggantinya dengan instance dari image yang diperbarui.
Pertimbangan ini membawa kita pada dua alasan mengapa Anda tidak boleh menjalankan container dengan hak akses root. Pertama, ada godaan bagi pengguna yang sah untuk menggunakan hak istimewa itu untuk memperbarui perangkat lunak dalam wadah yang sedang berjalan, mengurangi kemampuan untuk diketahui, dan mungkin memperkenalkan perilaku yang tidak terduga. Kedua, ada lebih banyak peluang untuk berkompromi jika aktor jahat—manusia atau otomatis—dapat mengubah perangkat lunak yang mendasari dalam penampung.
Kekebalan ganda dengan Silverblue
Saya sebutkan di atas bahwa Silverblue menjalankan aplikasi dalam wadah. Fakta ini berarti bahwa Anda memiliki dua tingkat keamanan yang disediakan sebagai default saat Anda menjalankan aplikasi pada sistem Silverblue:kekekalan sistem operasi, dan kekekalan container.
Sebagai petugas keamanan, saya menyetujui pertahanan mendalam, dan ini adalah contoh klasik dari properti itu. Saya juga menyukai fakta bahwa saya dapat mengontrol apa yang saya jalankan—dan versi apa—dengan jauh lebih mudah daripada jika saya menggunakan sistem operasi standar.
Artikel ini awalnya diposting di Alice, Eve, dan Bob – sebuah blog keamanan.