GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menilai Keamanan Mesin Docker

Docker memungkinkan pengembang perangkat lunak dan insinyur DevOps dengan cepat mengemas aplikasi untuk produksi. Kontainer Docker sebagian besar beroperasi secara independen dari host mereka tetapi tidak tahan terhadap ancaman keamanan. Berikut cara mengaudit penginstalan Docker Engine Anda untuk memastikan keamanan maksimum untuk host dan beban kerja Anda.

Memahami Arsitektur Docker

Langkah pertama untuk menilai risiko Docker adalah memahami cara kerja teknologi tersebut. Docker didukung oleh tiga komponen berbeda:

  • Daemon Mesin Docker – Layanan latar belakang yang mengelola operasi di balik layar dengan wadah dan gambar.
  • API REST – Docker Engine menyediakan REST API yang mengirimkan perintah ke daemon Docker. API biasanya disediakan melalui soket REST tetapi juga dapat diekspos melalui HTTP.
  • Klien baris perintah Docker – CLI Docker berjalan saat Anda menggunakan docker di sebuah terminal. Ia mengirimkan perintah ke daemon Docker. Perintah diproses untuk menentukan tindakan yang harus diambil.

Penyerang yang mengkompromikan salah satu komponen ini dapat memperoleh akses ke lingkungan Anda. Melalui konfigurasi yang tepat, Anda dapat melindungi beban kerja Anda dan meningkatkan keamanan dibandingkan dengan menjalankan aplikasi langsung di host.

Permukaan Serangan

Daemon Docker menyajikan permukaan serangan terbesar. Mendapatkan kendali daemon menyediakan akses ke host dan semua container Anda. Daemon biasanya berjalan sebagai root , sehingga penyusupan yang berhasil dapat memberikan akses tak terbatas ke mesin fisik Anda.

Anda harus memastikan soket daemon Docker (/var/run/docker.sock ) tidak dapat diakses oleh siapa pun selain root pengguna. Karena daemon dapat mengakses host, menyediakan akses ke soket secara efektif melepaskan kendali mesin Anda.

Daemon Docker mendukung soket TCP yang memungkinkan kendali jarak jauh melalui jaringan. Jika Anda mengaktifkan fitur ini, komunikasi tidak terenkripsi akan ditawarkan tanpa autentikasi apa pun.

Hindari menggunakan koneksi TCP kecuali Anda berada di lingkungan jaringan yang telah Anda konfigurasikan secara khusus agar aman. Anda harus menyiapkan TLS dan memastikan hanya klien resmi yang diizinkan untuk terhubung.

Beberapa gambar Docker mungkin mengharuskan Anda memasang soket Docker ke dalam wadah. Ini sering digunakan oleh alat manajemen Docker yang menyediakan antarmuka ke container yang berjalan di host Anda. Dengan memasang soket dengan cara ini, apa pun di dalam wadah dapat mengontrol sistem Anda. Container tidak boleh menerima soket Docker kecuali Anda yakin beban kerja memerlukannya.

Mode Tanpa Root

Docker sekarang mendukung mode rootless yang memungkinkan Anda menjalankan Docker tanpa root mengakses. Ini membantu meningkatkan keamanan tetapi disertai dengan kerumitan tambahan pada waktu penyiapan.

Menggunakan mode tanpa akar menjalankan Docker dan wadah Anda di dalam ruang nama pengguna. Sebagian besar fitur Docker akan berfungsi, meskipun ada beberapa batasan.

Tidak semua driver penyimpanan tersedia, jaringan overlay tidak didukung dan jaringan container sepenuhnya diberi namespace. Ini berarti Anda tidak dapat mengakses IP container secara langsung dari host tanpa terlebih dahulu memasuki namespace jaringan khusus.

Menggunakan mode rootless dapat membantu dalam lingkungan keamanan tinggi di mana integritas host adalah yang terpenting. Ini membantu mengurangi dampak serangan yang berhasil dengan membatasi peluang untuk merusak sistem yang lebih luas.

Keamanan API REST

Docker REST API biasanya diakses melalui soket UNIX. Pemeriksaan izin dilakukan menggunakan mekanisme UNIX standar.

Anda dapat mengekspos API melalui soket TCP, mengaktifkan akses melalui HTTP. Ini meningkatkan risiko kompromi. Anda harus memastikan kontrol akses jaringan Anda disetel sehingga lalu lintas hanya dapat berasal dari host yang disetujui.

Anda harus mengaudit kebijakan firewall Anda sehingga Anda tidak mengabaikan perangkat yang dapat berinteraksi dengan Docker API. Ingat bahwa membatasi koneksi ke localhost tidak cukup – ini akan tetap mengizinkan akses dari dalam container Docker yang berjalan di mesin Anda, yang berpotensi mengaktifkan eskalasi hak istimewa yang tidak diinginkan.

