Bagikan melalui


Amankan kontainer Windows

Berlaku untuk: Windows Server 2022, Windows Server 2019, Windows Server 2016

Kontainer meminjamkan ukuran gambar mereka yang berkurang dengan fakta bahwa mereka dapat mengandalkan host untuk menyediakan akses terbatas ke berbagai sumber daya. Jika kontainer tahu bahwa host akan dapat menyediakan fungsionalitas yang diperlukan untuk melakukan serangkaian tindakan tertentu, maka kontainer tidak perlu menyertakan perangkat lunak yang relevan dalam gambar dasarnya. Namun, sejauh mana berbagi sumber daya yang terjadi dapat berdampak signifikan pada performa dan keamanan kontainer. Jika terlalu banyak sumber daya yang dibagikan, aplikasi mungkin juga hanya berjalan sebagai proses pada host. Jika sumber daya dibagikan terlalu sedikit, maka kontainer menjadi tidak dapat dibedakan dari VM. Kedua konfigurasi berlaku untuk banyak skenario, tetapi kebanyakan orang yang menggunakan kontainer umumnya memilih sesuatu di tengah.

Keamanan kontainer Windows berasal dari tingkat berbagi yang terjadi dengan hostnya. Batas keamanan kontainer dibenci oleh mekanisme isolasi yang memisahkan kontainer dari host. Yang terpenting, mekanisme isolasi ini menentukan proses mana dalam kontainer yang dapat berinteraksi dengan host. Jika desain kontainer memungkinkan proses yang ditingkatkan (admin) untuk berinteraksi dengan host, maka Microsoft tidak menganggap kontainer ini memiliki batas keamanan yang kuat.

Kontainer Windows Server vs. kontainer Linux

Kontainer Windows Server dan kontainer Linux yang terisolasi proses memiliki tingkat isolasi yang sama. Untuk kedua jenis kontainer, pengembang harus mengasumsikan serangan apa pun yang dapat dilakukan melalui proses yang ditingkatkan pada host juga dapat dilakukan melalui proses yang ditingkatkan dalam kontainer. Keduanya beroperasi melalui kemampuan primitif yang ditawarkan oleh kernel host masing-masing. Gambar kontainer dibangun yang berisi biner mode pengguna yang menggunakan API yang disediakan oleh kernel host. Kernel host menyediakan kemampuan isolasi dan manajemen sumber daya yang sama untuk setiap kontainer yang berjalan di ruang pengguna. Jika kernel disusupi, maka begitu juga setiap berbagi kontainer kernel tersebut.

Desain mendasar kontainer server Linux dan Windows memperdagangkan keamanan untuk fleksibilitas. Kontainer Windows Server dan Linux dibangun di atas komponen primitif yang disediakan oleh OS. Melakukannya memberikan fleksibilitas untuk berbagi sumber daya dan namespace antar kontainer, tetapi menambahkan kompleksitas tambahan yang membuka pintu untuk eksploitasi. Secara luas dinyatakan, kami tidak menganggap kernel sebagai batas keamanan yang memadai untuk beban kerja multi-penyewa yang bermusuhan.

Isolasi kernel dengan kontainer yang terisolasi hypervisor

Kontainer yang terisolasi hypervisor memberikan tingkat isolasi yang lebih tinggi daripada kontainer Windows Server atau Linux yang terisolasi proses dan dianggap sebagai batas keamanan yang kuat. Kontainer yang terisolasi hypervisor terdiri dari kontainer Windows Server yang dibungkus dalam VM ultralight, dan kemudian berjalan bersama OS host melalui hypervisor Microsoft. Hypervisor menyediakan isolasi tingkat perangkat keras yang mencakup batas keamanan yang sangat kuat antara host dan kontainer lainnya. Bahkan jika eksploitasi adalah untuk melarikan diri dari kontainer Windows Server, itu akan terkandung dalam VM yang terisolasi hypervisor.

Baik kontainer Windows Server atau kontainer Linux tidak menyediakan apa yang dianggap Microsoft sebagai batas keamanan yang kuat dan tidak boleh digunakan dalam skenario multi-penyewa yang bermusuhan. Kontainer harus terbatas pada VM khusus untuk mencegah proses kontainer nakal berinteraksi dengan host atau penyewa lainnya. Isolasi hypervisor memungkinkan tingkat pemisahan ini sekaligus menawarkan beberapa perolehan performa atas VM tradisional. Oleh karena itu, sangat disarankan bahwa dalam skenario multi-penyewa yang bermusuhan, kontainer yang terisolasi hypervisor harus menjadi kontainer pilihan.

Kriteria layanan keamanan kontainer

Microsoft berkomitmen untuk menambal semua eksploitasi dan pelarian yang melanggar batas isolasi yang ditetapkan dari jenis kontainer Windows apa pun. Namun, hanya eksploitasi yang melanggar batas keamanan yang dilayankan melalui proses Microsoft Security Response Center (MSRC). Hanya kontainer yang terisolasi hypervisor yang menyediakan batas keamanan, dan kontainer yang terisolasi proses tidak. Satu-satunya cara untuk menghasilkan bug untuk escape kontainer yang terisolasi proses adalah jika proses non-admin dapat memperoleh akses ke host. Jika eksploitasi menggunakan proses admin untuk keluar dari kontainer, Maka Microsoft menganggapnya sebagai bug non-keamanan dan akan menambalnya sesuai proses layanan normal. Jika eksploitasi menggunakan proses non-admin untuk melakukan tindakan yang melanggar batas keamanan, Maka Microsoft akan menyelidikinya sesuai kriteria layanan keamanan yang ditetapkan.

