Bekas Linux vs VM: Perbandingan keselamatan

Pemaju suka bekas. Mereka mudah digunakan dan cepat dimulakan. Anda boleh menjalankan banyaknya dengan perkakasan yang sederhana. Overhead permulaan selalu menjadi jalan pengembangan dan pengujian, dan overhead ini hanya meningkat dengan seni bina perkhidmatan mikro. Sekiranya pembangun memerlukan setengah lusin perkhidmatan, dia mungkin dengan mudah membuang satu atau dua hari dengan persediaan - mengkonfigurasi perkakasan, menjalankan pemasang, memerangi ketidaksesuaian.

Dengan bekas, runtuh hingga beberapa minit atau saat dan boleh dijalankan di satu stesen kerja pembangunan. Repositori gambar kontena yang berguna melipatgandakan produktiviti pembangun, seperti sumber terbuka, tetapi tanpa masalah untuk membuat binaan. Pasukan operasi lebih lambat untuk menggunakan kontena. Salah satu sebabnya adalah kerana banyak aplikasi yang mesti mereka sokong belum dikemas. Sebab lain adalah keengganan untuk menjauh dari VM.

Untuk ops, peralihan dari logam kosong ke VM adalah wajar. VM individu kelihatan dan dapat dikendalikan seperti sistem individu, menggunakan alat dan proses yang sama. Kebimbangan awal mengenai keselamatan VM dikurangkan oleh sejarah pengeluaran VM yang panjang di dunia kerangka utama, oleh kemampuan untuk menerapkan kawalan yang sama seperti yang digunakan untuk sistem logam bare, oleh sokongan virtualisasi perkakasan, dan oleh kematangan alat pengurusan VM yang terus berkembang.

Banyak kebimbangan keselamatan awal datang ke satu soalan: Adakah VM seaman logam bare? Sekarang soalan serupa diajukan mengenai bekas. Seberapa selamat kontena, dan bagaimana perbandingannya dengan VM? Sudah tentu jika kita membandingkan perkhidmatan yang berjalan di dalam kontena dengan perkhidmatan yang sama dengan proses yang berasingan pada sistem yang sama, versi kontena lebih selamat. Pemisahan yang disediakan oleh ruang nama Linux dan kumpulan memberikan penghalang yang tidak wujud antara proses biasa. Perbandingan dengan VM kurang jelas. Mari lihat VM dan bekas dari perspektif keselamatan.

Dalam artikel ini, saya akan mengambil dua pendekatan berbeza untuk membandingkan keselamatan VM dan kontena. Pendekatan pertama akan lebih bersifat struktur, atau teoritis, melihat ciri masing-masing dari sudut keselamatan. Kemudian saya akan menggunakan analisis yang lebih praktikal dengan melihat apa yang berlaku dalam pelanggaran biasa dan bagaimana ia mungkin dipengaruhi oleh seni bina kontena dan VM.

Pandangan struktur

Untuk pendekatan struktur saya akan membandingkan permukaan serangan kedua-dua sistem. Permukaan serangan mewakili jumlah titik di mana sistem dapat diserang. Ia tidak ditentukan dengan tepat (sebagai nombor, misalnya) tetapi berguna untuk perbandingan. Bagi pencuri, rumah dengan 10 pintu memiliki permukaan serangan yang lebih besar daripada rumah dengan satu pintu, walaupun pintu itu sama. Satu pintu mungkin tidak dikunci; satu kunci mungkin rosak; pintu di lokasi yang berlainan mungkin memberikan privasi kepada penceroboh dan sebagainya.

Dalam sistem komputer, permukaan serangan meliputi apa pun di mana penyerang (atau perisian yang bertindak atas namanya) dapat "menyentuh" ​​sistem sasaran. Antaramuka rangkaian, sambungan perkakasan, dan sumber yang dikongsi adalah kemungkinan titik serangan. Perhatikan bahawa permukaan serangan tidak menunjukkan bahawa kelemahan sebenarnya ada. Kesemua 10 pintu mungkin selamat. Tetapi permukaan serangan yang lebih besar bermaksud lebih banyak tempat untuk dilindungi dan kemungkinan besar penyerang akan menemui kelemahan pada sekurang-kurangnya satu.

