Gå til indhold
atlas

Container escape

Også kendt som: container breakout, udbrud fra container

Et angreb, hvor kode, der kører i en container, bryder ud af den og får kontrol over værtsmaskinen nedenunder.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

En form for rettighedseskalering, hvor en proces i en container udnytter en fejl i kernen eller container-runtimen, eller en for løs indstilling, til at handle uden for sin container med værtens rettigheder.

Forklaret enkelt

Som en hotelgæst, der finder en løs vægplade på sit værelse og pludselig står på hotellets kontor.

I praksis

En angriber overtager en kommunes bookingapp, der kører i en container med fulde administratorrettigheder og værtens diske tilkoblet; én fil skrevet direkte på værten lader angriberen køre kode på hele maskinen.

Hvorfor det betyder noget

Mange teams bruger containere som skillevægge mellem kunder eller programmer; ét udbrud gør et enkelt svagt program til kontrol over alle containere på værten.

Teknisk uddybning

MITRE ATT&CK beskriver teknikken som T1611 (Escape to Host) under taktikken Privilege Escalation. Udbrud falder i tre familier. Konfigurationsudbrud kræver slet ingen fejl: en container startet med --privileged (alle capabilities, alle enheder, ingen seccomp- eller LSM-profil) kan montere værtens blokenhed eller indlæse et kernemodul; en bind-monteret /var/run/docker.sock eller containerd-socket lader processen bede dæmonen starte en ny privilegeret container med / monteret; hostPath-volumener, hostPID eller hostNetwork i en Kubernetes-podspecifikation eller CAP_SYS_ADMIN alene åbner lignende veje. Det klassiske release_agent-trick i cgroup v1 (skriv et script på værten ind i release_agent og udløs det, når en cgroup bliver tom) kræver kun CAP_SYS_ADMIN og et skrivbart cgroupfs; CVE-2022-0492 viste, at et manglende capability-tjek gjorde det muligt i visse uprivilegerede opsætninger.

Runtime-udbrud udnytter den lavniveau-runtime, der sætter containeren op. CVE-2019-5736 lod et ondsindet image overskrive værtens runc-binær via /proc/self/exe, når en operatør kørte docker exec; CVE-2024-21626 ("Leaky Vessels") udnyttede en fildeskriptor til værtens filsystem, som runc lækkede ind i containeren, og som kunne nås med et konstrueret WORKDIR på /proc/self/fd/N. Kerneudbrud bruger enhver kernefejl, der kan nås inde fra namespacet: Dirty COW (CVE-2016-5195), Dirty Pipe (CVE-2022-0847) og CVE-2022-0185 (et heap-overløb i fortolkningen af filsystemkontekst, som krævede CAP_SYS_ADMIN, der kan opnås i et uprivilegeret user namespace) er kendte eksempler.

Forsvaret skal være lagdelt, fordi ingen enkelt kontrol dækker alle tre familier. Kubernetes' Pod Security Standards på niveauet "restricted" forbyder privilegerede pods, værtens namespaces, hostPath og ekstra capabilities og kræver runAsNonRoot og en seccomp-profil; admission controllers (Pod Security Admission, Kyverno, OPA Gatekeeper) håndhæver det. Opdateret runc og kerne lukker kendte runtime- og kerneveje; user namespaces gør containerens root til en uprivilegeret bruger på værten; skrivebeskyttede rodfilsystemer fjerner persistens. Til fjendtlige workloads med flere lejere lægger gVisor eller Kata Containers en kerne i brugerrummet eller en VM mellem arbejdsbyrden og værtens kerne. Detektionsværktøjer som Falco holder øje med afslørende systemkald: mounts, skrivninger til release_agent, uventede setns-kald eller shells startet af runc.

Et container escape adskiller sig fra almindelig rettighedseskalering inde i containeren (at blive root i containeren er endnu ikke et udbrud) og fra et VM-udbrud, der kræver en fejl i hypervisoren og er langt sjældnere. Efter udbruddet høster angriberen typisk kubelet-legitimationsoplysninger og service account-tokens fra alle pods på noden, og det er sådan, et udbrud bliver til lateral bevægelse gennem hele klyngen.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Filsystem
  2. →Kerne (kernel)
  3. →Styresystem
  4. →Proces
  5. →Container
  6. →Container-image
  7. →Container-runtime
  8. →Container escape

Relationer

Udnytter
Sårbarhed

Kilder og videre læsning

Standarder og officielle tekster

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Test dig selv

Indlæser…

Atlas er i beta.