Blogi

Käytännön Docker-eristysturvallisuuden tarkistuslista monivuokraajaympäristöön

Suojaa monivuokraaja Docker-ympäristösi tällä käytännön tarkistuslistalla, joka kattaa ei-root-käyttäjät, kapasiteetit, seccomp:n, käyttäjä-nimiavaruudet, resurssirajat ja vain luku -tiedostojärjestelmät.

Yhteenveto

Monivuokraaja Docker-ympäristö vaatii vahvan eristyksen estääkseen konttipakenemiset. Tämä artikkeli tarjoaa käytännön turvallisuustarkistuslistan, joka kattaa kuusi keskeistä aluetta: aja ei-root-käyttäjänä, pudota kapasiteetit, käytä seccomp-profiileja, ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön, aseta resurssirajat ja käytä vain luku -juuritiedostojärjestelmää. Jokainen vaihe sisältää konkreettisen konfiguraatioesimerkin Docker Composelle. Opit myös yleisiä sudenkuoppia, kuten ytimen yhteensopivuusongelmia käyttäjä-nimiavaruuksien kanssa ja suorituskyvyn kompromisseja seccomp:n käytössä. Noudattamalla tätä tarkistuslistaa voit merkittävästi vähentää hyökkäyspinta-alaa lisäämättä tarpeetonta monimutkaisuutta. Artikkeli päättyy suositeltuun peruskonfiguraatioon tuotannon monivuokraajaympäristöille.

Jos ylläpidät monivuokraaja Docker-ympäristöä, konttipakenemishyökkäyksen haamu pitää sinut hereillä öisin. Yksi ytimen hyväksikäyttö voi murtautua ulos kontista ja antaa hyökkääjälle esteettömän pääsyn isäntään ja kaikkien muiden vuokralaisten tietoihin. Vaikka Docker tarjoaa tehokkaita eristysperuspalikoita – nimiavaruuksia, cgroup-ryhmiä ja kapasiteetteja – väärä konfigurointi jättää aukkoja. Tämä artikkeli esittelee vaiheittaisen turvallisuustarkistuslistan, jota voit soveltaa heti. Jokainen vaihe sisältää toimivan Docker Compose -pätkän ja keskeiset varoitukset. Lopuksi sinulla on kovetettu perustaso, joka tasapainottaa turvallisuuden ja suorituskyvyn.

1. Aja kontit ei-root-käyttäjänä

Kontit ajetaan oletuksena root-käyttäjänä kontin sisällä. Jos hyökkääjä saa root-oikeudet konttiin, hänellä on etumatka pakenemiseen. Määrittele aina ei-root-käyttäjä Dockerfilessäsi.

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

Composessa voit asettaa käyttäjän suoraan:

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

Varoitus: Jotkut sovellukset tarvitsevat root-oikeuksia laillisiin toimenpiteisiin (esim. porttien sitominen alle 1024). Käytä CAP_NET_BIND_SERVICE sen sijaan, että ajaisit koko kontin rootina. Katso tarkemmin eristyksen perusteista oppaastamme true multi-tenant isolation in Docker.

2. Pudota kaikki kapasiteetit ja lisää vain tarvittavat

Linux-kapasiteetit antavat konteille hienojakoisia oikeuksia. Oletuksena Docker myöntää joukon kapasiteetteja. Pudota kaikki ja myönnä vain tarvittavat.

services:
  app:
    image: myapp
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE  # jos tarvitaan

Varoitus: Kapasiteetteja kuten SYS_ADMIN tai NET_RAW tarvitaan harvoin. Tarkista sovelluksesi minimijoukon määrittämiseksi. Kaikkien kapasiteettien pudottaminen estää monia pakenemisvektoreita.

3. Käytä seccomp-profiilia

Seccomp (secure computing mode) suodattaa järjestelmäkutsuja, jotka ovat kontin käytettävissä. Dockerissa on oletusarvoinen seccomp-profiili, joka estää vaarallisia järjestelmäkutsuja kuten clone tietyillä lipuilla. Voit muokata sitä edelleen.

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