Jumlah permukaan serangan bergantung pada bilangan titik sentuhan yang berbeza dan kerumitan masing-masing. Mari lihat contoh yang mudah. Bayangkan sistem kuno yang melayani sebut harga pasaran saham. Ia mempunyai antara muka tunggal, garis bersiri sederhana. Protokol pada baris itu juga mudah: Simbol stok panjang tetap, katakanlah lima aksara, dihantar ke pelayan, yang bertindak balas dengan sebut harga harga tetap - katakanlah, 10 aksara. Tidak ada Ethernet, TCP / IP, HTTP, dan sebagainya. (Saya sebenarnya mengusahakan sistem seperti itu di galaksi yang jauh, jauh.)

Permukaan serangan sistem ini sangat kecil. Penyerang dapat memanipulasi ciri elektrik talian bersiri, mengirim simbol yang salah, mengirim terlalu banyak data, atau mengubah protokol. Melindungi sistem akan melibatkan pelaksanaan kawalan yang sesuai terhadap serangan tersebut.

Sekarang bayangkan perkhidmatan yang sama, tetapi dalam seni bina moden. Perkhidmatan ini tersedia di Internet dan memaparkan RESTful API. Bahagian elektrik serangan hilang - semua yang akan dilakukan adalah mengganti penghala atau suis penyerang sendiri. Tetapi protokolnya jauh lebih kompleks. Ini memiliki lapisan untuk IP, TCP, mungkin TLS, dan HTTP, masing-masing menawarkan kemungkinan kerentanan yang dapat dieksploitasi. Sistem moden mempunyai permukaan serangan yang jauh lebih besar, walaupun masih memandang penyerang seperti satu titik antara muka.

Permukaan serangan logam telanjang

Bagi penyerang yang tidak hadir secara fizikal di pusat data, permukaan serangan awal adalah rangkaian ke pelayan. Ini menyebabkan "pandangan perimeter" keamanan: Lindungi titik masuk ke pusat data dan tidak ada yang masuk. Sekiranya penyerang tidak dapat masuk, tidak masalah apa yang berlaku antara sistem di dalam. Ia berfungsi dengan baik ketika antaramuka perimeter sederhana (think dial-up), tetapi memupuk kelemahan pada antaramuka dalaman. Penyerang yang menemui lubang di perimeter akan sering mengetahui bahawa permukaan serangan dalaman ladang pelayan jauh lebih besar daripada yang ada di luar, dan mereka boleh melakukan kerosakan yang besar sekali di dalam.

Permukaan serangan dalaman ini merangkumi hubungan rangkaian antara pelayan tetapi juga interaksi proses-ke-proses dalam satu pelayan. Lebih buruk lagi, kerana banyak perkhidmatan dijalankan dengan hak istimewa yang tinggi (pengguna "root"), berjaya menerobos salah satu secara efektif akan bermaksud akses yang tidak terikat kepada perkara lain pada sistem itu, tanpa perlu mencari kelemahan tambahan. Seluruh industri tumbuh di sekitar melindungi pelayan - firewall, antimalware, pengesanan pencerobohan, dan terus - dengan hasil yang kurang sempurna.

Terdapat juga serangan "saluran sampingan" yang menarik terhadap pelayan. Penyelidik telah menunjukkan contoh penggunaan penggunaan tenaga, bunyi bising, atau radiasi elektromagnetik dari komputer untuk mengekstrak maklumat, kadangkala data yang sangat sensitif seperti kunci kriptografi. Serangan lain telah memanfaatkan antara muka yang terdedah seperti protokol papan kekunci tanpa wayar. Secara umum, bagaimanapun, serangan ini lebih sukar - mereka mungkin memerlukan jarak dekat dengan pelayan, misalnya - jadi jalan utama untuk memasuki "wayar" lebih biasa.

