Kontainer di DevOps bukanlah konsep baru. Mereka adalah kotak pasir virtual dengan semua alat yang diperlukan untuk menjalankan layanan mikro, termasuk aplikasi besar.
Anda dapat menganggap wadah sebagai sistem pengemasan yang memungkinkan Anda (sebagai pengembang) menyimpan semua yang Anda perlukan untuk menjalankan aplikasi, misalnya runtime dan kode biner, dari titik terpusat.
Kontainer membantu pengembang memindahkan aplikasi dari satu lingkungan ke lingkungan lain (seperti mengirim aplikasi dari mesin lokal ke lingkungan virtual atau memindahkannya dari tahap awal ke tahap produksi), menghilangkan semua masalah yang terkait dengan pengaturan perangkat lunak dan konfigurasi yang berbeda di pengembang dan produksi akhir.
Milik Statista laporan tentang teknologi peti kemas menunjukkan bahwa 50% organisasi dunia telah mengadopsi orkestrasi peti kemas. Meskipun teknologi ini telah meningkatkan adopsi berdasarkan manfaatnya, kontainer dapat membuka pintu gerbang untuk serangan keamanan siber jika dibiarkan.
Detail CVsumber data kerentanan keamanan klasik, telah dicatat 62 Kerentanan yang disesuaikan dengan Docker sebagai tulisan ini. Bukankah ini membutuhkan praktik pengembang terbaik untuk mengatasi jebakan ini dan melindungi wadah untuk proses DevOps yang berhasil?
Posting ini menguraikan konsep keamanan kontainer, menyoroti beberapa tantangan, dan memandu Anda tentang praktik terbaik untuk diterapkan saat menggunakan teknologi kontainer.
Daftar isi
Apa itu Keamanan Kontainer?
Keamanan kontainer adalah proses berkelanjutan yang menggunakan protokol keamanan (alat dan kebijakan) untuk melindungi kontainer dan lingkungannya dari potensi ancaman.
Jika tidak dicentang, ancaman dapat merusak aplikasi Anda, infrastrukturnya, waktu proses, pustaka sistem, sistem operasi, dan kernel, di antara fitur-fitur lainnya.
Mempertimbangkan bahwa kontainer tersedia dalam keadaan sementara (sementara) dan juga dimaksudkan untuk penyebaran dan penskalaan dinamis, ada kebutuhan untuk keamanan otomatis dan setiap tahap siklus hidup pengembangan perangkat lunak (SDLC).
Baca juga: Pengantar Kubernetes Kops untuk Pemula
Apa Saja Tantangan dalam Keamanan Kontainer?
Meskipun kontainer memiliki banyak keuntungan (seperti mempercepat pengiriman perangkat lunak), mereka tidak kebal terhadap tantangan, terutama karena mereka memerlukan langkah-langkah keamanan (mereka tidak memiliki kemampuan keamanan mandiri).
Ini karena kontainer mengakses perangkat keras melalui sistem operasi (OS) yang dihosting. Ini berarti bahwa satu wadah dapat memiliki beberapa gambar wadah yang mendasari memperkenalkan cakupan yang lebih luas untuk permukaan serangan, menghadirkan beberapa tantangan.
Yang pertama adalah konfigurasi Kontainer Salah, di mana pengembang lupa untuk menyesuaikan dan menggunakan konfigurasi kontainer default yang memiliki beberapa jebakan seperti beberapa port yang terbuka dan tidak aman yang mungkin tidak ideal untuk aplikasi Anda, kredensial yang bocor seperti kata sandi dan token autentikasi, dan mengeluarkan izin secara berlebihan untuk runtime kontainer (ketika dijalankan sebagai root). Saat tidak diganti, konfigurasi default ini menyediakan jalan untuk serangan.
Berikutnya adalah kerentanan infrastruktur kontainer. Di sini, paket yang dibangun ke dalam wadah, seperti kode aplikasi, pustaka, dan konfigurasi, atau yang ada di sistem operasi host, menimbulkan kerentanan. Kerentanan dapat diperkenalkan di setiap tahap siklus hidup aplikasi, misalnya, ketika dependensi eksternal dibangun ke dalam gambar kontainer, pustaka sumber terbuka dipasang sebagai bagian dari aplikasi, gambar dasar kontainer berasal dari pendaftar kontainer pihak ketiga dan host yang dapat dieksploitasi melalui jaringan dan titik akhir.
Visibilitas ke dalam beban kerja container adalah salah satu tantangan container terbesar. Ini karena sifat wadah yang sangat dinamis yang membuat alat pemantauan tidak dapat menemukan wadah mana yang sedang berjalan dan memeriksa perilaku jaringannya. Visibilitas yang ditingkatkan mencegah pelanggaran dan meningkatkan waktu respons insiden jika terjadi.
Selain itu, kontainer rentan jika ada fase pipa CI/CD yang tidak aman, baik pada kode aplikasi atau infrastruktur beban kerja kontainer. Meskipun developer harus menangani keamanan di akhir siklus hidup aplikasi, mengelolanya di setiap langkah pengembangan akan melindungi aplikasi Anda dari kemunduran ini.
Alat Apa Yang Dapat Mengatasi Tantangan dalam Keamanan Kontainer?
Anda dapat memastikan bahwa solusi perusahaan yang diterapkan aman dengan menerapkan keamanan dan integritas kontainer menggunakan alat keamanan. Alat-alat ini memindai kerentanan dan terus memantaunya untuk serangan, bug, atau masalah apa pun.
Apakah Anda sedang mencari alat keamanan wadah sumber terbuka atau tipe yang dikomersialkan, semua akan melayani tujuan yang sama. Mereka semua beroperasi dengan mengaudit infrastruktur kontainer Anda dan berjalan melawan kerentanan dan paparan umum (CVE).
Berikut beberapa alat yang dapat Anda coba: Pingsafe Editors Choice, Datadog Cloud SIEM, Anchore, Sophos Cloud-Native Security, Bitdefender GravityZone, Sysdig secure, Aqua Security, dan RedHat Advanced Cluster Security untuk Kubernetes.
Baca juga: 11 Pemindai Keamanan Kontainer untuk menemukan Kerentanan
Praktik Terbaik untuk Keamanan Kontainer
Terlepas dari tantangan yang diajukan di atas dalam keamanan kontainer, berikut adalah perincian konvensi terbaik yang dapat Anda terapkan untuk mengoptimalkan keamanan kontainer di semua tahap siklus hidup aplikasi.
Mengamankan Gambar Anda
Anda menggunakan gambar wadah untuk membuat wadah. Kesalahan konfigurasi atau tindakan jahat sekecil apa pun dapat memicu kerentanan dalam wadah yang sedang diproduksi. Anda dapat mengatasi ini dengan:
- Menggunakan gambar yang dapat dipercaya – Saat tidak membuat gambar dari awal, Anda selalu memilih untuk bekerja dengan gambar dari sumber tepercaya. Repositori publik seperti Docker Hub memiliki gambar, termasuk gambar dengan malware dan kesalahan konfigurasi.
- Termasuk komponen yang diperlukan saja – Jika ada komponen yang tidak diperlukan aplikasi Anda, sebaiknya hapus saja. Misalnya, sistem UNIX secara alami menampilkan binari ‘awk’ dan “sed”.
- Menyertakan aplikasi Anda dalam gambar wadah – Gambar wadah mencengkeram subset dari sistem operasi (OS) dan aplikasi yang sedang berjalan. Untuk setiap alat dan perpustakaan yang ditarik ke dalam penampung, itu merupakan potensi ancaman. Sebaiknya sertakan aplikasi dalam gambar wadah untuk menyelesaikan ini. Ini dilakukan melalui biner yang dikompilasi secara statis dengan semua dependensi yang diperlukan.
Mengotomatiskan Pemindaian untuk Kerentanan dan Manajemen
Pemindaian dan pengelolaan kerentanan secara berkala terhadap wadah dan host Anda membantu mendeteksi kerentanan pada setiap tahap dalam siklus hidup aplikasi.
Dalam hal ini, Anda dapat mengaktifkan pemindaian kode untuk mendeteksi bug dan pengujian keamanan aplikasi statis (SAST) untuk menemukan kerentanan dalam kode aplikasi Anda. Analisis komposisi perangkat lunak (SCA) dapat memberikan visibilitas ke dalam komponen perangkat lunak sumber terbuka yang menghasilkan kumpulan materi perangkat lunak yang dapat dirujuk silang terhadap kerentanan sumber terbuka yang terdokumentasi.
Selain itu, pemindaian gambar menganalisis konten dan proses pembuatan gambar kontainer Anda untuk kerentanan. Dengan alat seperti Clair, Anda dapat memindai kerentanan yang diketahui. Alternatifnya, terapkan pengujian keamanan aplikasi dinamis (DAST), yang menunjukkan risiko keamanan berdasarkan perilaku kontainer. Alat DAST juga dapat melakukan pemindaian host, di mana Anda memeriksa komponen host kontainer (kernel host dan OS) untuk kesalahan konfigurasi.
Sementara langkah-langkah di atas diadopsi dalam proses berkelanjutan dari siklus hidup wadah, Anda dapat menganut filosofi “bergeser ke kiri”. Ini berarti menerapkan keamanan sejak awal siklus hidup pengembangan Anda. Alat yang bagus jika Anda memilih pendekatan ini adalah Sepele.
Mengamankan Container Registry
Pendaftar kontainer adalah cara terpusat yang efisien untuk menyimpan gambar dan mendistribusikannya. Seringkali, organisasi akan memiliki ribuan gambar yang disimpan di pendaftar publik atau pribadi. Ada beberapa langkah untuk memastikan semua anggota tim dan kolaborator menggunakan gambar bebas kerentanan.
Pertama, menerapkan kontrol akses pengguna (untuk pendaftar pribadi) menetapkan siapa yang dapat menerbitkan dan mengakses gambar. Meskipun ini adalah tindakan keamanan dasar, tindakan ini mencegah orang yang tidak berwenang memublikasikan, memodifikasi, atau menghapus gambar Anda.
Tindakan selanjutnya adalah menandatangani gambar Anda yang mengikat setiap gambar dengan orang yang menandatanganinya, sehingga sulit untuk mengganti gambar dengan gambar yang telah disusupi. Anda dapat menggunakan Kepercayaan Konten Docker teknik untuk menambahkan tanda tangan digital ke data yang dikirim dan diterima dari pendaftar. Terakhir, ingat bahwa memindai gambar Anda (terus-menerus) membantu mendeteksi kerentanan kritis apa pun.
Kontainer Pemantauan
Anda dapat mengoptimalkan visibilitas ke dalam beban kerja container melalui alat observasi. Alat tersebut harus dapat memantau dan menguji kerentanan di semua komponen dan memungkinkan pencatatan waktu peristiwa nyata untuk lingkungan yang di-container.
Alat observasi mendeteksi ancaman dengan mengaudit metrik dan log dari semua komponen tumpukan kontainer dan menganalisis ketidaknormalannya. Dengan pendekatan ini, Anda dapat segera memperbaiki kesalahan konfigurasi saat teridentifikasi.
Untuk mengumpulkan metrik penggunaan sumber daya, gunakan alat seperti cAdvisor atau kube-state-metrics. Untuk memantau aktivitas wadah dan kinerja klaster Anda, gunakan alat seperti Grafana atau Prometheus.
Jika Anda ingin menganalisis lalu lintas jaringan antar kontainer, gunakan Wireshark atau tcpdump. Jika Anda menggunakan layanan Kubernetes terkelola seperti (AKS), gunakan Azure Monitor untuk melacak sumber daya dan ancaman keamanan.
Selain itu, Azure Log Analytics dapat mengumpulkan dan menganalisis sumber daya AKS Anda. Jika Anda memilih Amazon EKS, Amazon CloudTrail bagus untuk mencatat dan menonton; gunakan Amazon Cloud Watch.
Menerapkan Keamanan Jaringan
Langkah-langkah kontrol keamanan jaringan dapat membantu melindungi terhadap akses kontainer yang tidak sah. Kriteria yang digunakan di sini adalah segmentasi jaringan yang mengisolasi wadah, membatasinya hanya untuk mengakses layanan yang diperlukan.
Jika Anda menjalankan aplikasi dalam container di Kubernetes, Anda dapat menggunakan kebijakan jaringan K8s untuk mengonfigurasi lalu lintas pod masuk dan keluar dalam kluster. Ini, pada gilirannya, membatasi lalu lintas ke pod tertentu berdasarkan label.
Keamanan lapisan transport (TLS) dapat ditambah untuk komunikasi pod. Anda dapat memilih teknik TLS atau secure sockets layer (SSL) untuk komunikasi aman antara server API dan komponen lainnya. Penyeimbang muatan adalah solusi yang baik jika Anda juga ingin membatasi masuknya lalu lintas ke kluster Anda.
Jika kluster Anda memiliki layanan mikro, Anda dapat memastikan lalu lintas yang aman melalui alat jaring layanan seperti Meshery atau Linkerd. Terakhir, amankan jaringan Anda jika Anda menggunakan cloud prodder untuk menghosting cluster Anda.
Jika Anda menggunakan Azure Kubernetes Service (AKS), gunakan grup keamanan jaringan (NSG) untuk manajemen lalu lintas. Jika Anda menggunakan Amazon Elastic Kubernetes Service (EKS), yang paling cocok adalah grup keamanan Amazon virtual private cloud (VPC).
Mengurangi Serangan Permukaan
Meminimalkan permukaan serangan memiliki dua manfaat; peningkatan kecepatan layanan dan menurunkan potensi pelanggaran keamanan.
Dengan menggunakan build multi-tahap, Anda dapat membuat gambar yang ringan dengan serangan permukaan yang kecil serta waktu boot dan performa yang lebih baik. Ada beberapa solusi untuk melakukan ini. Jika Anda menggunakan Linux, Anda dapat menggunakan Alpine Linux, BusyBox, atau Tiny Core Linux.
Untuk Ubuntu, ada Ubuntu Minimal. Anda juga dapat menggunakan Scratch, gambar Docker khusus – pada dasarnya wadah terbuka, untuk membuat gambar minimalis dari awal.
Membatasi Keistimewaan Kontainer
Prinsip yang digunakan di sini memerlukan pemberian izin minimum untuk melakukan tugas tertentu. Ketika kontainer dijalankan sebagai root, mereka memberi pengguna berbagai hak istimewa operasi seperti menginstal paket atau kekuatan operasi baca-tulis pada sistem operasi Anda.
Risikonya adalah penyerang dapat memanfaatkan eskalasi daya ke waktu proses kontainer jika disusupi. Karena itu, ada dua solusi yang layak. Anda dapat menjalankan wadah dalam mode tanpa akar atau membatasi kemampuan Kernel LINUX hanya untuk yang diperlukan untuk beban kerja wadah.
Mengelola Rahasia dengan Aman
File konfigurasi wadah dan buruh pelabuhan Anda harus bebas dari rahasia. Rahasia termasuk sertifikat, kata sandi, kunci antarmuka program aplikasi (API), dan token. Dan meskipun ini adalah praktik terbaik, Anda akan sering melihat rahasia ini di-hard-code ke dalam gambar proses build atau kode sumber.
Dalam kasus seperti itu, data sensitif masuk ke wadah dan di-cache di lapisan wadah perantara bahkan ketika wadah telah dihapus. Untuk kasus seperti itu, pendekatan terbaik adalah menerapkan solusi manajemen rahasia seperti Manajer Rahasia AWS Dan Kubah untuk menyimpan dan mengelola kredensial rahasia.
Memberdayakan Tim Anda
Sebagai tindakan keamanan terakhir, mengedukasi tim Anda tentang praktik keamanan terbaik sangatlah penting. Artinya, semua pemain tim Anda dapat mengidentifikasi dan merespons ancaman keamanan.
Cara yang baik untuk menerapkannya adalah dengan menambahkan keamanan kontainer ke proses orientasi tim Anda. Menawarkan pelatihan langsung, pembelajaran berkelanjutan, dan penilaian keamanan reguler membedakan tim DevOps Anda dengan membekali mereka dengan tren keamanan terbaru.
Pikiran Akhir
Keamanan wadah adalah proses berkelanjutan yang penting dari siklus hidup pengembangan perangkat lunak. Pendekatan terbaik untuk kueri ini adalah menggabungkan keamanan langsung dari kode aplikasi ke waktu proses kontainer, sistem operasi host, dan infrastruktur jaringan yang mendasarinya.
Anda dapat mewujudkannya dengan mengikuti rencana strategis yang melibatkan verifikasi kontainer dan hanya menggunakan yang berasal dari sumber tepercaya. Lakukan pengerasan wadah untuk memastikan mereka hanya memiliki layanan yang diperlukan di dalamnya. Menanamkan metode logging yang mudah diberlakukan melalui alat pemantauan. Segmentasikan jaringan Anda sehingga kontainer terpisah dari keseluruhan infrastruktur.
Selalu tandatangani gambar Anda untuk memvalidasi input dan output data melalui layanan Anda. Selain itu, Anda harus melakukan pemindaian rutin dan uji penetrasi untuk memeriksa kerentanan apa pun dan segera mengambil tindakan korektif. Dan seiring berkembangnya lanskap teknologi, selalu perbarui dengan praktik keamanan terbaru.
Selanjutnya, lihat cara mengotomatiskan keamanan.