Kovetettu profiili saattaa estää unshare, ptrace ja mount. Aloita Dockerin oletuksesta ja rajoita lisää. Varoitus: Liian tiukat profiilit voivat rikkoa sovelluksia. Testaa perusteellisesti testausympäristössä. Lue lisää konttipakenemispuolustuksesta artikkelista defending against container escape.

4. Ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön

Käyttäjä-nimiavaruudet mappaavat kontin root-käyttäjän etuoikeuttamattomaan isäntäkäyttäjään. Tämä tarkoittaa, että vaikka hyökkääjä saisi root-oikeudet kontin sisällä, hänellä ei ole erityisiä oikeuksia isännässä.

Ota se käyttöön Docker daemonissa muokkaamalla tiedostoa /etc/docker/daemon.json:

{
  "userns-remap": "default"
}

Käynnistä Docker uudelleen. Varoitus: Käyttäjä-nimiavaruuden uudelleenmappauksella on kaksi haittapuolta: se rikkoo volyymien liitokset, jos niitä ei ole konfiguroitu huolellisesti (tiedostot kuuluvat uudelleenmapatulle käyttäjälle) ja se on yhteensopimaton joidenkin tallennusajureiden, kuten overlay2:n, kanssa vanhemmissa ytimissä. Testaa perusteellisesti.

5. Aseta resurssirajat cgroup-ryhmillä

Resurssirajat estävät vaarantunutta konttia käynnistämästä palvelunestohyökkäystä isäntää vastaan. Käytä cgroup-ryhmiä CPU:n, muistin ja levyn I/O:n rajoittamiseen.

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

Docker Compose v3:ssa käytä deploy-osiota (toimii swarm- tai compose v2:n kanssa). Tavallisessa Dockerissa käytä --memory ja --cpus. Varoitus: Liian alhaiset rajat voivat aiheuttaa OOM-tappoja. Seuraa käyttöä ja säädä vastaavasti.

6. Käytä vain luku -juuritiedostojärjestelmää

Vain luku -juuritiedostojärjestelmä estää hyökkääjiä kirjoittamasta haitallisia binäärejä tai muokkaamasta asetustiedostoja kontin sisällä.

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

Liitä tmpfs hakemistoihin, jotka tarvitsevat kirjoitusoikeutta (kuten /tmp). Tämä pakottaa kaiken kirjoitettavan datan olemaan väliaikaista. Varoitus: Jotkut sovellukset tarvitsevat pysyvää tallennustilaa; käytä nimettyjä volyymeja siihen.

Yleisiä sudenkuoppia

  • Ytimen yhteensopivuus: Käyttäjä-nimiavaruuden uudelleenmappaus ja jotkut seccomp-säännöt vaativat uudehkon Linux-ytimen (4.14+). Tarkista ytimen versio.
  • Suorituskykyvaikutus: Seccomp ja käyttäjä-nimiavaruudet lisäävät pientä lisärasitusta, mutta se on mitätön useimmille työkuormille. Mittaroi oma sovelluksesi.
  • Monimutkaisuus: Kaikkien kuuden toimenpiteen lisääminen kerralla voi rikkoa asioita. Ota ne käyttöön yksi kerrallaan, testaa jokainen muutos.

Laajemman kuvan orkestrointimalleista saat oppaastamme designing a multi-tenant Docker architecture.

Yhteenveto

Turvallinen monivuokraaja Docker-isäntä ei vaadi eksoottisia työkaluja – vain Dockerin sisäänrakennettujen ominaisuuksien oikeaoppista käyttöä. Aloita ei-root-käyttäjällä, pudota kaikki kapasiteetit, käytä seccomp-profiilia, ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön, aseta resurssirajat ja käytä vain luku -tiedostojärjestelmää. Tämä tarkistuslista muodostaa vahvan perustason, joka estää yleisimmät pakenemistekniikat. Toteutuksen jälkeen aja turvallisuustyökaluja kuten docker-bench-security varmistaaksesi konfiguraation. Muista: turvallisuus on prosessi, ei tuote. Kun uusia ydinhaavoittuvuuksia ilmenee, tarkista asetukset uudelleen. Automaattisia laskeutumissivuja varten, jotka esittelevät isännöintipalveluasi, käytä Pagenzaa saadaksesi sivustosi käyttöön minuuteissa.

Sources (5)