β˜€οΈSiang
Keamanan

Container Security Best Practices

Panduan lengkap container security β€” Docker hardening, image scanning, Kubernetes RBAC, runtime protection, hingga compliance

Artikel: Container Security Artikel: Container Security

1. Pengenalan Container Security

Container Security mencakup praktik, tools, dan kebijakan untuk melindungi containerized applications sepanjang lifecycle β€” dari build, deploy, hingga runtime. Container membawa tantangan keamanan unik karena sharing kernel, ephemeral nature, dan jumlah yang sangat banyak.

πŸ“‹ Container Security Lifecycle
  • Build β€” Secure Dockerfile, base image, dependency scanning
  • Ship β€” Image signing, registry security, vulnerability scanning
  • Run β€” Runtime policies, network segmentation, resource limits
  • Monitor β€” Audit logging, anomaly detection, compliance

Container Attack Vectors

Diagram: Container Attack Surface
Container Attack Surface

🐳 CONTAINER ATTACK SURFACE

Container Runtime\nβ€’ RCE\nβ€’ Crypto mining\nβ€’ Privilege escalation

Secrets Exposure\nβ€’ Env var leak\nβ€’ Config files

Orchestration\nβ€’ K8s API abuse\nβ€’ Pod escape

Network\nβ€’ Lateral movement\nβ€’ Port scanning

Image\nβ€’ Malicious base\nβ€’ Vulnerable deps

Supply Chain\nβ€’ Poisoned registry\nβ€’ Typosquatting

πŸ’€ Full Cluster Compromise

2. Dockerfile Security

Dockerfile adalah fondasi keamanan container. Kesalahan pada Dockerfile dapat menghasilkan image yang rentan.

Diagram

push code

build image

vulnerability check

verify signature

pull + run

πŸ“¦ Container Image

Base Image\n(OS)

Layer 1\n(OS packages)

Layer 2\n(dependencies)

Layer 3\n(app code)

πŸ‘¨β€πŸ’» Developer

CI/CD Pipeline\n(Build + Test + Scan)

Container Registry\n(DockerHub, ECR, GCR, Harbor)

☸️ Kubernetes\n(Production)

πŸ” Image Scan\n(Trivy, Snyk)

✍️ Image Signing\n(cosign, Notary)

Image Signing with Cosign

Bash β€” Container Image Signing
# =============================================
+# Container Image Signing & Verification
+# =============================================

+# 1. Install cosign (Sigstore)
+go install github.com/sigstore/cosign/v2/cmd/cosign@latest

+# 2. Generate keypair
+cosign generate-key-pair

+# 3. Sign image
+cosign sign --key cosign.key registry.example.com/myapp:v1.0

+# 4. Verify signature
+cosign verify --key cosign.pub registry.example.com/myapp:v1.0

+# 5. Sign with keyless (OIDC identity)
+cosign sign registry.example.com/myapp:v1.0
+# Uses Fulcio for short-lived certificates
+# Uses Rekor for transparency log

+# 6. Enforce signature verification in K8s
+# Kyverno policy:
+apiVersion: kyverno.io/v1
+kind: ClusterPolicy
+metadata:
+  name: verify-image-signatures
+spec:
+  validationFailureAction: enforce
+  rules:
+    - name: verify-cosign-signature
+      match:
+        resources:
+          kinds: ["Pod"]
+      verifyImages:
+        - imageReferences: ["registry.example.com/*"]
+          attestors:
+            - entries:
+                - keys:
+                    publicKeys: |-
+                      -----BEGIN PUBLIC KEY-----
+                      ...
+                      -----END PUBLIC KEY-----

Container Forensics

Ketika container terkompromi, forensik container berbeda dari tradisional karena sifat ephemeral container. Evidence collection harus dilakukan sebelum container dihapus.

Bash β€” Container Forensics
# =============================================
+# Container Incident Response & Forensics
+# =============================================

+# 1. Snapshot container filesystem (sebelum dihapus)
+docker commit suspicious-container forensic-image:v1
+docker save forensic-image:v1 -o forensic-image.tar

+# 2. Export container filesystem
+docker export suspicious-container -o container-fs.tar
+mkdir /forensics/container && tar xf container-fs.tar -C /forensics/container

+# 3. Capture container memory
+docker exec suspicious-container sh -c 'cat /proc/*/maps' > mem-maps.txt
+# Or use AVML for memory capture
+docker cp suspicious-container:/proc /forensics/proc

+# 4. Collect container logs
+docker logs suspicious-container > container-logs.txt 2>&1

+# 5. Network forensics
+docker exec suspicious-container ss -tulnp > network-connections.txt
+docker exec suspicious-container cat /etc/resolv.conf > dns-config.txt

+# 6. Process forensics
+docker top suspicious-container > process-list.txt
+docker exec suspicious-container ps auxf > process-tree.txt

+# 7. Analyze image layers
+dive forensic-image:v1
+# Check each layer for suspicious additions

+# 8. Timeline reconstruction
+# Correlate timestamps from:
+# - Container logs
+# - Host audit logs (auditd)
+# - Network flow logs
+# - SIEM alerts

Container Monitoring with Prometheus

Container monitoring mendeteksi anomali runtime seperti resource abuse, suspicious process, dan network activity yang tidak biasa.

YAML β€” Container Monitoring
+
# Prometheus alerts for container security
+groups:
+  - name: container-security
+    rules:
+      - alert: ContainerHighCPU
+        expr: container_cpu_usage_seconds_total > 0.9
+        for: 5m
+        labels:
+          severity: warning
+        annotations:
+          summary: "Container {{ $labels.name }} high CPU"
+      - alert: ContainerPrivilegeEscalation
+        expr: container_security_privileged == 1
+        labels:
+          severity: critical
+        annotations:
+          summary: "Privileged container detected"
+

9. Quiz Pemahaman

1. Mengapa container harus non-root?

2. Fungsi image scanning?

3. Apa yang dilakukan '--cap-drop ALL'?

4. Mengapa 'latest' tag tidak untuk production?

5. Tool CIS benchmark audit untuk Docker?

Rangkuman

πŸ“ Poin Penting
  • Dockerfile β€” Fondasi keamanan β€” multi-stage, non-root, pin versions
  • Image Scanning β€” Scan CVE di setiap stage: build, CI, registry, runtime
  • Runtime β€” Capabilities, seccomp, read-only fs, resource limits
  • K8s Security β€” Pod Security Standards, NetworkPolicy, RBAC
  • Secrets β€” Gunakan External Secrets Operator, bukan env vars
πŸ” Zoom
100%
🎨 Tema