Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Membangun kontainer yang aman: mengurangi kerentanan

18085612-thumb.jpg
Blog

Membangun kontainer yang aman: mengurangi kerentanan

[ad_1]

Dalam lingkungan pengembangan yang berubah dengan cepat saat ini, aplikasi dalam container telah menjadi solusi tepat bagi banyak organisasi. Mereka menawarkan skalabilitas, portabilitas dan efisiensi. Namun, lingkungan yang terkontainerisasi juga mempunyai tantangannya sendiri, terutama ketika menyangkut kerentanan keamanan. Salah satu cara paling efektif untuk memitigasi risiko ini adalah dengan fokus pada gambar inti yang digunakan untuk container.

Mengapa gambar dasar itu penting

Gambar dasar berfungsi sebagai dasar untuk setiap wadah. Jika gambar dasar mengandung kerentanan, kerentanan tersebut diwarisi oleh setiap container yang dibangun di atasnya. Hal ini dapat membuat aplikasi Anda terkena potensi serangan meskipun lapisan keamanan sudah terpasang di infrastruktur. Oleh karena itu, memilih gambar dasar yang bersih dan bebas kerentanan sangat penting untuk mengamankan aplikasi dalam container Anda.

Langkah-langkah untuk Mengurangi Kerentanan pada Gambar Dasar

1. Mulailah dengan gambar dasar minimal

Salah satu cara paling efektif untuk mengurangi kerentanan adalah dengan menggunakan gambar dasar minimal. Ini adalah versi image sistem operasi yang disederhanakan dan hanya menyertakan komponen penting yang diperlukan untuk menjalankan aplikasi Anda. Membatasi jumlah paket dan ketergantungan akan mengurangi permukaan serangan, mengurangi kemungkinan munculnya kerentanan.

Gambar dasar minimal yang populer meliputi:

  • Alpine Linux: Dikenal karena bobotnya yang ringan, Alpine sering kali menjadi pilihan ideal untuk gambar dasar minimalis.
  • Gambar tanpa dispersi: Gambar-gambar ini hanya berisi aplikasi dan dependensi runtime-nya, sehingga memberikan permukaan serangan yang lebih kecil.
  • Menggores: Ini adalah gambar terkecil yang tersedia dan tidak mengandung lapisan sistem operasi, sehingga memberikan nilai minimum mutlak untuk menjalankan container.

Contoh penggunaan Scratch

Gambar dasar awal benar-benar kosong, menghilangkan kemungkinan mentransfer kerentanan komponen sistem operasi. Namun, ini mengharuskan Anda untuk mengkompilasi aplikasi Anda dan secara statis menyertakan semua dependensi yang diperlukan.

Berikut adalah contoh penggunaan awal:

FROM scratch

COPY my-static-app /my-static-app

CMD ["/my-static-app"]

  • Dalam contoh ini, my-static-app aplikasi harus dikompilasi secara statis tanpa ketergantungan. Konfigurasi ini secara signifikan mengurangi permukaan serangan karena tidak ada lapisan sistem operasi yang mendasarinya, sehingga menghindari berbagai jenis kerentanan.

2. Gunakan gambar resmi

Gambar dasar resmi yang disediakan oleh repositori tepercaya lebih aman karena dipelihara dan diperbarui secara berkala oleh komunitas besar atau penyedia tepercaya. Anda berisiko memasukkan komponen yang tidak dirawat dengan baik atau berbahaya ke dalam sistem Anda saat Anda menggunakan gambar pihak ketiga atau tidak resmi.

Selalu verifikasi bahwa Anda menggunakan versi terbaru dari gambar dasar, karena versi yang lebih lama mungkin berisi perangkat lunak usang dengan kerentanan yang diketahui.

3. Pindai gambar untuk mencari kerentanan

Bahkan dengan gambar resmi yang minimal, kerentanan mungkin masih ada. Oleh karena itu, sangat penting untuk memindai gambar dasar Anda secara teratur untuk mengetahui kerentanan yang diketahui. Di bawah ini adalah contoh cara menggunakan alat analisis seperti Clair, Trivy, dan Anchore.

Contoh: Memindai dengan Trivy

Trivy adalah alat sederhana namun kuat untuk memindai gambar kontainer untuk mencari kerentanan.

trivy image my-docker-image

Trivy akan menganalisis gambar dan memberikan laporan yang menunjukkan kerentanan yang teridentifikasi beserta tingkat keparahannya.

Contoh: Memindai dengan Clair

Clair adalah alat sumber terbuka yang dirancang untuk berintegrasi dengan Docker dan Kubernetes untuk memindai dan memantau kerentanan pada image container Anda. Untuk memindai gambar menggunakan Clair, Anda harus memasukkannya terlebih dahulu ke registri Docker dan kemudian memicu pemindaian:

clair push my-docker-image

clair report my-docker-image

Ini akan menghasilkan laporan kerentanan berdasarkan database Common Vulnerabilities and Exposures (CVE).

Contoh: Memindai dengan Anchore

Anchore adalah alat pemindaian kerentanan canggih lainnya, dengan integrasi mendalam ke dalam saluran CI/CD.

Anda dapat memindai gambar menggunakan Anchore CLI:

anchore-cli image add my-docker-image

