Image aplikasi tidak hanya memuat kode aplikasi, tetapi juga seluruh paket bawaan image dasarnya, dan paket itulah yang sering menjadi sumber masalah keamanan. Topik ini membahas cara menemukan kerentanan pada image, memindai image aplikasi catatan dengan docker scout, membaca laporan pemindaiannya, dan menentukan tindak lanjut yang benar setelah kerentanan ditemukan. Setelah topik ini dibaca, pemindaian dapat dijalankan pada image apa pun dan laporannya dapat ditafsirkan tanpa menebak.
Kerentanan, paket, dan CVE#
Image dasar python:3.12-slim membawa puluhan hingga ratusan paket Debian, dan setiap paket memiliki sejarah versinya sendiri. Kerentanan (vulnerability), yaitu celah keamanan pada sebuah paket yang dapat dieksploitasi oleh pihak yang tidak berhak, dapat ikut terbawa ke dalam image meskipun kode aplikasi sendiri ditulis dengan bersih. Kerentanan tersebut dicatat pada basis data kerentanan dan diberi penanda CVE (Common Vulnerabilities and Exposures), kode resmi berformat CVE-tahun-nomor yang mengidentifikasi satu kerentanan secara unik, misalnya CVE-2025-1234.
Image mewarisi kerentanan dari image dasarnya. Image aplikasi dibangun di atas image dasar, sehingga seluruh paket dan seluruh kerentanan image dasar ikut ada pada image aplikasi. Pemelihara Debian yang menerbitkan versi paket perbaikan tidak otomatis memperbarui image yang sudah dibangun, karena image bersifat tak berubah. Karena itu image perlu dipindai secara berkala, bukan sekali seumur hidup proyek. Basis data kerentanan sendiri bersifat publik dan bertambah hampir setiap hari, sehingga pemindaian selalu menghasilkan jawaban yang mutakhir pada saat dijalankan.
Memindai image dengan docker scout#
Perintah docker scout cves memindai isi image, memetakan paket yang ditemukan pada setiap layer, lalu mencocokkannya dengan basis data kerentanan yang diperbarui terus-menerus. Hasil pemindaian berupa daftar temuan yang berperingkat, dari kerentanan paling serius hingga paling ringan, ditambah penanda CVE dan paket yang bersangkutan. Pemindaian dapat dijalankan pada image yang berada di penyimpanan lokal maupun pada image yang sudah diunggah ke registry, server tempat image disimpan dan dibagikan.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# memindai image aplikasi catatan terhadap basis data kerentanan
docker scout cves aplikasi-catatanPerintah pada blok di atas menganalisis image aplikasi-catatan lalu menampilkan laporan di terminal. Bentuk keluarannya bergantung pada isi image dan isi basis data kerentanan saat pemindaian dijalankan. Bentuk laporan tersebut dijelaskan pada bagian berikut, sedangkan pemindaian langsung memerlukan daemon Docker yang tidak tersedia di sandbox.
Membaca laporan pemindaian#
Laporan pemindaian mengelompokkan temuan ke dalam empat tingkat keparahan, dari critical hingga low, dan merangkum jumlahnya di bagian atas. Tabel berikut memuat makna umum setiap tingkat.
| Tingkat keparahan | Makna umum |
|---|---|
| critical | kerentanan yang mudah dieksploitasi dengan dampak paling luas |
| high | dampak besar dengan syarat eksploitasi yang lebih sempit |
| medium | dampak terbatas atau membutuhkan kondisi khusus |
| low | dampak kecil dan umumnya cukup dicatat untuk pemantauan |
Bagian isi laporan memuat rincian setiap temuan. Tabel berikut memetakan bagian laporan terhadap isinya agar laporan yang panjang dapat dibaca secara sistematis.
| Bagian laporan | Isinya |
|---|---|
| Ringkasan peringkat | jumlah temuan pada tiap tingkat keparahan |
| Penanda CVE | kode kerentanan berformat CVE-tahun-nomor |
| Paket dan versi terpasang | nama paket beserta versi yang terpasang pada image |
| Versi perbaikan | versi paket yang sudah menutup celah tersebut |
| Saran tindakan | recommended fix, umumnya memperbarui image dasar lalu membangun ulang |
Cara membaca satu temuan mengikuti urutan yang tetap. Mulai dari tingkat keparahan untuk menentukan urutan pengerjaan, lanjut ke nama paket dan versi terpasang untuk memastikan paket itu benar-benar terbawa, lalu bandingkan versi terpasang dengan versi perbaikan. Temuan yang versi terpasangnya sudah lebih baru daripada versi perbaikan dapat diabaikan, sedangkan temuan yang lebih tua menunggu pembaruan. Daftar temuan yang panjang dibaca dari tingkat critical dan high lebih dahulu, karena dua tingkat itulah yang biasanya memengaruhi keputusan rilis.
Tindak lanjut: memperbarui image dasar#
Tindak lanjut utama atas temuan kerentanan adalah memperbarui image dasar lalu membangun ulang image aplikasi, dan prosedurnya berurutan sebagai berikut.
- Tarik image dasar terbaru dengan
docker pull python:3.12-slim, karena tag tersebut menunjuk versi terbaru yang terus diperbarui oleh pemeliharanya. - Bangun ulang image aplikasi dengan
docker build -t aplikasi-catatan ., sehingga layer yang memuat paket bawaan terbentuk dari image dasar yang sudah diperbarui. - Pindai ulang dengan
docker scout cves aplikasi-catatan, lalu bandingkan jumlah temuan dengan laporan sebelumnya untuk memastikan perbaikannya masuk.
Urutan ini menggantikan kebiasaan menambal di dalam container, misalnya menjalankan apt-get upgrade pada container yang sedang berjalan. Container sengaja dibuat sementara, sehingga tambalan di dalamnya hilang begitu container dihapus dan dibuat ulang dari image. Lebih buruk lagi, image aslinya tetap rentan, sehingga tambalan tersebut menimbulkan rasa aman yang menyesatkan.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul saat pemindaian image dipraktikkan.
- Menganggap jumlah temuan sebagai satu-satunya ukuran. Image dasar umumnya membawa banyak temuan low yang tidak memengaruhi aplikasi, sedangkan satu temuan critical pada paket yang benar-benar dipakai jauh lebih penting. Perbaikannya, prioritaskan berdasarkan tingkat keparahan dan pemakaian paket.
- Memindai sekali lalu berhenti. Basis data kerentanan bertambah terus, sehingga hasil pemindaian pekan lalu mungkin sudah tidak akurat. Perbaikannya, jadikan pemindaian bagian rutin dari siklus rilis, misalnya pada pipeline CI.
- Memperbarui image dasar tanpa membangun ulang. Image aplikasi lama masih membawa layer lama yang berisi paket rentan. Perbaikannya, selalu pasangkan penarikan image dasar terbaru dengan pembangunan ulang dan pemindaian ulang.
Ringkasan#
- Kerentanan adalah celah pada paket image, ditandai kode CVE, dan diwarisi image aplikasi dari image dasarnya.
docker scout cvesmemindai image terhadap basis data kerentanan dan menampilkan temuan berperingkat beserta versi perbaikannya.- Laporan dibaca dari tingkat keparahan, lalu paket, lalu perbandingan versi terpasang dengan versi perbaikan.
- Tindak lanjut yang benar adalah memperbarui image dasar dan membangun ulang image, bukan menambal container yang sedang berjalan.
Referensi#
- Docker Scout — Docker Docs — Dokumentasi pemindaian kerentanan dengan docker scout dan cara membaca laporannya.
- Docker security — Docker Docs — Ikhtisar keamanan container yang menjadi latar pentingnya pemindaian image.