Bagaimana Mengamankan Docker untuk Lingkungan Produksi?

Mari kita lihat cara mengeraskan dan mengamankan Docker untuk lingkungan produksi.


Meskipun Buruh pelabuhan telah memungkinkan pengembang perangkat lunak dan insinyur DevOps untuk membangun dan menyebarkan aplikasi dengan cepat, ia juga dilengkapi dengan permukaan serangan besar bagi peretas cyber untuk memanfaatkan.

Kami akan melihat cara mengamankan Docker pada platform Linux dari berikut ini.

  • Kelemahan konfigurasi
  • Eksekusi kode jarak jauh
  • Buffer Overflows
  • Pemalsuan gambar dan sebagainya.

Kami akan menggunakan alat-alat berikut, seperti Server notaris Docker untuk menandatangani gambar dan Keamanan bangku docker untuk memeriksa host, konfigurasi daemon, dan sebagainya.

Sebelum kami melanjutkan ke pengamanan, mari sentuh dasar-dasarnya.

Apa itu Teknologi Kontainer?

Teknologi kontainer memungkinkan pengembang atau insinyur DevOps untuk mengemas aplikasi sehingga dapat berjalan dengan dependensi yang diisolasi dari proses lain.

Ada sejumlah teknologi wadah di pasar, seperti Apache Mesos, Roket, lxc, dan Buruh pelabuhan. Meskipun mereka termasuk dalam kategori teknologi wadah, mereka berfungsi secara berbeda.

Perbedaan Antara VM & VE

Host mesin virtual sama sekali berbeda dari host lingkungan virtual. Pada mesin virtual, setiap aplikasi kemas dilengkapi dengan set perpustakaan dan sistem operasi sendiri sementara aplikasi, secara default, pada host lingkungan virtual seperti lxc, dan buruh pelabuhan berbagi kernel Linux.

Apa itu Docker??

Docker adalah teknologi wadah yang digunakan oleh jutaan orang untuk membuat aplikasi web dan menyebarkannya dari pengujian ke lingkungan produksi.

Mesin Docker

Engine Docker terdiri dari tiga komponen.

  • A Server: Komponen ini adalah proses atau daemon yang berjalan lama yang bertanggung jawab untuk mengelola gambar dan wadah.
  • REST API: Antarmuka ini memungkinkan daemon buruh pelabuhan dan alat klien buruh pelabuhan untuk berkomunikasi.
  • Alat Klien Docker: Alat klien Docker menggunakan komponen REST API untuk memberi tahu daemon docker untuk mengoperasikan aplikasi kemas.

Registri Tepercaya Docker

Docker Trusted Registry adalah solusi penyimpanan gambar dari Docker untuk bisnis platform perusahaan. Berbeda dengan hub buruh pelabuhan.  Sedangkan hub docker di-host di cloud, register tepercaya tepercaya adalah solusi penyimpanan di lokasi Edisi perusahaan Docker.

Kepercayaan Konten Docker

Docker Content Trust menyediakan kemampuan untuk menggunakan tanda tangan data untuk gambar yang dikirim dan diterima ke dan dari pendaftar docker jarak jauh seperti hub docker.

Linux Namespaces

Ruang nama Linux adalah fitur kernel Linux yang mengisolasi aplikasi kemas atau proses yang berjalan pada host lingkungan virtual dari proses lain.

Linux Control Groups (Cgroups)

Linux Control Groups adalah fitur kernel Linux yang memungkinkan Anda mengalokasikan sumber daya seperti waktu CPU, bandwidth jaringan, memori sistem, dan sebagainya untuk proses aktif pada host.

Kemampuan

Di Linux, ada fitur keamanan dalam subsistem kernel yang dapat diatur atau diberlakukan untuk membatasi proses istimewa seperti proses yang dijalankan oleh pengguna dengan UID 1. Meskipun proses atau pengguna yang istimewa dapat melewati izin akses kontrol diskresioner, mereka tidak dapat memintas aturan kemampuan.

Sekarang mari kita fokus pada keamanan.

Mengamankan Host Docker

Di bagian ini, kita akan melihat cara mengamankan host tempat Docker berada.

Memindai kernel Linux

Sebelum Anda menjadi tuan rumah buruh pelabuhan di platform Linux, Anda harus terlebih dahulu memeriksa kernel. Ada beberapa alat sumber terbuka seperti Lynis dan OpenVAS Anda dapat menggunakannya untuk memindai kernel Linux.

Salin atau tiru proyek Lynis dari Github menggunakan perintah git clone.

git clone https://github.com/CISOfy/lynis.git

Selanjutnya, gunakan perintah di bawah ini untuk menavigasi ke direktori lynis dan mengaudit sistem Linux.