Apa yang membuat beban kerja multi-penyewa bermusuhan?

Lingkungan multi-penyewa ada ketika beberapa beban kerja beroperasi pada infrastruktur dan sumber daya bersama. Jika satu atau beberapa beban kerja yang berjalan pada infrastruktur tidak dapat dipercaya, maka lingkungan multi-penyewa dianggap bermusuhan. Kontainer Windows Server dan Linux berbagi kernel host, sehingga eksploitasi apa pun yang dilakukan pada satu kontainer dapat memengaruhi semua beban kerja lain yang berjalan pada infrastruktur bersama.

Anda dapat mengambil langkah-langkah untuk mengurangi kemungkinan eksploitasi akan terjadi, misalnya, dengan menggunakan kebijakan keamanan pod, AppArmor, dan kontrol akses berbasis peran (RBAC), tetapi mereka tidak memberikan perlindungan terjamin terhadap penyerang. Kami sarankan Anda mengikuti praktik terbaik kami untuk isolasi kluster untuk skenario multi-penyewa apa pun.

Kapan menggunakan akun pengguna ContainerAdmin dan ContainerUser

Kontainer Windows Server menawarkan dua akun pengguna default, ContainerUser dan ContainerAdministrator, masing-masing dengan tujuan spesifik mereka sendiri. Akun ContainerAdministrator memungkinkan Anda menggunakan kontainer untuk tujuan administratif: menginstal layanan dan perangkat lunak (seperti mengaktifkan IIS dalam kontainer), membuat perubahan konfigurasi, dan membuat akun baru. Tugas-tugas ini penting untuk sejumlah skenario TI yang mungkin berjalan di lingkungan penyebaran kustom lokal.

Akun ContainerUser ada untuk semua skenario lain di mana hak istimewa administrator di Windows tidak diperlukan. Misalnya, di Kubernetes jika pengguna adalah ContainerAdministrator dan hostvolumes diizinkan untuk dipasang ke dalam pod, maka pengguna dapat memasang folder .ssh dan menambahkan kunci publik. Karena ContainerUser, contoh ini tidak akan dimungkinkan. Ini adalah akun pengguna terbatas yang dirancang murni untuk aplikasi yang tidak perlu berinteraksi dengan host. Kami sangat menyarankan agar saat menyebarkan kontainer server Windows ke lingkungan multi-penyewa apa pun yang dijalankan aplikasi Anda melalui akun ContainerUser. Dalam lingkungan multi-penyewa, selalu yang terbaik untuk mengikuti prinsip hak istimewa paling sedikit karena jika penyerang membahayakan beban kerja Anda, maka sumber daya bersama dan beban kerja tetangga juga memiliki kemungkinan yang lebih rendah untuk terpengaruh. Menjalankan kontainer dengan akun ContainerUser sangat mengurangi kemungkinan lingkungan disusupi secara keseluruhan. Namun, ini masih tidak memberikan batas keamanan yang kuat, jadi ketika keamanan menjadi masalah, Anda harus menggunakan kontainer yang terisolasi hypervisor.

Untuk mengubah akun pengguna, Anda dapat menggunakan pernyataan USER di dockerfile Anda:

USER ContainerUser

Atau, Anda dapat membuat pengguna baru:

RUN net user username ‘<password>’ /ADD
USER username

Layanan Windows

Layanan Microsoft Windows, sebelumnya dikenal sebagai layanan NT, memungkinkan Anda membuat aplikasi yang dapat dieksekusi yang berjalan lama dalam sesi Windows mereka sendiri. Layanan ini dapat dimulai secara otomatis ketika sistem operasi dimulai, dapat dijeda dan dimulai ulang, dan tidak menampilkan antarmuka pengguna apa pun. Anda juga dapat menjalankan layanan dalam konteks keamanan akun pengguna tertentu yang berbeda dengan pengguna yang masuk atau akun komputer default.

Saat melakukan kontainerisasi dan mengamankan beban kerja yang berjalan sebagai layanan Windows, ada beberapa pertimbangan tambahan yang perlu diperhatikan. Pertama, ENTRYPOINT kontainer tidak akan menjadi beban kerja karena layanan berjalan sebagai proses latar belakang, biasanya ENTRYPOINT akan menjadi alat seperti monitor layanan) atau monitor log). Kedua, akun keamanan yang dioperasikan beban kerja di bawah akan dikonfigurasi oleh layanan yang bukan oleh arahan PENGGUNA dalam dockerfile. Anda dapat memeriksa akun apa yang akan dijalankan layanan dengan menjalankan Get-WmiObject win32_service -filter "name='<servicename>'" | Format-List StartName.

Misalnya, saat menghosting aplikasi web IIS menggunakan gambar ENTRYPOINT ASP.NET (Registri Artefak Microsoft) kontainer adalah "C:\\ServiceMonitor.exe", "w3svc". Alat ini dapat digunakan untuk mengonfigurasi layanan IIS dan kemudian memantau layanan untuk memastikan bahwa layanan tetap berjalan dan keluar, sehingga menghentikan kontainer, jika layanan berhenti karena alasan apa pun. Secara default, layanan IIS dan dengan demikian aplikasi web berjalan di bawah akun hak istimewa rendah dalam kontainer, tetapi alat pemantauan layanan memerlukan hak istimewa administratif untuk mengonfigurasi dan memantau layanan.