Membatasi Komunikasi Antar Container

Docker memungkinkan semua container untuk berkomunikasi satu sama lain melalui docker0 default jaringan yang dijembatani. Kontainer yang disusupi dapat mengintai jaringan ini untuk mempelajari lingkungannya. Ini dapat menggunakan jaringan jembatan sebagai tempat yang menguntungkan untuk memulai infiltrasi beban kerja Anda yang lebih luas.

Menonaktifkan komunikasi antar-kontainer meningkatkan postur keamanan Anda dengan meningkatkan isolasi kontainer. Anda harus menautkan wadah secara eksplisit menggunakan --link=ContainerName bendera atau jaringan Docker Anda sendiri.

Jalankan daemon Docker dengan --icc=false tandai untuk menonaktifkan komunikasi melalui docker0 jembatan.

Batasi Kemampuan Conainer

Kemampuan kernel Linux menentukan tindakan yang tersedia untuk pengguna dengan root mengakses. Kemampuan membantu mengunci proses yang berjalan sebagai root , seperti wadah Docker. Setiap proses harus diberikan kemampuan minimum yang dibutuhkan.

Docker secara otomatis menjalankan container dengan pilihan kemampuan yang terbatas. Bahkan daftar ini sering berlebihan untuk beban kerja sederhana seperti server web. Anda dapat membatasinya lebih jauh dengan menentukan daftar kemampuan Anda sendiri yang tersedia untuk sebuah container.

docker run --cap-drop all --cap-add SYSLOG example-image:latest

Perintah di atas akan menjalankan container hanya dengan SYSLOG kemampuan. --cap-drop flag mengabaikan daftar kemampuan default. Kemampuan kemudian ditambahkan kembali dengan --cap-add , membuat daftar putih.

Sebaiknya menilai wadah Anda terhadap daftar kemampuan kernel. Lepaskan semua kemampuan yang tidak digunakan dari container yang berjalan dalam produksi. Ini membantu membatasi kerusakan yang dapat disebabkan oleh penampung yang disusupi.

Aktifkan Fitur Kernel Bawaan

Jangan abaikan fitur keamanan bawaan kernel Anda. Docker bekerja dengan teknologi yang sudah ada seperti AppArmor dan SELinux.

Beberapa distribusi, seperti RedHat Linux, hadir dengan kebijakan sistem SELinux yang telah ditentukan sebelumnya yang meningkatkan keamanan Docker. Anda dapat menambahkan dukungan SELinux secara manual dengan menjalankan daemon Docker dengan kode --selinux-enabled bendera. Ini mengaktifkan kebijakan Docker untuk menyetel label SELinux pada wadah Anda. SELinux menyediakan isolasi proses container yang lebih baik dari proses host, meningkatkan postur keamanan Anda.

Dasar-dasar

Sangat mudah untuk terpaku pada aspek rumit keamanan Docker:mode tanpa akar, akses daemon, dan komunikasi kontainer. Namun, jangan abaikan dasar-dasarnya – praktik keamanan standar masih berlaku.

Selalu perbarui Docker Engine sehingga Anda mendapatkan perbaikan bug terbaru. Anda juga harus memastikan kernel host Anda sepenuhnya ditambal. Karena container berbagi kernel yang sama dengan host Anda, semua kerentanan dapat dieksploitasi oleh aplikasi dalam container Anda.

Ini praktik yang baik untuk mendedikasikan mesin fisik atau VM tertentu untuk menjalankan Docker. Jangan menjalankan layanan lain secara langsung di host. Anda dapat menjalankannya sebagai wadah, mengurangi dampak kompromi host yang berhasil.

Ketika dikonfigurasi dengan benar, Docker meningkatkan keamanan dengan mengisolasi aplikasi. Meluangkan waktu untuk menilai posisi Anda membantu Anda mengidentifikasi potensi risiko dan memahami bagaimana serangan dapat dimulai. Mengunci hak istimewa container, melindungi daemon Docker, dan memperbarui host Anda akan membantu memperkuat container Anda.


Docker
  1. Cara Menginstal Mesin Docker di Ubuntu:Panduan Langkah-demi-Langkah

  2. Cara mengubah setelan Keamanan FTP

  3. Cara Mengakses Namespace Jaringan Docker Container dari Host

  1. Cara menginstal mesin Docker di Debian 9 Stretch Linux

  2. Cara Memasang Mesin Docker di Debian 11

  3. Cara Mengonfigurasi Btrf sebagai Mesin Penyimpanan di Docker

  1. Cara Menginstal Docker di Raspberry Pi

  2. 10 Praktik Terbaik Keamanan Docker

  3. Cara Mengatur Akses Jarak Jauh ke Docker Daemon