10 praktik terbaik untuk mengamankan gambar Docker. Bagian 1

Terjemahan artikel disiapkan khusus untuk siswa kursus Keamanan Linux .




Dalam artikel ini, kami ingin fokus pada Docker dan mendiskusikan tips dan trik yang menyediakan proses yang lebih aman dan berkualitas tinggi untuk memproses gambar Docker.

Jadi, mari kita mulai dengan daftar 10 praktik terbaik keamanan gambar Docker kami.

1. Lebih suka gambar dasar minimal


Seringkali Anda dapat memulai proyek dengan gambar wadah Docker dasar, misalnya, dengan menulis Dockerfile dengan FROM node "secara default". Namun, ketika menentukan gambar node, perlu diingat bahwa distribusi Debian Stretch yang diinstal penuh adalah gambar dasar yang digunakan untuk membangunnya. Jika proyek Anda tidak memerlukan pustaka atau utilitas sistem umum, maka lebih baik untuk menghindari menggunakan sistem operasi yang berfungsi penuh (OS) sebagai gambar dasar.

Dalam Laporan Status Keamanan Sumber Terbuka Snyk 2019, kami menemukan bahwa banyak wadah Docker populer yang ditampilkan di situs web Docker Hub berisi gambar yang mengandung banyak kerentanan yang diketahui. Misalnya, ketika Anda menggunakan gambar universal docker pull node , Anda benar-benar memasukkan OS ke dalam aplikasi Anda, yang, seperti yang Anda tahu, memiliki 580 kerentanan di pustaka sistemnya.



Seperti yang dapat Anda lihat dari laporan keamanan, masing-masing dari sepuluh gambar Docker paling populer yang kami uji di Docker Hub berisi kerentanan yang diketahui. Memilih gambar minimal yang hanya menggabungkan alat sistem yang diperlukan dan perpustakaan yang diperlukan untuk menjalankan proyek Anda, Anda juga meminimalkan ruang bagi penyerang untuk menyerang dan memastikan bahwa Anda menyediakan OS yang aman.

PELAJARI LEBIH LANJUT TENTANG KESELAMATAN IMAGE ANDA

2. Paling tidak disukai pengguna


Ketika Dockerfile tidak menentukan USER , secara default wadah berjalan sebagai pengguna root. Dalam praktiknya, ada beberapa alasan mengapa wadah harus memiliki hak akses root. Docker memulai wadah secara default menggunakan pengguna root. Kemudian, ketika namespace ini dipetakan ke pengguna root dalam wadah yang berjalan, maka kontainer tersebut berpotensi memiliki akses root pada host Docker. Menjalankan aplikasi dalam sebuah wadah dengan pengguna root semakin memperluas ruang serangan dan menyediakan cara mudah untuk meningkatkan hak istimewa jika aplikasi itu sendiri rentan terhadap eksploitasi.

Untuk meminimalkan paparan, aktifkan pembuatan pengguna dan grup khusus di gambar Docker untuk aplikasi; menggunakan arahan USER di Dockerfile untuk memverifikasi bahwa kontainer memulai aplikasi dengan akses paling istimewa.

Pengguna khusus mungkin tidak ada dalam gambar; buat pengguna ini menggunakan instruksi di Dockerfile .

Berikut ini adalah contoh lengkap tentang bagaimana melakukan ini untuk gambar Ubuntu universal:

 FROM ubuntu RUN mkdir /app RUN groupadd -r lirantal && useradd -r -s /bin/false -g lirantal lirantal WORKDIR /app COPY . /app RUN chown -R lirantal:lirantal /app USER lirantal CMD node index.js 

Contoh di atas:

  • membuat pengguna sistem (-r) tanpa kata sandi, tanpa menginstal direktori home dan tanpa shell
  • menambahkan pengguna yang kami buat ke grup yang ada yang kami buat sebelumnya (menggunakan groupadd)
  • menambahkan argumen terakhir ke nama pengguna yang ingin kita buat, dalam kombinasi dengan grup yang kita buat

Node.js dan gambar alpine, mereka sudah menyertakan pengguna generik yang disebut node . Berikut ini adalah contoh Node.js menggunakan node pengguna generik:

 FROM node:10-alpine RUN mkdir /app COPY . /app RUN chown -R node:node /app USER node CMD [“node”, “index.js”] 

Jika Anda mengembangkan aplikasi Node.js, Anda dapat merujuk ke praktik terbaik Docker dan Node.js resmi.

3. Masuk dan verifikasi gambar untuk menghindari serangan MITM


Keaslian gambar Docker merupakan masalah. Kami mengandalkan gambar-gambar ini karena kami benar-benar menggunakannya sebagai wadah yang menjalankan kode kami dalam produksi. Oleh karena itu, penting untuk memastikan bahwa gambar yang kami gunakan adalah persis yang diberikan oleh penerbit, dan tidak ada pihak yang mengubahnya. Pemalsuan dapat terjadi melalui koneksi kabel antara klien Docker dan registri, atau dengan meretas registri akun pemilik untuk mengganti gambar.