Permukaan serangan VM

Apabila VM digunakan dengan cara yang sama seperti logam telanjang, tanpa perbezaan dalam seni bina aplikasi (seperti biasa), mereka berkongsi banyak titik serangan yang sama. Satu permukaan serangan tambahan adalah kemungkinan kegagalan dalam hypervisor, OS, atau perkakasan untuk mengasingkan sumber antara VM dengan betul, yang membolehkan VM membaca memori VM lain. Antara muka antara VM dan hypervisor juga mewakili titik serangan. Sekiranya VM dapat menerobos dan mendapatkan kod sewenang-wenangnya di hypervisor, maka ia dapat mengakses VM lain pada sistem yang sama. Pengawas itu sendiri mewakili titik serangan kerana mengekspos antara muka pengurusan.

Terdapat titik serangan tambahan bergantung pada jenis sistem VM. Sistem VM jenis 2 menggunakan hypervisor yang berjalan sebagai proses pada OS host yang mendasari. Sistem ini dapat diserang dengan menyerang OS host. Sekiranya penyerang dapat menjalankan kod pada sistem host, dia berpotensi mempengaruhi hypervisor dan VM, terutama jika dia dapat memperoleh akses sebagai pengguna istimewa. Kehadiran keseluruhan OS, termasuk utiliti, alat pengurusan, dan mungkin perkhidmatan dan titik masuk lain (seperti SSH) menyediakan sejumlah kemungkinan titik serangan. Sistem VM Jenis 1, di mana hypervisor berjalan terus pada perkakasan yang mendasari, menghilangkan titik masuk ini dan oleh itu mempunyai permukaan serangan yang lebih kecil.

Permukaan serangan kontena

Seperti VM, kontena berkongsi titik serangan masuk rangkaian sistem bare-logam asas. Di samping itu, seperti mesin maya Jenis 2, sistem kontena yang menggunakan OS hos "dimuat sepenuhnya" dikenakan semua serangan yang sama terhadap utiliti dan perkhidmatan OS hos tersebut. Sekiranya penyerang dapat memperoleh akses ke inang tersebut, dia boleh cuba mengakses atau mempengaruhi bekas yang sedang berjalan. Sekiranya dia mendapat akses istimewa ("root"), penyerang akan dapat mengakses atau mengendalikan wadah mana pun. OS "minimalis" (seperti KurmaOS Apcera) dapat membantu mengurangkan permukaan serangan ini tetapi tidak dapat menghilangkannya sepenuhnya, kerana beberapa akses ke OS host diperlukan untuk pengurusan kontena.

Mekanisme pemisahan bekas asas (ruang nama) juga menawarkan titik serangan yang berpotensi. Selain itu, tidak semua aspek proses pada sistem Linux diberi ruang nama, jadi beberapa item dikongsi di seluruh bekas. Ini adalah kawasan semula jadi untuk diserang oleh penyerang. Akhirnya, proses ke antara muka kernel (untuk panggilan sistem) adalah besar dan terdedah di setiap kontena, berbanding dengan antara muka yang jauh lebih kecil antara VM dan penyelia. Kerentanan dalam panggilan sistem dapat menawarkan potensi akses ke kernel. Salah satu contohnya ialah kerentanan yang dilaporkan baru-baru ini di rantai kunci Linux.

Pertimbangan seni bina

Untuk kedua VM dan kontena, ukuran permukaan serangan dapat dipengaruhi oleh arsitektur aplikasi dan bagaimana teknologi digunakan.

Banyak aplikasi VM lama memperlakukan VM seperti logam kosong. Dengan kata lain, mereka tidak menyesuaikan seni bina mereka khusus untuk VM atau untuk model keselamatan yang tidak berdasarkan keselamatan perimeter. Mereka mungkin memasang banyak perkhidmatan pada VM yang sama, menjalankan perkhidmatan dengan hak root, dan mempunyai sedikit atau tanpa kawalan keselamatan antara perkhidmatan. Merangka semula aplikasi ini (atau lebih mungkin menggantinya dengan yang lebih baru) mungkin menggunakan VM untuk menyediakan pemisahan keselamatan antara unit berfungsi, dan bukan hanya sebagai kaedah menguruskan sejumlah besar mesin.

