Hoe kan ek Docker beveilig vir produksie-omgewing?

Kom ons kyk hoe u die Docker verhard en beveilig vir die produksie-omgewing.


Hoewel Docker dit moontlik gemaak het vir sagteware-ontwikkelaars en DevOps-ingenieurs om toepassings vinnig te bou en te ontplooi, en dit het ook ‘n groot aanvalsoppervlak vir die gebruik van kuberhackers.

Ons sal kyk hoe u ‘n Docker op ‘n Linux-platform kan beveilig uit die volgende.

  • Konfigurasie foute
  • Uitvoer van eksterne kodes
  • Bufferoorvloei
  • Beeld vervalsing en so aan.

Ons sal van die volgende instrumente gebruik maak, soos: Notarisbediener van Docker om beelde te teken en Docker bank sekuriteit om na te gaan of die gasheer, daemon-konfigurasie, ensovoorts gekyk word.

Laat ons die basiese beginsels aanraak voordat ons begin beveilig.

Wat is ‘n houertegnologie?

Houertegnologie stel ontwikkelaars of DevOps-ingenieurs in staat om ‘n toepassing te verpak, sodat dit kan funksioneer met afhanklikhede wat van ander prosesse afgesonder is.

Daar is ‘n aantal houertegnologieë in die mark, soos Apache Mesos, vuurpyl, lxc, en Docker. Alhoewel hulle binne die kategorie houertegnologie val, funksioneer hulle anders.

Verskil tussen VM & VE

‘N Virtuele masjiengasheer is heeltemal anders as ‘n virtuele omgewingsgasheer. Op virtuele masjiene kom elke houerprogram met hul eie stel biblioteke en bedryfstelsels, terwyl toepassings standaard op ‘n virtuele omgewingsgasheer soos lxc en docker die Linux-kern deel.

Wat is Docker?

Docker is ‘n houertegnologie wat deur miljoene gebruik word om ‘n webtoepassing te skep en te implementeer van ‘n toets na ‘n produksie-omgewing.

Docker-enjin

Die Docker-enjin bestaan ​​uit drie komponente.

  • ‘N Bediener: hierdie komponent is ‘n langdurige proses of demon wat verantwoordelik is vir die bestuur van beelde en houers.
  • REST API: Hierdie koppelvlak maak dit moontlik vir die docker-dememon en die docker-kliënt-instrument om te kommunikeer.
  • Docker Client-instrument: die Docker-kliëntinstrument maak gebruik van die REST API-komponent om die docker-demoon in te lig om ‘n houer-toepassing te bestuur.

Docker betroubare register

Docker Trusted Registry is ‘n oplossing vir beeldopslag van Docker vir die onderneming platform. Dit verskil van die docker-hub.  Terwyl die dock-hub in die wolk gehuisves word, is die register vir vertroude docker ‘n stooroplossing op die perseel Docker ondernemingsuitgawe.

Docker-inhoudstrust

Docker Content Trust bied die geleentheid om handtekeninge te gebruik vir prente wat gestuur word en ontvang word na en van afgeleë dockerregisters soos die dock-hub.

Linux-naamruimtes

Linux-naamruimtes is ‘n Linux-kernfunksie wat ‘n houer-toepassing of -proses wat op ‘n virtuele omgewingsgasheer aangebied word, van ander prosesse isoleer.

Linux-kontrolegroepe (groepe)

Linux Control Groups is ‘n Linux-kernfunksie waarmee u hulpbronne soos CPU-tyd, netwerkbandbreedte, stelselgeheue, ensovoorts kan toewys aan aktiewe prosesse op ‘n gasheer.

vermoëns

In Linux is daar ‘n sekuriteitsfunksie in die kernsubstelsel wat ingestel of afgedwing kan word om die bevoorregte proses te beperk, so ‘n proses wat uitgevoer word deur ‘n gebruiker met UID 1. Alhoewel bevoorregte prosesse of gebruikers die diskresionêre toegangsbeheer-regte kan omseil, kan hulle nie omseil nie vermoënsreëls.

Kom ons fokus nou op sekuriteit.

Die beveiliging van Docker-gasheer

In hierdie afdeling gaan ons kyk hoe die gasheer waar Docker woon, kan beveilig.

Skandeer Linux-kern

Voordat u ‘n docker op ‘n Linux-platform aanbied, moet u eers die kern ondersoek. Daar is verskillende open-source instrumente soos Lynis en OpenVAS u kan gebruik om die Linux-kern te skandeer.

Kopieer of kloon die Lynis-projek vanaf Github met behulp van die git-kloon-opdrag.

git kloon https://github.com/CISOfy/lynis.git

