Catatan perev. : Tema keamanan Docker mungkin salah satu yang abadi di dunia TI saat ini. Oleh karena itu, tanpa penjelasan lebih lanjut, kami menyajikan terjemahan dari pilihan rekomendasi yang relevan berikutnya. Jika Anda sudah tertarik dengan masalah ini, banyak dari mereka akan terbiasa dengan Anda. Dan kami melengkapi seleksi itu sendiri dengan daftar utilitas yang bermanfaat dan beberapa sumber daya untuk studi lebih lanjut tentang masalah ini.
Berikut panduan keamanan Docker. Umpan balik diterima, karena ini lebih merupakan kumpulan kutipan dari berbagai sumber, dan tidak semuanya telah diperiksa secara menyeluruh. Rekomendasi dibagi menjadi tiga kategori:
- Langkah-langkah yang diperlukan di dalam sistem operasi host ketika bekerja dengan Docker;
- Instruksi terkait dengan file konfigurasi rakitan dan membuat wadah;
- Alat keamanan yang dapat diintegrasikan dengan fitur Docker Enterprise tertentu.
Berbagai sumber daya telah menjadi dasar kepemimpinan, banyak di antaranya tercantum di bawah ini. Itu tidak bisa disebut lengkap, tetapi mencakup semua dasar-dasarnya. Informasi tambahan dapat ditemukan dalam deskripsi tes CIS (tautan diberikan di akhir manual ini), serta dalam dokumentasi untuk Docker.
Tolok ukur keamanan Docker
Docker Bench for Security secara otomatis memeriksa Docker Anda untuk kepatuhan dengan praktik terbaik yang paling umum. Script adalah tes keamanan heuristik yang baik, tetapi tidak boleh dianggap sebagai alat analisis yang komprehensif.
OS host
Jelas, wadah Docker tidak dapat dilindungi jika sistem host itu sendiri tidak dilindungi. Oleh karena itu, Anda harus mengikuti praktik terbaik di bidang keamanan sistem operasi. Selain itu, akan lebih bijaksana untuk melakukan analisis kerentanan di samping rekomendasi berikut.
Aturan audit
Membuat dan menggunakan aturan audit untuk file yang terkait dengan Docker menggunakan
auditctl
. Misalnya, Anda dapat menambahkan
-w /usr/bin/dockerd -k docker
ke
/etc/audit.rules
dan memulai kembali layanan audit.
Mode FIPS
Mengaktifkan mode FIPS memaksa alat kriptografi untuk beralih ke algoritma yang diperkenalkan di FIPS
(American Federal Information Processing Standards - approx. Transl.) , Dengan demikian mematuhi standar dan persyaratan federal dan industri. Jika OS host mendukung mode FIPS, Anda dapat mengaktifkannya dengan menjalankan perintah berikut:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
Anda juga harus mengaktifkan FIPS di Docker Engine:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]\n Environment=\"DOCKER_FIPS=1\"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker
Lihat dokumentasi
Docker dan
Red Hat untuk informasi lebih lanjut.
Rahasia buruh pelabuhan
Data rahasia harus disimpan sebagai rahasia. Anda dapat memulai layanan terkait menggunakan perintah layanan pembuatan buruh pelabuhan:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx
Lihat
dokumentasi untuk detailnya.
File konfigurasi Docker
Pengaturan berikut dapat ditambahkan ke
/etc/docker/daemon.json
konfigurasi
/etc/docker/daemon.json
:
Keamanan Transportasi
Hanya pengguna dengan akses ke kredensial klien TLS yang dapat terhubung ke daemon Docker (jika diperlukan akses jarak jauh).
Plugin Otorisasi
Putuskan pengguna mana yang diizinkan untuk menjalankan perintah mana dan membuat plugin otorisasi yang sesuai untuk Docker. Kemudian jalankan daemon Docker dan tambahkan plugin ke dalamnya:
dockerd --authorization-plugin=PLUGIN_ID
Untuk mempelajari lebih lanjut tentang cara membuat plugin otorisasi, lihat
dokumentasi .
Opsi daemon
Daemon Docker berfungsi dengan sekumpulan parameter default.
--live-restore
- opsi ini membantu mengurangi downtime wadah selama shutdown atau reboot sistem. Menjadi lebih mudah untuk menambal atau memperbaruinya dengan downtime minimal;--userland-proxy=false
- ketika NAT hairpin tersedia atau digunakan, proksi di ruang pengguna menjadi layanan yang berlebihan, yang hanya meningkatkan jumlah vektor serangan yang mungkin;--no-new-privileges
- mencegah kontainer memperoleh hak istimewa tambahan menggunakan suid atau sguid;--seccomp-profile /path/to/profile
- jika Anda memiliki profil seccomp Anda sendiri, Anda dapat menggunakannya dengan flag ini. Pelajari lebih lanjut tentang Seccomp dan Docker di sini .
Mengkonfigurasi wadah dan file perakitan
Pembuatan Pengguna
Pastikan bahwa pengguna dibuat untuk wadah dan jalankan di bawah pengguna itu (JANGAN menjalankan wadah di bawah root).
Akses jarak jauh
Tolak akses jarak jauh ke daemon. Jika masih diperlukan, lindungi dengan sertifikat.
Isolasikan ruang nama pengguna
Sangat penting untuk memastikan bahwa ruang nama pengguna di Docker terisolasi, karena secara default ruang bersama dengan ruang nama host. Dalam beberapa kasus, ini dapat digunakan untuk meningkatkan hak istimewa atau bahkan untuk pergi ke luar wadah. Anda dapat mengisolasi ruang nama pengguna dengan mengedit file konfigurasi (seperti dijelaskan di atas di bagian File Konfigurasi Docker). Penyebutan tambahan tentang masalah ini adalah karena pentingnya.
Periksa kesehatan
Healthcheck (Pemeriksaan Kesehatan) adalah alat yang ampuh untuk memeriksa integritas kontainer. Ini dikonfigurasi di Dockerfile menggunakan
HEALTHCHECK
. Healthcheck memungkinkan Anda memverifikasi bahwa wadah berfungsi dengan baik. Pada contoh di bawah ini, pemeriksaan kesehatan berakhir dengan 0 jika server berjalan, dan 1 jika "macet":
HEALTHCHECK CMD curl --fail http://localhost || exit 1
SELinux
Jika SELinux didukung oleh sistem operasi host, buat atau impor kebijakan SELinux dan jalankan Docker dalam mode daemon dengan SELinux diaktifkan:
docker daemon --selinux-enable
Dalam hal ini, wadah Docker dapat diluncurkan dengan pengaturan keamanan, misalnya:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash
Antarmuka jaringan
Secara default, Docker mendengarkan semua antarmuka jaringan. Karena dalam kebanyakan kasus, lalu lintas hanya diharapkan pada salah satu dari mereka, pendekatan seperti itu secara tidak masuk akal meningkatkan risiko serangan. Oleh karena itu, ketika memulai sebuah wadah, Anda dapat mengikat port-nya ke antarmuka tertentu pada host:
docker run --detach --publish 10.2.3.4:49153:80 nginx
Versi Gambar yang di-cache
Saat mengunduh gambar, pastikan bahwa cache lokal cocok dengan isi repositori. Jika tidak, Anda mungkin menerima versi gambar yang sudah ketinggalan zaman atau gambar yang mengandung kerentanan.
Jembatan jaringan
Model jaringan default,
docker0
, rentan terhadap serangan seperti ARP-spoofing dan MAC-flooding. Untuk mengatasi masalah ini, buat jembatan jaringan sesuai dengan spesifikasi Anda, seperti dijelaskan di
sini .
Peringatan soket Docker
Jangan sekali-kali membuang soket Docker ke dalam wadah. Jika tidak, wadah akan dapat menjalankan perintah Docker dan, karenanya, berkomunikasi dengan sistem operasi host dan mengendalikannya. Jangan lakukan ini.
Mengkonfigurasi Docker Enterprise
Kepercayaan Docker
Docker Trust memungkinkan Anda membuat kunci yang dapat digunakan untuk memverifikasi integritas kriptografi gambar. Kunci Kepercayaan Docker dapat digunakan untuk menandatangani gambar Docker dengan kunci pribadi, yang diverifikasi oleh kunci publik di Notaris Server. Informasi lebih lanjut di
sini . Mengaktifkan Docker Trust dalam Enterprise Engine dijelaskan secara rinci di
bagian dokumentasi ini .
Pemindaian Kerentanan
Docker Enterprise memiliki pemindai kerentanan bawaan, yang memungkinkan untuk mengunduh basis data CVE untuk kerentanan pemindaian offline dalam gambar. Memindai gambar secara teratur membantu membuatnya lebih aman: pengguna segera menerima peringatan tentang kerentanan yang ditemukan. Untuk informasi lebih lanjut tentang cara melakukan ini, lihat di
sini .
Catatan perev. : Ada juga pemindai kerentanan Open Source di Docker-images, lihat contoh di akhir artikel.Integrasi LDAP dan UCP
Universal Control Plane dapat diintegrasikan dengan LDAP. Hasilnya akan menjadi sistem otentikasi yang disederhanakan untuk menghindari duplikasi yang tidak perlu. Baca lebih lanjut tentang ini di artikel
Integrasikan dengan direktori LDAP .
Bahan lainnya
Untuk informasi lebih lanjut tentang praktik keamanan terbaik Docker, kunjungi
docs.docker.com . Kami juga merekomendasikan mengunduh
tes Keamanan Pusat Internet untuk Docker .
Bonus dari penerjemah
Sebagai pelengkap logis untuk artikel ini, kami menerbitkan daftar
10 alat keamanan Open Source populer di Docker . Itu dipinjam dari
artikel lain (ditulis oleh Bill Doerrfeld dari Doerrfeld.io).
NB : Baca lebih lanjut tentang banyak proyek yang disebutkan di sini dalam artikel " 33+ Alat Keamanan Kubernetes ".- Docker Bench for Security adalah skrip yang telah disebutkan di awal artikel yang memeriksa wadah Docker untuk kepatuhan dengan praktik keamanan umum.