Bekas sangat sesuai untuk seni bina perkhidmatan mikro yang "merangkai bersama" sebilangan besar (biasanya) perkhidmatan kecil menggunakan API standard. Perkhidmatan seperti ini seringkali memiliki jangka waktu yang sangat singkat, di mana perkhidmatan yang dikemas kini dimulakan atas permintaan, menanggapi permintaan, dan dihancurkan, atau di mana perkhidmatan dengan cepat meningkat berdasarkan permintaan. Pola penggunaan itu bergantung pada keadaan pantas yang disokong oleh bekas. Dari perspektif keselamatan, ia mempunyai kelebihan dan kekurangan.

Jumlah perkhidmatan yang lebih besar bermaksud sebilangan besar antara muka rangkaian dan oleh itu permukaan serangan lebih besar. Namun, ia juga membolehkan lebih banyak kawalan pada lapisan rangkaian. Contohnya, di Platform Apcera, semua lalu lintas kontena ke kontena mesti dibenarkan secara jelas. Wadah penyangak tidak boleh dengan sewenang-wenangnya menjangkau titik akhir rangkaian mana pun.

Jangka hayat kontena yang pendek bermaksud bahawa jika penyerang masuk, waktunya dia harus melakukan sesuatu adalah terhad, berbanding dengan peluang yang ditunjukkan oleh perkhidmatan yang sudah lama berjalan. Kelemahannya adalah bahawa forensik lebih sukar. Setelah bekas itu hilang, tidak dapat disiasat dan diperiksa untuk mencari perisian hasad. Senibina ini juga menyukarkan penyerang untuk memasang perisian hasad yang bertahan setelah pemusnahan kontena, kerana dia mungkin menggunakan logam kosong dengan memasang pemacu yang dimuat pada but. Kontena biasanya dimuatkan dari repositori yang boleh dipercayai dan hanya boleh dibaca, dan ia dapat dijamin dengan pemeriksaan kriptografi.

Sekarang mari kita fikirkan apa yang berlaku semasa pelanggaran.

Perlindungan terhadap pelanggaran

Penyerang biasanya mempunyai satu atau dua tujuan untuk memasuki sistem pelayan. Mereka mahu mendapatkan data atau melakukan kerosakan.

Sekiranya mereka mengejar data, mereka ingin menyusup sebanyak mungkin sistem, dengan keistimewaan tertinggi, dan mengekalkan akses itu selama mungkin. Mencapai ini memberi mereka masa untuk mencari data, yang mungkin sudah ada - pangkalan data yang kurang selamat, misalnya - atau mungkin memerlukan pengumpulan yang perlahan dari waktu ke waktu ketika masuk, seperti mengumpulkan transaksi ketika mereka masuk dari pengguna. Menjaga akses untuk masa yang lama memerlukan siluman. Serangan itu juga memerlukan cara untuk mengeluarkan data.

Sekiranya penyerang hanya berusaha melakukan kerosakan, tujuannya sekali lagi adalah untuk mengakses sebanyak mungkin sistem dan keistimewaan. Tetapi ada tindakan penyeimbangan: Setelah kerosakan bermula, ia mungkin akan diperhatikan, tetapi semakin lama penyerang menunggu untuk memulakannya (sementara malware menyaring dari sistem ke sistem), semakin besar kemungkinannya dikesan. Mengeluarkan data tidak begitu penting daripada kawalan malware yang diselaraskan. Ideanya adalah untuk menjangkiti sebanyak mungkin sistem, kemudian merosakkannya pada titik yang diselaraskan, baik yang diatur sebelumnya atau berdasarkan perintah.

Pelanggaran melibatkan sebilangan elemen. Mari lihat masing-masing dan lihat apakah VM dan seni bina kontena boleh mempengaruhi permukaan serangan untuk masing-masing.