jan-karel.nl
Home / Securitymaatregelen / Cloudbeveiliging / Container Hardening

Container Hardening

Container Hardening

Cloud Snel, Cloud Strak

Cloudomgevingen veranderen snel. Daarom moet beveiliging hier standaard en geautomatiseerd meebewegen.

Voor Container Hardening is automatisering leidend: guardrails in code, least privilege en continue driftcontrole.

Zo houd je snelheid in de cloud, zonder dat veiligheid afhankelijk wordt van handmatig geluk.

Directe maatregelen (15 minuten)

Waarom dit telt

De kern van Container Hardening is risicoreductie in de praktijk. Technische context ondersteunt de maatregelkeuze, maar implementatie en borging staan centraal.

Verdedigingsmaatregelen

Het zou onverantwoord zijn om alleen aanvalstechnieken te beschrijven zonder de verdediging te behandelen. Hier is wat daadwerkelijk werkt – en wat niet meer is dan security theater.

Pod Security Standards

Kubernetes Pod Security Standards (PSS) vervangen de oudere PodSecurityPolicies en definiëren drie niveaus:

Niveau Beschrijving Wat het blokkeert
Privileged Geen restricties Niets – alles is toegestaan
Baseline Minimale restricties Privileged containers, hostNetwork, hostPID, hostIPC
Restricted Maximale restricties Root user, alle host namespaces, privilege escalation, capabilities
# Enforcement via namespace labels
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

Network Policies

# Default deny all ingress en egress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

---
# Sta alleen specifiek verkeer toe
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-webapp-to-db
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: database
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: webapp
    ports:
    - protocol: TCP
      port: 5432

---
# Blokkeer metadata service (cruciaal in cloud!)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-metadata
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32

Tip: Network Policies werken alleen als de CNI-plugin ze ondersteunt. Calico, Cilium en WeaveNet ondersteunen ze. Flannel doet dat standaard niet. Controleer altijd welke CNI-plugin actief is voordat je aanneemt dat Network Policies worden afgedwongen.

Runtime security: Falco

Falco is een runtime security-tool die syscalls monitort en alerts genereert bij verdacht gedrag:

# Falco regel: detecteer container escape pogingen
- rule: Container Escape via Mount
  desc: Detecteer het mounten van het host-filesysteem vanuit een container
  condition: >
    evt.type = mount and container and
    evt.arg.source startswith "/dev/sd"
  output: >
    Container escape poging gedetecteerd
    (user=%user.name container=%container.name
     image=%container.image.repository
     source=%evt.arg.source)
  priority: CRITICAL

- rule: Docker Socket Accessed in Container
  desc: Detecteer toegang tot de Docker socket vanuit een container
  condition: >
    evt.type in (open, openat) and
    container and fd.name = /var/run/docker.sock
  output: >
    Docker socket benaderd vanuit container
    (user=%user.name container=%container.name
     image=%container.image.repository)
  priority: WARNING

Image scanning

# Trivy - vulnerability scanner
trivy image TARGET_IMAGE
trivy image --severity CRITICAL,HIGH TARGET_IMAGE

# Grype
grype TARGET_IMAGE

# Snyk
snyk container test TARGET_IMAGE

# In CI/CD pipeline:
# Blokkeer images met CRITICAL vulnerabilities
trivy image --exit-code 1 --severity CRITICAL TARGET_IMAGE

Referentietabel

Techniek Categorie MITRE ATT&CK Complexiteit
Docker socket escape Container Escape T1611 - Escape to Host Laag
Privileged container escape Container Escape T1611 Laag
Cgroup release_agent Container Escape T1611 Middel
nsenter host escape Container Escape T1611 Laag
Kernel exploit (container) Container Escape T1068 - Exploitation for Privilege Escalation Hoog
runc overwrite (CVE-2019-5736) Container Escape T1611 Middel
Image layer secret extraction Credential Access T1552.001 - Credentials In Files Laag
Registry enumeration Discovery T1613 - Container and Resource Discovery Laag
Registry image poisoning Persistence T1525 - Implant Internal Image Middel
K8s API unauthenticated access Initial Access T1190 - Exploit Public-Facing Application Laag
K8s secret theft Credential Access T1552.007 - Container API Laag
K8s RBAC escalation Privilege Escalation T1078.001 - Default Accounts Middel
K8s pod creation escape Privilege Escalation T1610 - Deploy Container Middel
etcd credential dump Credential Access T1552.007 Middel
Metadata service abuse Credential Access T1552.005 - Cloud Instance Metadata API Laag
DNS spoofing in cluster Collection T1557 - Adversary-in-the-Middle Middel
Service mesh bypass Defense Evasion T1562.001 - Disable or Modify Tools Middel
Admission controller bypass Defense Evasion T1562.001 Hoog
CI/CD base image poisoning Supply Chain T1195.002 - Compromise Software Supply Chain Middel
Build pipeline compromise Execution T1204.003 - Malicious Image Middel

In het volgende hoofdstuk verlaten we de container en kijken we naar het systeem dat die containers bouwt, test en deployt: de CI/CD pipeline. Als containers de cellen zijn in onze digitale gevangenis, dan is de CI/CD pipeline de fabriek die de cellen bouwt. En die fabriek, zo blijkt, heeft zijn eigen deuren en ramen die niet op slot zitten.

Op de hoogte blijven?

Ontvang maandelijks cybersecurity-inzichten in je inbox.

← Cloudbeveiliging ← Home