Gebruik vervolgens die opdrag hieronder om na die lynis-gids te blaai en die Linux-stelsel te kontroleer.

cd lynis; ./lynis-ouditstelsel

Harden Linux-kern

Nadat u die Linux-kern gesoek het vir stelselgebaseerde kwesbaarhede, kan u ‘n ekstra laag beskerming by die kern voeg grsecurity. Dit bied sekuriteitsfunksies soos die volgende.

  • Voorkoming van bufferoorloopontginning
  • / tmp voorkoming van rasse kwesbaarheid
  • / proc-beperkings wat nie inligting oor prosesseienaars lek nie.
  • Voorkoming van arbitrêre uitvoering van kodes in die kern en so aan.

Aanvanklik kan jy Aflaai pleeg dit gratis van veiligheid en pas dit op u huidige kern aan. Maar dit laat nie meer gratis pleisters toe nie.

Installeer Docker in ‘n VM

In plaas daarvan om Docker direk op ‘n Linux-gasheer te installeer, kan u ‘n ekstra laag beskerming byvoeg deur dit binne ‘n virtuele masjien te installeer. Deur dit te doen, selfs al is daar ‘n kwesbaarheidsprobleem met die gasheerkern, sal dit nie die houerhouers beïnvloed nie.

Wortelvoorregte te beskerm

Docker benodig standaard wortelprivilegies om houers te skep en te bestuur. Die kwaadwillige skrif kan hierdie aanvaloppervlak gebruik om te eskaleer na ‘n supergebruiker op ‘n Linux-gasheer en uiteindelik toegang tot sensitiewe lêers / gidse, beelde, sertifikate, ens..

Om dit te voorkom, kan ons van die volgende opdrag gebruik maak. Ons kan besluit om funksies soos setgid en setuid te laat val om te verhoed dat ander programme of prosesse hul GID na ‘n ander GID verander, wat kan lei tot eskaleringsvoorreg. U kan ook kyk hier vir ‘n lys met definisie van Linux-vermoëns.

Die opdrag hieronder voer die apache-webbediener-houer af en laat die setgid- en setuid-vermoëns via –cap-drop val om te verhoed dat die apache-houer die GID en UID na ‘n ander UID en GID verander.

GID en UID verwys in hierdie konteks onderskeidelik na groep-ID en gebruikers-ID.

docker run -d –cap-drop SETGID –cap-drop SETUID apache

Docker-gebruiker

Afgesien van die voorkoming van ander programme of prosesse, kan u ook ‘n gebruiker skep om docker-bedrywighede te bestuur, soos docker-hardloop, in plaas daarvan om dit via ‘n supergebruiker te bestuur.

U kan ‘n docker-gebruiker byvoeg of skep deur die volgende:

sudo groupadd docker

Die opdrag hierbo skep ‘n groep genaamd docker

Skep vervolgens ‘n gebruiker met behulp van die opdrag hieronder:

sudo useradd mike

Uiteindelik gebruik die opdrag hieronder om ‘n gebruikersmike by die groepdocker te voeg om docker-operasies te administreer.

sudo usermod -aG docker mike

Bestuur houer met groepe

In ‘n produksie-omgewing het u moontlik meer as een houer.

As u nie groepe op u gasheer het nie, kan u die volgende opdrag gebruik om dit te installeer en dan te kontroleer hier (vir Ubuntu) oor hoe om dit te konfigureer.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Ons kan die houers toewys aan beperkte CPU-bronne via die – cpu-aandele en –cpuset-cpus

Die volgende voorbeeld van die opdrag toon dat die prodnginx-houerproses slegs op die eerste kern uitgevoer word via –cpuset-cpus en word 20 CPU toegeken via –cpu-aandele, terwyl die proxnginx-houerproses op die eerste twee CPU-kerns uitgevoer word en 20 CPU.

docker run -d – naam prodnginx –cpuset-cpus = 0 – cpu-aandele = 20 nginx
docker run -d – naam testnginx –cpuset-cpus = 2 – cpu-aandele = 20 nginx

Tik dan die kommandodokerstatistiek om die CPU-gebruik deur die prodnginx- en testnginx-houers te besigtig

CONTAINER ID NAAM CPU% MEM GEBRUIK / BEPERK MEM% NET I / O BLOCK I / O
845bea7263fb prodnginx 57.69% 1.258MiB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55.85% 1.25MiB / 985.2MiB 0.13% 578b / 0B 1.33MB / 0B

Dit is ‘n goeie idee om CPU-aandele vir ‘n docker-gasheer te definieer as daar meer as een houer op is.

Hantering van houers met naamruimtes