Memvalidasi Gambar Docker


Pengaturan Docker default memungkinkan Anda untuk mengambil gambar Docker tanpa memverifikasi keasliannya, yang berpotensi menyebabkan penggunaan gambar Docker yang asal dan pembuatnya tidak diverifikasi.

Disarankan agar Anda selalu memverifikasi gambar sebelum menggunakannya, terlepas dari kebijakan. Untuk bereksperimen dengan validasi, aktifkan sementara Docker Content Trust dengan perintah berikut:

 export DOCKER_CONTENT_TRUST=1 

Sekarang coba tarik gambar yang Anda tahu tidak ditandatangani - permintaan akan ditolak dan gambar tidak akan diterima.

Gambar Docker Tanda Tangan


Pilih gambar bersertifikasi Docker dari mitra tepercaya yang telah diverifikasi dan diawasi oleh Docker Hub, alih-alih gambar yang asal dan keasliannya tidak dapat Anda verifikasi.

Docker memungkinkan Anda untuk menandatangani gambar dan dengan demikian memberikan tingkat perlindungan lain. Untuk menandatangani gambar, gunakan Docker Notary . Notaris memeriksa tanda tangan gambar untuk Anda dan memblokir peluncuran gambar jika tanda tangan gambar tidak valid.

Ketika Kepercayaan Konten Docker diaktifkan, seperti yang kami tunjukkan di atas, perakitan gambar Docker menandatangani gambar. Ketika gambar pertama kali masuk, Docker membuat dan menyimpan kunci pribadi di ~/docker/trust untuk pengguna Anda. Kunci pribadi ini kemudian digunakan untuk menandatangani gambar tambahan apa pun saat dibuat.

Untuk instruksi terperinci tentang pengaturan gambar yang ditandatangani, lihat dokumentasi Docker resmi .

4. Temukan, perbaiki, dan lacak kerentanan dalam komponen sumber terbuka


Ketika kami memilih gambar dasar untuk wadah Docker kami, kami secara tidak langsung mengambil risiko semua masalah keamanan yang dikaitkan dengan gambar dasar. Ini dapat berupa pengaturan default yang dikonfigurasi dengan buruk yang tidak berkontribusi pada keamanan sistem operasi, serta pustaka sistem yang terkait dengan gambar dasar yang telah kita pilih.

Langkah pertama yang baik adalah menggunakan gambar dasar minimum sebanyak mungkin untuk menjalankan aplikasi tanpa masalah. Ini membantu mengurangi ruang serangan dengan membatasi kerentanan; di sisi lain, itu tidak melakukan pemeriksaannya sendiri dan tidak melindungi Anda dari kerentanan di masa depan yang dapat diidentifikasi untuk versi gambar dasar yang digunakan.

Oleh karena itu, salah satu cara untuk melindungi terhadap kerentanan dalam perangkat lunak sumber terbuka adalah dengan menggunakan alat seperti Snyk untuk menambahkan pemindaian berkelanjutan dan pelacakan kerentanan yang dapat ada di semua lapisan gambar Docker yang digunakan.



Gambar Docker dipindai untuk mengetahui kerentanan yang diketahui menggunakan perintah ini:

 # fetch the image to be tested so it exists locally $ docker pull node:10 # scan the image with snyk $ snyk test --docker node:10 --file=path/to/Dockerfile 

Gambar Docker dipantau untuk kerentanan yang diketahui, sehingga setelah menemukan kerentanan baru di gambar Snyk, ia dapat memberi tahu dan memberikan rekomendasi tentang cara memperbaikinya, sebagai berikut:

 $ snyk monitor --docker node:10 

Berdasarkan pemindaian yang dilakukan oleh pengguna Snyk, kami menemukan bahwa 44% dari pemindaian gambar Docker mengungkapkan kerentanan yang diketahui dan yang tersedia untuk gambar dasar yang lebih baru dan lebih aman. Konsultasi perbaikan ini, di mana pengembang dapat mengambil tindakan dan memperbarui gambar Docker mereka, adalah unik untuk Snyk.
Snyk juga menemukan bahwa untuk 20% dari semua pemindaian gambar Docker, baru saja membangun kembali gambar Docker untuk mengurangi kerentanan . Cari tahu lebih lanjut tentang jumlah laporan keamanan 2019 terbuka di blog Snyk.

Akhir dari bagian pertama.

Lanjutan di bagian kedua , dan sekarang kami mengundang semua orang ke webinar gratis dengan topik: “Kerentanan Docker. Melarikan diri dari wadah ke tuan rumah dengan eskalasi hak istimewa . "

Source: https://habr.com/ru/post/id480970/


All Articles