anchore-cli image vuln my-docker-image all

  • Anchore akan membuat laporan terperinci yang menunjukkan kerentanan yang terkonfirmasi dan rekomendasi remediasi.

4. Perbarui gambar dasar secara teratur

Kerentanan selalu ditemukan pada komponen perangkat lunak. Untuk tetap terdepan dalam menghadapi potensi ancaman, pastikan gambar dasar Anda diperbarui secara rutin. Alat otomatis dan pipeline integrasi berkelanjutan/penerapan berkelanjutan (CI/CD) dapat membantu mengotomatiskan proses pembuatan kembali container dengan image dasar terbaru yang telah di-patch.

Pembaruan rutin harus menjadi bagian dari alur kerja keamanan Anda. Disarankan agar Anda memiliki proses yang secara otomatis memberi tahu Anda ketika versi baru dari gambar dasar tersedia dan membantu Anda membangun kembali dan menerapkan ulang kontainer Anda dengan gambar yang diperbarui.

5. Hapus paket yang tidak diperlukan

Masalah umum dengan gambar dasar adalah penyertaan paket yang tidak perlu yang memperbesar ukuran gambar dan meningkatkan permukaan serangan. Setiap paket tambahan dalam gambar dasar meningkatkan risiko adanya kerentanan. Setelah memilih gambar dasar minimal, periksa apakah ada paket yang tidak diperlukan dan hapus paket tersebut untuk lebih memperkuat gambar.

Contoh dengan Alpine

FROM alpine:3.16

RUN apk --no-cache add bash

  • Contoh ini menunjukkan hanya menginstal perangkat lunak yang diperlukan (bash) dan menggunakan --no-cache tandai untuk memastikan tidak ada data yang tidak perlu tertinggal dalam gambar, sehingga membantu membuatnya tetap sederhana dan aman.

6. Pembangunan multi-tahap

Pembangunan multi-tahap di Docker memungkinkan Anda menggunakan beberapa gambar dasar di Dockerfile. Hal ini membantu menjaga gambar akhir tetap bersih dengan memisahkan lingkungan build dari lingkungan runtime. Dengan kata lain, Anda dapat menggunakan gambar yang lebih besar dengan semua alat pembangunan yang diperlukan selama proses konstruksi, namun menggunakan gambar yang lebih sederhana dan lebih bersih selama tahap produksi akhir, sehingga secara signifikan mengurangi jumlah komponen yang harus dipelihara atau diamankan.

Contoh konstruksi multi tahap

# Stage 1: Build stage

FROM golang:1.20 as build

WORKDIR /app

COPY . .

RUN go build -o my-app

# Stage 2: Run stage with a minimal base image

FROM scratch

COPY --from=build /app/my-app /my-app

CMD ["/my-app"]

  • Dalam contoh ini, pembangunan dilakukan pada image Golang yang lebih besar, namun container eksekusi akhir menggunakan image yang berfungsi, sehingga secara signifikan mengurangi ukuran dan permukaan serangan container akhir.

Praktik terbaik untuk mengamankan gambar dasar

1. Gunakan Tag yang Tidak Dapat Diubah

Saat menentukan gambar dasar di Dockerfile Anda, hindari penggunaan latest label. ITU latest Tag dapat menimbulkan ketidakpastian ke dalam sistem Anda karena dapat mereferensikan versi yang berbeda dari waktu ke waktu. Sebagai gantinya, gunakan tag yang tidak dapat diubah (seperti nomor versi tertentu) yang mengunci dependensi Anda pada status yang diketahui.

2. Menerapkan kebijakan keamanan

Gunakan alat seperti Open Policy Agent (OPA) atau Kubernetes Admission Controllers untuk menerapkan kebijakan yang mencegah pengembang menggunakan image dengan kerentanan yang diketahui. Kebijakan ini dapat diintegrasikan ke dalam saluran CI/CD Anda untuk menerapkan praktik yang aman di seluruh siklus pengembangan.

3. Pertahankan Registri Gambar yang Andal

Gunakan registri citra tepercaya, seperti Docker Hub atau registri citra internal organisasi Anda. Registri ini menyediakan gambar yang ditandatangani, yang memastikan bahwa gambar yang Anda ekstrak tidak dirusak. Selain itu, memindai gambar registri Anda untuk mencari kerentanan sebelum penerapan memastikan bahwa gambar tersebut memenuhi standar keamanan Anda.

Kesimpulan

Mengurangi kerentanan pada gambar dasar adalah langkah mendasar menuju pembangunan aplikasi dalam container yang aman. Dengan memulai dengan image resmi minimal, memindai kerentanan, dan memperbarui image dasar secara rutin, Anda dapat mengurangi risiko yang terkait dengan kerentanan container secara signifikan. Dikombinasikan dengan praktik terbaik seperti pembangunan multi-tahap, gambar dasar yang berfungsi, dan tag yang tidak dapat diubah, Anda sudah siap untuk menciptakan lingkungan kontainer yang aman dan tangguh.

Dengan menerapkan strategi ini, organisasi dapat memperkuat postur keamanan mereka, mengurangi paparan terhadap risiko, dan mempertahankan jalur pengembangan yang lebih aman.

[ad_2]