‘N Naamruimte kan verhoed dat houers as bevoorregte gebruikers loop, wat kan help om voorwaardes eskalerende aanvalle te vermy.

Ons kan naamruimte in docker inskakel deur gebruik te maak van / etc / subuid en / etc / subgid lêers soos hieronder getoon.

  • skep ‘n gebruiker met die adduser-opdrag

sudo adduser dockremap

  • Stel ‘n subuid vir die gebruiker dockremap op

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subuid ‘

  • Stel dan subgid vir die gebruiker dockremap op

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subgid ‘

  • Maak die daemon.json-lêer oop en vul dit met die volgende inhoud om die userns-remap-kenmerk aan die gebruiker dockremap te koppel

vi /etc/docker/daemon.json
{

"userns-verander om": "dockremap"

}

  • Druk op: wq om die lêer van daemon.json te stoor en toe te maak en herbegin uiteindelik docker om naamruimtes op ‘n docker-gasheer moontlik te maak

sudo /etc/init.d/docker herbegin

Die beveiliging van die Docker Daemon

Dit is ook nodig om die Docker-dememon op te stel om veilige kommunikasie tussen docker-kliënt en docker-daemon via TLS te verseker.

Gebruik die volgende opdrag om die daemon.json-lêer oop te maak en die volgende inhoud te kopieer en plak (vervang die IP met u werklike) soos hieronder getoon.

vi daemon.json
{
"debug": onwaar,
"TLS": waar,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"gashere": ["tcp: //192.168.16.5: 2376"]
}

Die beveiliging van Docker-komponente

Kom ons kyk hoe ons instrumente soos gebruik kan maak CodeNotary en notaris bediener om beelde te onderteken om vervalsing van afbeeldings te vermy. Daarbenewens is dit ook nodig om beelde te skandeer net om seker te maak dat beelde nie propvol kwesbaarhede is nie

Ons sal die Docker-notarisbediener gebruik om prente te teken en te verifieer en te gebruik Anker enjin om beelde na kwesbaarhede te skandeer.

Verifieer prente met die notarisbediener

Voordat ons die Notaris-bediener kan gebruik om beelde te teken, moet ons dit aflaai en installeer. Ons sal Docker Compose gebruik om ‘n notarisbediener op te stel.

  • Voer die opdrag hieronder uit om die nuutste weergawe van Docker Compose af te laai

sudo krul -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-komponeer

  • Pas uitvoerbare toestemmings toe op die docker-kompos soos hieronder getoon

sudo chmod 700 / usr / local / bin / docker-komponeer

  • U kan toets of u docker-kompos suksesvol geïnstalleer het via die volgende opdrag

docker-komponeer – weergawe

  • Nou kan ons die notarisbediener installeer via docker-compose

git kloon https://github.com/theupdateframework/notary.git

  • Die opdrag hierbo kloon of kopieer die notarisbediener vanaf die notaris bewaarplek
  • Begin die notarisbediener en ondertekenaar via die opdragte hieronder:

docker-komponeer bou
docker-komponeer up -d

  • Kopieer dan die konfigurasie en toets sertifikate na u plaaslike notarisgids met behulp van die opdrag hieronder

mkdir -p ~ /. notaris && cp cmd / notaris / config.json cmd / notary / root-ca.crt ~ /. notaris

  • Voer nou die volgende opdrag uit om die notarisbediener aan die docker-kliënt te koppel

voer DOCKER_CONTENT_TRUST = 1 uit
uitvoer DOCKER_CONTENT_TRUST_SERVER = https: // notarisbediener: 4443

  • Genereer ‘n delegeringsleutelpaar via die opdrag hieronder

docker trust sleutel genereer mike –dir ~. / docker / trust

  • Laat ons nou ‘n teiken nuwe sleutels skep vir ingeval die bewaarplek nie bestaan ​​nie

docker trust signer add –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Dan kan u u docker-beeld onderteken met behulp van die command-docker trust-teken. U moet die docker-beeld vanaf die dock-naaf trek en weer etiketteer met behulp van die opdrag-docker-trek- en docker-tag onderskeidelik.

docker vertroue teken mikedem0 / nginx: nuutste

U kan ook dockerprente skandeer vir kwesbaarhede en foute met die konfigurasie. U kan hier kyk om uit te vind hoe u Anchor Engine kan gebruik om na kwesbaarhede te soek en Docker Bench Security om na foute in die konfigurasie te kyk.

Ek hoop dat bogenoemde u ‘n idee gee oor die sekuriteitsdocker vir die produksie-omgewing. Miskien wil u ook kyk na hierdie Udemy-kursus haak en beveilig Docker-houers.

Tags:

  • Docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map