cd lynis; ./lynis sistem audit

Kencangkan kernel Linux

Setelah Anda memindai kernel Linux untuk kerentanan berbasis sistem, Anda dapat menambahkan lapisan perlindungan tambahan ke kernel melalui keamanan grs. Ini menyediakan fitur keamanan seperti berikut ini.

  • Pencegahan eksploitasi buffer overflow
  • / tmp pencegahan kerentanan ras
  • / pembatasan proc yang tidak membocorkan informasi tentang pemilik proses.
  • Pencegahan eksekusi kode arbitrer di kernel dan sebagainya.

Awalnya, Anda bisa unduh tambalan secara gratis dari grsecurity dan menerapkannya ke kernel Anda saat ini. Tapi itu tidak memungkinkan perbaikan gratis lagi.

Instal Docker di VM

Alih-alih menginstal Docker langsung pada host Linux, Anda dapat menambahkan lapisan perlindungan tambahan dengan menginstalnya di dalam mesin virtual. Dengan melakukan hal itu, bahkan jika ada masalah kerentanan dengan kernel host, itu tidak akan mempengaruhi kontainer buruh pelabuhan.

Melindungi Privileges Root

Secara default, Docker membutuhkan hak akses root untuk membuat dan mengelola kontainer. Skrip berbahaya dapat memanfaatkan permukaan serangan ini untuk meningkat ke superuser di host Linux dan akhirnya mengakses file / folder, gambar, sertifikat, dll yang sensitif.

Untuk mencegahnya, kita dapat menggunakan perintah berikut. Kita dapat memutuskan untuk menghentikan kemampuan seperti setgid dan setuid untuk mencegah program atau proses lain mengubah GID mereka menjadi GID lain yang dapat mengakibatkan peningkatan hak istimewa. Anda juga bisa memeriksanya sini untuk daftar definisi kemampuan Linux.

Perintah di bawah ini menjalankan wadah webserver apache dan menjatuhkan kemampuan setgid dan setuid melalui –cap-drop untuk mencegah wadah apache mengubah GID dan UID ke UID dan GID lain.

GID dan UID dalam konteks ini masing-masing mengacu pada ID grup dan ID pengguna.

run docker -d –cap-drop SETGID –cap-drop SETUID apache

Pengguna Docker

Selain mencegah program atau proses lain, Anda juga dapat membuat pengguna untuk mengelola operasi buruh pelabuhan seperti buruh pelabuhan bukannya mengelolanya melalui superuser.

Anda dapat menambah atau membuat pengguna buruh pelabuhan melalui yang berikut:

sudo groupadd docker

Perintah di atas membuat grup yang disebut buruh pelabuhan

Selanjutnya, buat pengguna menggunakan perintah di bawah ini:

sudo useradd mike

Terakhir gunakan perintah di bawah ini untuk menambahkan mikrofon pengguna ke buruh pelabuhan grup untuk mengelola operasi buruh pelabuhan.

sudo usermod -aG docker mike

Mengelola Kontainer dengan Cgroups

Dalam lingkungan produksi, Anda mungkin memiliki lebih dari satu wadah.

Jika Anda tidak memiliki cgroup yang diinstal pada host Anda, Anda dapat menggunakan perintah berikut untuk menginstalnya dan kemudian memeriksa sini (untuk Ubuntu) tentang cara mengkonfigurasinya.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Kita dapat mengalokasikan kontainer ke sumber daya CPU yang terbatas melalui –cpu-share dan –cpuset-cpus

Contoh perintah berikut ini menunjukkan proses wadah prodnginx dijalankan hanya pada inti pertama melalui –cpuset-cpus dan mengalokasikan 20 CPU melalui –cpu-share sementara proses wadah proxnginx dijalankan pada dua core CPU pertama dan juga dialokasikan 20 CPU.

run docker -d –name prodnginx –cpuset-cpus = 0 –cpu-shares = 20 nginx
run buruh pelabuhan -d –nama testnginx –cpuset-cpus = 2 –cpu-shares = 20 nginx

Kemudian ketikkan statistik buruh pelabuhan perintah untuk melihat penggunaan CPU oleh wadah prodnginx dan testnginx

NAMA ID KONTAINER CPU% MEM PENGGUNAAN / BATAS MEM% NET I / O BLOCK I / O
845bea7263fb prodnginx 57.69% 1.258MiB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55.85% 1.25MiB / 985.2MiB 0.13% 578b / 0B 1.33MB / 0B

Merupakan ide bagus untuk mendefinisikan pembagian CPU untuk host buruh pelabuhan ketika Anda memiliki lebih dari satu kontainer yang beroperasi di dalamnya.

