Emuārs

Praktisks Docker izolācijas drošības kontrolsaraksts daudzlietotāju mitināšanai

Nodrošiniet savu daudzlietotāju Docker mitināšanu ar šo praktisko kontrolsarakstu, kas aptver ne-root lietotājus, iespējas, seccomp, lietotāju vārdtelpas, resursu ierobežojumus un tikai lasāmas failu sistēmas.

Kopsavilkums

Daudzlietotāju Docker mitināšanai nepieciešama spēcīga izolācija, lai novērstu konteineru izbēgšanu. Šajā rakstā ir sniegts praktisks drošības kontrolsaraksts, kas aptver sešas galvenās jomas: darbināt kā ne-root, noņemt iespējas, lietot seccomp profilus, iespējot lietotāju vārdtelpu pārkartēšanu, iestatīt resursu ierobežojumus un izmantot tikai lasāmas saknes failu sistēmas. Katrs solis ietver konkrētu konfigurācijas piemēru Docker Compose. Jūs arī uzzināsit par bieži sastopamām kļūmēm, piemēram, kodola saderības problēmām ar lietotāju vārdtelpām un veiktspējas kompromisiem, lietojot seccomp. Ievērojot šo kontrolsarakstu, jūs varat ievērojami samazināt uzbrukuma virsmu, nepievienojot lieku sarežģītību. Raksts noslēdzas ar ieteicamo bāzes konfigurāciju ražošanas daudzlietotāju vidēm.

Ja jūs pārvaldāt daudzlietotāju Docker vidi, konteineru izbēgšanas uzbrukuma bieds neļauj jums mierīgi gulēt. Viens kodola eksploits var izlauzties no konteinera un dot uzbrucējam neierobežotu piekļuvi resursdatoram un visu citu nomnieku datiem. Lai gan Docker nodrošina spēcīgus izolācijas pamatprincipus — vārdtelpas, cgroups un iespējas —, nepareiza konfigurācija atstāj robus. Šis raksts sniedz soli pa solim drošības kontrolsarakstu, ko varat izmantot jau šodien. Katrs solis ietver strādājošu Docker Compose fragmentu un galvenās piezīmes. Beigās jums būs nostiprināta bāzes līnija, kas līdzsvaro drošību un veiktspēju.

1. Darbināt konteinerus kā ne-root lietotāju

Konteineri pēc noklusējuma darbojas kā root konteinera iekšienē. Ja uzbrucējs iegūst root piekļuvi konteinerā, tam ir priekšrocības izbēgšanai. Vienmēr definējiet ne-root lietotāju savā Dockerfailā.

FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

Compose varat arī tieši iestatīt lietotāju:

services:
  app:
    image: myapp
    user: "1000:1000"

Piezīme: Dažas lietojumprogrammas ir nepieciešams root, lai veiktu likumīgas darbības (piem., piesaistītu portus zem 1024). Izmantojiet CAP_NET_BIND_SERVICE, nevis visu konteineru darbināt kā root. Lai dziļāk ieskatītos izolācijas pamatos, skatiet mūsu ceļvedi par patiesas daudzlietotāju izolācijas sasniegšanu Docker.

2. Noņemt visas iespējas un pievienot tikai nepieciešamās

Linux iespējas nodrošina konteineriem smalkgraudainas privilēģijas. Pēc noklusējuma Docker piešķir noteiktu iespēju kopu. Noņemiet visu un piešķiriet tikai nepieciešamās.

services:
  app:
    image: myapp
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE  # ja nepieciešams

Piezīme: Iespējas, piemēram, SYS_ADMIN vai NET_RAW, reti ir vajadzīgas. Auditujiet savu lietojumprogrammu, lai noteiktu minimālo kopu. Visu iespēju noņemšana bloķē daudzus izbēgšanas vektorus.

3. Pielietot Seccomp profilu

Seccomp (drošs skaitļošanas režīms) filtrē sistēmas izsaukumus, kas pieejami konteineram. Docker tiek piegādāts ar noklusējuma seccomp profilu, kas bloķē bīstamus sistēmas izsaukumus, piemēram, clone ar noteiktiem karogiem. To var vēl vairāk pielāgot.

services:
  app:
    image: myapp
    security_opt:
      - seccomp=/path/to/custom-profile.json

