Blogi
Praktiline Dockeri isolatsiooni turvakontrollnimekiri mitme üürniku hostimiseks
Turvage oma mitme üürniku Dockeri hostimist selle praktilise kontrollnimekirjaga, mis hõlmab mitte-juurkasutajaid, võimeid, seccompi, kasutajanimeruume, ressursipiiranguid ja kirjutuskaitstud failisüsteeme.
Kokkuvõte
Mitme üürniku Dockeri hostimine nõuab tugevat isolatsiooni konteineripõgenemiste vältimiseks. See artikkel pakub praktilist turvakontrollnimekirja, mis hõlmab kuut põhivaldkonda: käivitage mitte-juurina, eemaldage võimed, rakendage seccompi profiile, lubage kasutajanimeruumide ümardamine, seadke ressursipiirangud ja kasutage kirjutuskaitstud juurfailisüsteeme. Iga samm sisaldab konkreetset konfiguratsiooninäidet Docker Compose'i jaoks. Samuti õpite tundma levinud lõkse, nagu kerneli ühilduvusprobleemid kasutajanimeruumidega ja jõudluse kompromissid seccompi rakendamisel. Seda kontrollnimekirja järgides saate oluliselt vähendada ründepinda ilma tarbetut keerukust lisamata. Artikkel lõpeb soovitatava baaskonfiguratsiooniga tootmiskeskkondade jaoks mitme üürniku keskkondades.
Kui käitate mitme üürniku Dockeri keskkonda, hoiab konteineripõgenemise rünnaku vari teid öösel üleval. Üks kerneli ärakasutus võib konteinerist välja murda ja anda ründajale piiramatu juurdepääsu hostile ja kõigi teiste üürnike andmetele. Kuigi Docker pakub võimsaid isolatsiooniprimitiive – nimeruumid, cgroupid ja võimed –, jätab valesti seadistamine lünki. See artikkel esitab samm-sammult turvakontrollnimekirja, mida saate täna rakendada. Iga samm sisaldab töötavat Docker Compose'i näidist ja peamisi hoiatusi. Lõpuks on teil tugevdatud baasjoon, mis tasakaalustab turvalisust ja jõudlust.
1. Käivitage konteinerid mitte-juurkasutajana
Konteinerid töötavad vaikimisi juurka käivitajana konteineri sees. Kui ründaja saab konteineris juurõigused, on neil põgenemisel eelis. Määrake oma Dockerfile'is alati mitte-juurkasutaja.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
Compose'is saate kasutaja otse määrata:
services:
app:
image: myapp
user: "1000:1000"
Hoiatus: Mõned rakendused vajavad juurõigusi õigustatud toiminguteks (nt sidumiseks portidega alla 1024). Kasutage CAP_NET_BIND_SERVICE selle asemel, et käivitada kogu konteiner juurina. Sügavama ülevaate saamiseks isolatsiooni põhitõdedest vaadake meie juhendit tõeline mitme üürniku isolatsioon Dockeris.
2. Eemaldage kõik võimed ja lisage ainult vajalikud
Linuxi võimed annavad konteineritele peeneteralised õigused. Vaikimisi annab Docker hulga võimeid. Eemaldage kõik ja andke ainult need, mida vajatakse.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # if needed
Hoiatus: Võimed nagu SYS_ADMIN või NET_RAW on harva vajalikud. Auditige oma rakendust, et määrata minimaalne komplekt. Kõigi võimete eemaldamine blokeerib palju põgenemisvektoreid.
3. Rakendage seccompi profiil
Seccomp (secure computing mode) filtreerib konteinerile kättesaadavaid süsteemikõnesid. Docker tarnib vaikimisi seccompi profiili, mis blokeerib ohtlikud süsteemikõned nagu clone teatud lippudega. Saate seda veelgi kohandada.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
Tugevdatud profiil võib blokeerida unshare, ptrace ja mount. Alustage Dockeri vaikeväärtusega ja piirake rohkem. Hoiatus: Liiga ranged profiilid võivad rakendusi katki teha. Testige põhjalikult testkeskkonnas. Lisateavet konteineripõgenemise kaitsemeetmete kohta lugege konteineripõgenemise eest kaitsmine.
4. Lubage kasutajanimeruumide ümardamine
Kasutajanimeruumid kaardistavad konteineri juurkasutaja privilegeerimata hostkasutajale. See tähendab, et isegi kui ründaja saab konteineri sees juurõigused, pole neil hostil erilisi õigusi.
Lubage see Dockeri deemonil, redigeerides /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Seejärel taaskäivitage Docker. Hoiatus: Kasutajanimeruumide ümardamisel on kaks puudust: see rikub köitemahuteid, kui neid hoolikalt ei konfigureerita (failid kuuluvad ümardatud kasutajale) ja see ei ühildu mõne salvestusdraiveriga nagu overlay2 vanematel kernelitel. Testige põhjalikult.
5. Seadke ressursipiirangud cgroupidega
Ressursipiirangud takistavad ohustatud konteineril käivitada teenuse keelamise rünnakut hosti vastu. Kasutage cgroupe, et piirata protsessorit, mälu ja kettal I/O-d.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Docker Compose'i v3 puhul kasutage jaotist deploy (töötab koos swarm või compose v2-ga). Tavalise Dockeri puhul kasutage --memory ja --cpus. Hoiatus: Liiga madalate piirangute seadmine võib põhjustada OOM-tapmisi. Jälgige kasutust ja kohandage vastavalt.
6. Kasutage kirjutuskaitstud juurfailisüsteemi
Kirjutuskaitstud juurfailisüsteem takistab ründajatel kirjutada pahatahtlikke binaarfaile ega muuta konfiguratsioonifaile konteineri sees.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Mountige tmpfs kataloogidele, mis vajavad kirjutusõigust (nt /tmp). See sunnib kogu kirjutatava andmeid ajutiseks. Hoiatus: Mõned rakendused vajavad püsivat salvestusruumi; kasutage selleks nimega köitemahuteid.
Levinud lõksud
- Kerneli ühilduvus: Kasutajanimeruumide ümardamine ja mõned seccompi reeglid nõuavad hiljutist Linuxi kernelit (4.14+). Kontrollige oma kerneli versiooni.
- Jõudlusmõju: Seccomp ja kasutajanimeruumid lisavad väikese lisakoormuse, kuid see on enamiku töökoormuste puhul tühine. Mõõtke oma konkreetset rakendust.
- Keerukus: Kõigi kuue meetme korraga lisamine võib asju katki teha. Rakendage neid ükshaaval, testige iga muudatust.
Laiema ülevaate saamiseks orkestreerimismustritest vaadake meie juhendit mitme üürniku Dockeri arhitektuuri kavandamine.
Kokkuvõte
Turvaline mitme üürniku Dockeri host ei nõua eksootilisi tööriistu – ainult Dockeri sisseehitatud funktsioonide õiget kasutamist. Alustage mitte-juurkasutajaga, eemaldage kõik võimed, rakendage seccompi profiil, lubage kasutajanimeruumide ümardamine, seadke ressursipiirangud ja kasutage kirjutuskaitstud failisüsteemi. See kontrollnimekiri moodustab tugeva baasjoone, mis blokeerib kõige levinumad põgenemistehnikad. Pärast rakendamist käivitage turvatööriistad, nagu docker-bench-security, et oma konfiguratsiooni kontrollida. Pidage meeles: turvalisus on protsess, mitte toode. Kui ilmnevad uued kerneli haavatavused, vaadake oma seadeid uuesti läbi. Automatiseeritud sihtlehtede jaoks, mis tutvustavad teie hostimisteenust, kasutage Pagenzat, et saada oma sait mõne minutiga tööle.
Sources (5)
- Docker and Container Isolation
- Chapter 2. Container Hosts and Multi-tenancy | Container Security Guide | OpenShift Container Platform | 3.6 | Red Hat Documentation
- What is Container Escape? - Aqua Security
- Container escape vulnerabilities allow attackers to break out of isolated environments and gain unauthorized access to host systems.
- Enhanced Container Isolation - Docker Docs