Mengelola Kontainer dengan Namespaces

Namespace dapat mencegah kontainer berjalan sebagai pengguna istimewa, yang dapat membantu menghindari serangan eskalasi hak istimewa.

Kami dapat mengaktifkan namespace di buruh pelabuhan dengan menggunakan file / etc / subuid dan / etc / subgid seperti yang ditunjukkan di bawah ini.

  • buat pengguna menggunakan perintah adduser

sudo adduser dockremap

  • Atur subtitle untuk pengguna dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subuid ‘

  • Kemudian atur subgid untuk pengguna dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subgid ‘

  • Buka file daemon.json dan isi dengan konten berikut untuk mengaitkan atribut userns-remap ke pengguna dockremap

vi /etc/docker/daemon.json
{

"userns-remap": "dockremap"

}

  • Tekan: wq untuk menyimpan dan menutup file daemon.json dan akhirnya restart buruh pelabuhan untuk mengaktifkan ruang nama pada host buruh pelabuhan

sudo /etc/init.d/docker restart

Mengamankan Docker Daemon

Juga diperlukan untuk mengkonfigurasi daemon Docker untuk memastikan komunikasi yang aman antara klien docker dan daemon docker melalui TLS.

Gunakan perintah berikut untuk membuka file daemon.json dan menyalin dan menempel konten berikut (ganti IP dengan yang sebenarnya) seperti yang ditunjukkan di bawah ini

vi daemon.json
{
"debug": Salah,
"tl": benar,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"tuan rumah": ["tcp: //192.168.16.5: 2376"]
}

Mengamankan Komponen Docker

Mari kita lihat bagaimana memanfaatkan alat-alat seperti CodeNotary dan server notaris untuk menandatangani gambar untuk menghindari pemalsuan gambar. Selain itu, perlu juga memindai gambar hanya untuk memastikan gambar tidak dikemas dengan kerentanan

Kami akan menggunakan server notaris Docker untuk menandatangani dan memverifikasi gambar dan penggunaan Mesin Jangkar untuk memindai gambar untuk mengetahui kerentanan.

Verifikasi Gambar dengan Server Notaris

Sebelum kita dapat menggunakan server Notaris untuk menandatangani gambar, kita perlu mengunduh dan menginstal docker-compose. Kami akan menggunakan Docker Compose untuk mengatur server notaris.

  • Jalankan perintah di bawah ini untuk mengunduh versi terbaru dari Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-compose

  • Terapkan izin yang dapat dieksekusi ke docker-compose seperti yang ditunjukkan di bawah ini

sudo chmod 700 / usr / local / bin / docker-compose

  • Anda dapat menguji apakah Anda telah berhasil menginstal docker-compose melalui perintah berikut

docker-compose –version

  • Sekarang kita dapat menginstal server notaris melalui docker-compose

git clone https://github.com/theupdateframework/notary.git

  • Perintah di atas mengkloning atau menyalin server notaris dari repositori notaris
  • Mulai server notaris dan penandatanganan melalui perintah di bawah ini:

pembuatan docker-compose
docker-compose up -d

  • Kemudian salin konfigurasi dan uji sertifikat ke direktori notaris lokal Anda menggunakan perintah di bawah ini

mkdir -p ~ / .notary && cp cmd / notaris / config.json cmd / notaris / root-ca.crt ~ / .notary

  • Sekarang jalankan perintah berikut untuk menghubungkan server notaris ke klien buruh pelabuhan

ekspor DOCKER_CONTENT_TRUST = 1
export DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Hasilkan pasangan kunci delegasi melalui perintah di bawah ini

docker trust key menghasilkan mike –dir ~. / docker / trust

  • Sekarang mari kita membuat target key baru jika repositori tidak ada

docker trust signer add –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Kemudian Anda bisa menandatangani gambar buruh pelabuhan Anda menggunakan tanda trust docker perintah. Anda perlu menarik gambar buruh pelabuhan dari hub buruh pelabuhan dan menandai ulang menggunakan perintah docker pull dan docker masing-masing.

docker trust sign mikedem0 / nginx: terbaru

Anda juga dapat memindai gambar buruh pelabuhan untuk kerentanan dan kekurangan konfigurasi. Anda dapat memeriksa di sini untuk mengetahui bagaimana Anda menggunakan Anchor Engine untuk memindai kerentanan dan Keamanan Docker Bench untuk memeriksa kelemahan konfigurasi.

Saya harap penjelasan di atas memberi Anda gambaran tentang Docker keamanan untuk lingkungan produksi. Anda mungkin juga ingin melihat kursus tentang Udemy ini meretas dan mengamankan wadah Docker.

TAGS:

  • Buruh pelabuhan

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map