- Clair mungkin adalah utilitas yang paling populer untuk analisis statis kerentanan dalam suatu wadah. Ini menggunakan banyak basis data kerentanan CVE (termasuk pelacak distribusi Linux terkemuka seperti Red Hat, Debian, Ubuntu). Ini menawarkan API untuk pengembang dan peluang sederhana untuk memperluas fungsi (melalui penambahan "driver"). Ini digunakan dalam registry publik yang populer dari gambar kontainer (mirip dengan Docker Hub) - Quay.io.
- Cilium adalah solusi keamanan jaringan tingkat kernel berdasarkan teknologi penyaringan paket jaringan BPF.
- Anchore adalah utilitas berbasis CVE untuk menganalisis konten gambar untuk kerentanan keamanan. Selain itu, ini memungkinkan Anda untuk menerapkan kebijakan khusus (berdasarkan berbagai data termasuk daftar putih / hitam, isi file, dll.) Untuk mengevaluasi keamanan wadah.
- OpenSCAP Workbench adalah seluruh ekosistem untuk membuat dan memelihara kebijakan keamanan lintas platform. Untuk memeriksa wadah, ia menawarkan utilitas
oscap-docker
. - Dagda adalah utilitas untuk memindai wadah Docker untuk mengetahui kerentanan, trojan, virus, dan malware. Basis data CVE termasuk pemeriksaan ketergantungan OWASP, basis data Red Hat Oval, repositori eksploit Exploit Database.
- Notaris adalah kerangka kerja untuk menandatangani gambar Docker, awalnya dibuat oleh Docker Inc (dan kemudian diserahkan ke CNCF untuk pengembangan). Penggunaannya memungkinkan Anda untuk mendelegasikan peran dan mendistribusikan tanggung jawab di antara wadah, serta memverifikasi integritas kriptografi gambar.
- Grafaes adalah API metadata yang dirancang untuk mengelola kebijakan keamanan internal. Sebagai contoh, ini meningkatkan kinerja pemindai keamanan kontainer. Shopify menggunakan API ini untuk mengelola metadata di 500.000 gambarnya.
- Sysdig Falco - utilitas untuk Kubernetes yang memonitor perilaku sistem: aktivitas dalam wadah, pada host, di jaringan. Memungkinkan Anda mengonfigurasi pemeriksaan kontinu dalam infrastruktur, mendeteksi anomali, dan mengirim peringatan ke semua panggilan sistem Linux.
- Banyanops Collector adalah alat lain untuk analisis gambar statis dari wadah Docker. Memungkinkan Anda "melihat" ke dalam file gambar, mengumpulkan data yang diperlukan, menerapkan kebijakan yang diperlukan, dll.
Pilihan tip praktis lainnya yang bagus untuk membuat Docker lebih aman dapat ditemukan di
artikel Aqua Security
ini . Banyak tipsnya tumpang tindih dengan yang sudah disebutkan di atas, tetapi ada yang lain. Sebagai contoh, penulis mengusulkan kegiatan pemantauan dalam wadah dan menunjukkan apa yang harus dicari ketika menggunakan Docker Swarm.
Bagi mereka yang ingin menyelami topik ini secara lebih rinci tahun lalu,
buku " Docker Security: Quick Reference " diterbitkan , potongan-potongannya tersedia secara bebas di
sini .
Terakhir, untuk perkenalan praktis dengan beberapa aspek keamanan Docker: Profil Seccomp dan menggunakan kemampuan kernel Linux dalam wadah, Anda dapat melalui
pekerjaan laboratorium terkait
pada sumber daya Play with Docker * - lihat bagian Keamanan.
* Kami berbicara tentang sumber daya ini dua tahun lalu, dan pada bulan November 2018, sebuah kisah yang sangat menarik (dari sudut pandang keamanan) terjadi. Singkatnya, spesialis dari CyberArk Software Ltd. berhasil memecahkannya: untuk mencapai kemampuan menjalankan perintah di luar wadah, mis. pada sistem host. Ilustrasi hebat masalah keamanan di Docker, bukan? Baca semua detail dari apa yang terjadi di sini .PS dari penerjemah
Baca juga di blog kami: