TDCTF Academy Logo TDCTF ACADEMY

Docker Security

Docker telah menjadi standar de facto dalam manajemen container, namun keamanan konfigurasi Docker daemon dan isolasi container sangat krusial untuk mencegah eskalasi privilege dan kebocoran antar-container. Bab ini membahas aspek keamanan Docker dari sisi daemon, isolasi, runtime, dan resource.

Docker Daemon Security

Secara default, Docker daemon berjalan sebagai root, yang memberikan akses penuh ke host. Untuk mengurangi risiko ini:

  • Rootless Mode: Menjalankan Docker daemon tanpa hak akses root menggunakan dockerd-rootless-setuptool.sh. Rootless mode memanfaatkan user namespace Linux untuk memetakan ulang UID, sehingga proses dalam container berjalan sebagai non-root di host. Cocok untuk lingkungan multi-tenant dan development.
  • TLS Authentication: Docker daemon dapat dikonfigurasi dengan TLS mutual authentication menggunakan --tlsverify, --tlscacert, --tlscert, dan --tlskey. Ini mencegah akses tidak sah ke Docker API dari jaringan eksternal.

Konfigurasi TLS pada daemon:

{
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem"
}

Container Isolation

Container Linux menggunakan kernel namespace dan cgroups sebagai fondasi isolasi:

  • Namespaces: Setiap container mendapat namespace sendiri untuk PID, network, mount, UTS, IPC, dan user. Namespace ini membatasi apa yang bisa dilihat dan diakses oleh proses di dalam container.
  • cgroups (Control Groups): Membatasi dan mengalokasikan resource seperti CPU, memori, disk I/O, dan jaringan. Dengan cgroups, satu container tidak bisa menghabiskan resource host secara berlebihan.
  • Seccomp (Secure Computing Mode): Menerapkan profil system call filtering. Docker menyediakan profil default yang memblokir sekitar 44 dari 300+ system call berbahaya seperti mount, reboot, dan kexec_load. Profil kustom dapat dibuat dengan seccomp JSON.
  • AppArmor / SELinux: Mandatory Access Control (MAC) yang membatasi akses container ke resource host. Docker mengintegrasikan AppArmor secara default di Ubuntu/Debian dengan profil docker-default, dan SELinux di RHEL/CentOS dengan tipe container_t.

Security Options

Opsi --security-opt memberikan kontrol granular:

  • no-new-privileges: Mencegah proses dalam container mendapatkan privilege tambahan melalui setuid binary atau capabilities. Sangat disarankan untuk production.
  • read-only-rootfs: Membuat root filesystem container menjadi read-only, mencegah penulisan file sistem yang tidak sah. Volume writable tetap bisa di-mount untuk data.
  • Capabilities: Docker secara default menghapus semua capability berbahaya dan hanya menyisakan sekitar 14 capability. Dapat dipersempit dengan --cap-drop=ALL --cap-add=NET_BIND_SERVICE.

Contoh konfigurasi:

docker run --security-opt no-new-privileges \
--security-opt seccomp=/path/to/profile.json \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
nginx

User Namespace Remapping

Dengan userns-remap, Docker memetakan UID root container (0) ke UID non-privileged di host (misal 100000). Ini berarti jika terjadi container breakout, attacker hanya memiliki akses sebagai user non-root di host. Konfigurasi dilakukan di /etc/docker/daemon.json:

{
"userns-remap": "default"
}

Runtime Security

Runtime alternatif memberikan isolasi lebih kuat dari kernel sharing tradisional:

  • gVisor: Menyediakan kernel virtual userspace (Sentry) yang meng-intercept system call container. Hanya sekitar 40% system call yang diimplementasikan, sisanya di-block atau di-emulasi. Cocok untuk workload untrusted.
  • Kata Containers: Menjalankan setiap container dalam VM ringan (microVM) menggunakan hypervisor seperti QEMU atau Firecracker. Setiap container mendapat kernel sendiri, memberikan isolasi setara VM.

Docker Bench Security

Docker Bench Security adalah script audit berbasis CIS Benchmark untuk Docker. Tools ini memeriksa 100+ kontrol keamanan di 6 area: host configuration, Docker daemon configuration, container images, container runtime, Docker security operations, dan Docker swarm. Jalankan dengan:

docker run --rm --net host --pid host \
-v /etc:/etc:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
docker/docker-bench-security

Resource Limits

Resource limits mencegah Denial of Service pada host:

  • CPU: --cpus=1.5 membatasi penggunaan CPU hingga 1.5 core. --cpu-quota dan --cpu-period memberikan kontrol lebih granular.
  • Memory: --memory=512m membatasi memori maksimal. Kombinasikan dengan --memory-reservation untuk soft limit dan --memory-swap=-1 untuk swap.
  • ulimit: Mengatur resource per-process seperti nofile (max open files), nproc (max processes). Contoh: --ulimit nofile=1024:2048.

Kesimpulannya, keamanan Docker membutuhkan pendekatan berlapis - dari konfigurasi daemon yang aman, isolasi container yang ketat, hingga runtime alternatif untuk workload berisiko tinggi. Audit rutin dengan Docker Bench Security dan penerapan resource limits menjadi praktik wajib di lingkungan production.

PADA HALAMAN INI