Stiprināts profils var bloķēt unshare, ptrace un mount. Sāciet ar Docker noklusējumu un ierobežojiet vairāk. Piezīme: Pārāk stingri profili var salauzt lietojumprogrammas. Rūpīgi pārbaudiet testa vidē. Lai uzzinātu vairāk par konteineru izbēgšanas aizsardzību, lasiet aizsardzība pret konteineru izbēgšanu.

4. Iespējot lietotāju vārdtelpu pārkartēšanu

Lietotāju vārdtelpas kartē konteinera root lietotāju uz neprivileģētu resursdatora lietotāju. Tas nozīmē, ka pat tad, ja uzbrucējs iegūst root piekļuvi konteinerā, tam nav īpašu privilēģiju resursdatorā.

Iespējojiet to Docker dēmonā, rediģējot /etc/docker/daemon.json:

{
  "userns-remap": "default"
}

Pēc tam restartējiet Docker. Piezīme: Lietotāju vārdtelpu pārkartēšanai ir divi trūkumi: tā salauž sējuma stiprinājumus, ja nav rūpīgi konfigurēta (faili pieder pārkartētajam lietotājam), un tā nav saderīga ar dažiem krātuves draiveriem, piemēram, overlay2 vecākos kodolos. Rūpīgi pārbaudiet.

5. Iestatīt resursu ierobežojumus ar Cgroups

Resursu ierobežojumi neļauj kompromitētam konteineram veikt pakalpojuma atteikuma uzbrukumu pret resursdatoru. Izmantojiet cgroups, lai ierobežotu CPU, atmiņu un diska I/O.

services:
  app:
    image: myapp
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

Docker Compose v3 izmantojiet sadaļu deploy (darbojas ar swarm vai compose v2). Parastajā Docker izmantojiet --memory un --cpus. Piezīme: Pārāk zemi ierobežojumi var izraisīt OOM nogalināšanu. Uzraugiet lietojumu un attiecīgi pielāgojiet.

6. Izmantot tikai lasāmu saknes failu sistēmu

Tikai lasāma saknes failu sistēma neļauj uzbrucējiem ierakstīt ļaunprātīgus bināros failus vai modificēt konfigurācijas failus konteinera iekšienē.

services:
  app:
    image: myapp
    read_only: true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m

Pievienojiet tmpfs direktorijiem, kuriem nepieciešama rakstīšanas piekļuve (piem., /tmp). Tas liek visiem rakstāmajiem datiem būt īslaicīgiem. Piezīme: Dažām lietojumprogrammām ir nepieciešama pastāvīga krātuve; šim nolūkam izmantojiet nosauktos sējumus.

Bieži sastopamas kļūmes

  • Kodola saderība: Lietotāju vārdtelpu pārkartēšanai un dažiem seccomp noteikumiem ir nepieciešams jauns Linux kodols (4.14+). Pārbaudiet savu kodola versiju.
  • Veiktspējas ietekme: Seccomp un lietotāju vārdtelpas pievieno nelielu pārslodzi, taču tā ir niecīga lielākajai daļai darba slodžu. Veiciet sava konkrētā lietojuma salīdzinošo novērtēšanu.
  • Sarežģītība: Visu sešu pasākumu pievienošana vienlaikus var izjaukt lietas. Pielietojiet tos pa vienam, pārbaudiet katru izmaiņu.

Plašākam pārskatam par orķestrēšanas modeļiem skatiet mūsu ceļvedi par daudzlietotāju Docker arhitektūras izstrādi.

Secinājums

Drošs daudzlietotāju Docker resursdators neprasa eksotiskus rīkus — tikai pareizu Docker iebūvēto funkciju izmantošanu. Sāciet ar ne-root lietotāju, noņemiet visas iespējas, pielietojiet seccomp profilu, iespējojiet lietotāju vārdtelpu pārkartēšanu, iestatiet resursu ierobežojumus un izmantojiet tikai lasāmu failu sistēmu. Šis kontrolsaraksts veido spēcīgu bāzes līniju, kas bloķē visbiežāk izmantotās izbēgšanas metodes. Pēc ieviešanas palaidiet drošības rīkus, piemēram, docker-bench-security, lai pārbaudītu savu konfigurāciju. Atcerieties: drošība ir process, nevis produkts. Kad parādās jaunas kodola ievainojamības, pārskatiet savus iestatījumus. Automatizētām galvenajām lapām, kas demonstrē jūsu mitināšanas pakalpojumu, izmantojiet Pagenza, lai jūsu vietne būtu tiešsaistē dažu minūšu laikā.

Sources (5)