Paano mai-secure ang Docker para sa Production Environment?

Tingnan natin kung paano higpitan at i-secure ang Docker para sa kapaligiran sa paggawa.


Bagaman Docker nagawa nitong posible para sa mga developer ng software at mga inhinyero ng DevOps na mabilis na magtayo at mag-deploy ng mga aplikasyon nang mabilis, dumating din ito ng isang malaking pag-atake para sa mga hacker ng cyber upang magamit sa mga hacker.

Titingnan namin kung paano ma-secure ang isang Docker sa isang platform ng Linux mula sa mga sumusunod.

  • Mga flaws sa pag-configure
  • Ang pagpapatupad ng Remote code
  • Umapaw sa Buffer
  • Pagpatawad sa imahe at iba pa.

Gagamitin namin ang mga sumusunod na tool, tulad ng Notaryo server ng Docker upang mag-sign ng mga imahe at Ang seguridad ng bench bench upang suriin para sa host, pagsasaayos ng daemon, at iba pa.

Bago tayo magpatuloy sa pag-secure, hayaan ang touch-base ang mga pangunahing kaalaman.

Ano ang isang Teknolohiya ng lalagyan?

Pinapayagan ng teknolohiya ng lalagyan ang mga developer o mga inhinyero ng DevOps na mag-package ng isang application upang maaari itong tumakbo nang may mga dependencies na ihiwalay sa iba pang mga proseso.

Mayroong isang bilang ng mga teknolohiya ng lalagyan sa merkado, tulad ng Apache Mesos, Rocket, lxc, at Docker. Bagaman nahuhulog sila sa loob ng kategorya ng teknolohiyang lalagyan, naiiba ang paggana nila.

Pagkakaiba sa pagitan ng VM & VE

Ang isang virtual machine host ay ganap na naiiba mula sa isang virtual na host host. Sa virtual machine, ang bawat lalagyan ng application ay may sariling hanay ng mga aklatan at operating system habang ang mga aplikasyon, bilang default, sa isang virtual environment host tulad ng lxc, at docker ay nagbabahagi ng Linux kernel.

Ano ang Docker?

Ang Docker ay isang teknolohiya ng lalagyan na ginagamit ng milyon-milyong upang lumikha ng isang web application at i-deploy ito mula sa isang pagsubok sa isang kapaligiran sa paggawa.

Docker Engine

Ang Docker Engine ay binubuo ng tatlong sangkap.

  • Isang Server: Ang sangkap na ito ay isang proseso na pang-pagpapatakbo o daemon na responsable sa pamamahala ng mga imahe at lalagyan.
  • REST API: Ang interface na ito ay posible para sa docker daemon at kasangkapan sa docker client upang makipag-usap.
  • Docker Client tool: Ginagamit ng tool ng kliyente ng Docker ang REST API na sangkap upang ipaalam sa docker daemon na gumana ng isang containerized application.

Pinagkatiwalaang Rehistro ng Docker

Ang Docker Trusted Registry ay isang solusyon sa imbakan ng imahe mula sa Docker para sa negosyo ng platform ng negosyo. Iba ito sa docker hub.  Sapagkat ang docker hub ay naka-host sa ulap, ang pinagkakatiwalaang docker na pagpapatala ay isang on-premise solution solution para sa Docker enterprise edition.

Tiwala sa Nilalaman ng Docker

Nagbibigay ang Docker Content Trust ng kakayahang gumamit ng mga pirma ng data para sa mga imaheng ipinadala at natanggap sa at mula sa mga rehistro ng malayong docker tulad ng docker hub.

Mga Pangalan ng Linux

Ang mga namespaces ng Linux ay isang tampok na kernel ng Linux na nagbubukod ng isang containerized application o proseso na tumatakbo sa virtual na host host mula sa iba pang mga proseso.

Mga Grupo ng Kontrol ng Linux (Mga Grupo)

Ang Linux Control Groups ay isang tampok na kernel ng Linux na nagbibigay-daan sa iyo upang maglaan ng mga mapagkukunan tulad ng oras ng CPU, bandwidth ng network, memorya ng system, at iba pa sa mga aktibong proseso sa isang host.

Mga Kakayahan

Sa Linux, mayroong isang tampok na seguridad sa kernel subsystem na maaaring itakda o maipapatupad upang limitahan ang proseso ng pribilehiyo tulad ng isang proseso na isinagawa ng isang gumagamit na may UID 1. Bagaman ang mga pribadong proseso o mga gumagamit ay maaaring makaligta ng pagpapasya sa pag-access ng pag-access sa pagpapasya, hindi nila maiiwasan mga patakaran ng kakayahan.

Ngayon ay tumuon sa seguridad.

Pag-secure ng Docker Host

Sa seksyong ito, titingnan namin kung paano ma-secure ang host kung saan nakatira ang Docker.

Pag-scan ng kernel ng Linux

Bago ka mag-host ng isang docker sa isang platform ng Linux, kailangan mo munang suriin ang kernel. Mayroong maraming mga bukas na mapagkukunan tulad ng Si Lynis at OpenVAS maaari mong gamitin upang i-scan ang kernel ng Linux.

Kopyahin o clone ang proyekto ng Lynis mula sa Github gamit ang utos ng git clone.

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

Susunod, gamitin ang utos sa ibaba upang mag-navigate sa direktoryo ng lynis at i-audit ang sistema ng Linux.

cd lynis; ./lynis audit system

Harden Linux kernel

Matapos mong ma-scan ang kernel ng Linux para sa mga kahinaan sa batay sa system, maaari kang magdagdag ng isa pang dagdag na layer ng proteksyon sa kernel sa pamamagitan ng karunungan. Nagbibigay ito ng mga tampok ng seguridad tulad ng mga sumusunod.

  • Pag-iwas sa pagsasamantala sa buffer
  • / pag-iwas sa kahinaan sa lahi ng tmp
  • / paghihigpitan ng mga paghihigpit na hindi tumagas impormasyon tungkol sa mga may-ari ng proseso.
  • Pag-iwas sa di-makatarungang pagpapatupad ng code sa kernel at iba pa.

Sa una, kaya mo pag-download libre ang mga patch mula sa grsecurity at ilapat ito sa iyong kasalukuyang kernel. Ngunit hindi nito pinapayagan ang mga libreng patch.

I-install ang Docker sa isang VM

Sa halip na i-install ang Docker nang direkta sa isang host ng Linux, maaari kang magdagdag ng isang labis na layer ng proteksyon sa pamamagitan ng pag-install nito sa loob ng isang virtual machine. Sa paggawa nito, kahit na may kahinaan sa isyu ng host kernel, hindi ito makakaapekto sa mga lalagyan ng docker.

Pagprotekta sa Mga Pribilehiyo sa Root

Bilang default, ang Docker ay nangangailangan ng mga pribilehiyo sa ugat upang lumikha at pamahalaan ang mga lalagyan. Ang malisyosong script ay maaaring magamit ang pag-atake sa ibabaw na ito upang lumaki sa isang superuser sa isang host ng Linux at kalaunan ma-access ang mga sensitibong file / folder, mga imahe, sertipiko, atbp.

Upang maiwasan ito, maaari nating gamitin ang sumusunod na utos. Maaari kaming magpasya na ibagsak ang mga kakayahan tulad ng setgid at setuid upang maiwasan ang iba pang mga programa o proseso mula sa pagbabago ng kanilang GID sa isa pang GID na maaaring magresulta sa pribilehiyo sa paglala. Maaari mo ring suriin dito para sa isang listahan ng kahulugan ng kakayahan sa Linux.

Ang utos sa ibaba ay nagpapatakbo ng lalagyan ng apache webserver at ibinaba ang setgid at setuid na kakayahan sa pamamagitan ng –cap-drop upang maiwasan ang lalagyan ng apache mula sa pagbabago ng GID at UID nito sa isa pang UID at GID.

Ang GID at UID sa kontekstong ito ay tumutukoy sa group ID at user ID ayon sa pagkakabanggit.

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

Gumagamit ng Docker

Bukod sa pagpigil sa iba pang mga programa o proseso, maaari ka ring lumikha ng isang gumagamit upang pamahalaan ang mga pagpapatakbo ng docker tulad ng run ng docker sa halip na pamamahala nito sa pamamagitan ng isang superuser.

Maaari kang magdagdag o lumikha ng isang gumagamit ng docker sa pamamagitan ng mga sumusunod:

sudo groupadd docker

Ang utos sa itaas ay lumilikha ng isang pangkat na tinatawag na docker

Susunod, lumikha ng isang gumagamit gamit ang utos sa ibaba:

sudo useradd mike

Sa wakas gamitin ang utos sa ibaba upang magdagdag ng isang mike ng gumagamit sa docker ng grupo upang mangasiwa ng mga operasyon ng docker.

sudo usermod -aG docker mike

Pamamahala ng lalagyan sa mga Cgroup

Sa isang kapaligiran sa paggawa, maaaring mayroon kang higit sa isang lalagyan.

Kung wala kang naka-install na mga pangkat sa iyong host, maaari mong gamitin ang sumusunod na utos upang mai-install ito at pagkatapos suriin dito (para sa Ubuntu) kung paano i-configure ito.

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

Maaari naming ilalaan ang mga lalagyan sa limitadong mga mapagkukunan ng CPU sa pamamagitan ng –cpu-shares at –cpuset-cpus

Ang sumusunod na halimbawa ng utos ay nagpapakita ng proseso ng lalagyan ng prodnginx ay naisakatuparan lamang sa unang core sa pamamagitan ng – cpuset-cpus at inilalaan ang 20 CPU sa pamamagitan ng -cpu-pagbabahagi habang ang proseso ng proxnginx container ay naisakatuparan sa unang dalawang core ng CPU at inilalaan din ng 20 CPU.

docker run -d –name prodnginx –cpuset-cpus = 0 –cpu-shares = 20 nginx
docker run -d –name testnginx –cpuset-cpus = 2 –cpu-shares = 20 nginx

Pagkatapos ay i-type ang mga stat stock ng docker upang tingnan ang paggamit ng CPU ng mga lalagyan ng prodnginx at testnginx

CONTAINER ID NAME CPU% MEM USAGE / LIMIT 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

Magandang ideya na tukuyin ang mga pagbabahagi ng CPU para sa isang host ng docker kapag mayroon kang higit sa isang lalagyan na tumatakbo dito.

Pamamahala ng mga lalagyan na may mga Pangalan

Ang isang namespace ay maaaring maiwasan ang mga lalagyan na tumakbo bilang mga pribadong gumagamit, na makakatulong upang maiwasan ang mga pag-atake ng pribilehiyo.

Maaari naming paganahin ang namespace sa docker sa pamamagitan ng paggamit ng / etc / subuid at / etc / subgid file tulad ng ipinakita sa ibaba.

  • lumikha ng isang gumagamit gamit ang utos ng adduser

sudo adduser dockremap

  • Pag-setup ng isang subuid para sa dockremap ng gumagamit

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

  • Pagkatapos ay i-set up ang subgid para sa dockremap ng gumagamit

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

  • Buksan ang file na daemon.json at punan ito ng sumusunod na nilalaman upang maiugnay ang katangian ng userns-remap sa dockremap ng gumagamit

vi /etc/docker/daemon.json
{

"userns-remap": "dockremap"

}

  • Pindutin ang: wq upang i-save at isara ang daemon.json file at sa wakas i-restart ang docker upang paganahin ang mga namespaces sa isang host ng docker

sudo /etc/init.d/docker i-restart

Pag-secure ng Docker Daemon

Kinakailangan din na i-configure ang Docker daemon upang matiyak ang ligtas na komunikasyon sa pagitan ng docker client at docker daemon sa pamamagitan ng TLS.

Gamitin ang sumusunod na utos upang buksan ang file na daemon.json at kopyahin at i-paste ang sumusunod na nilalaman (palitan ang IP sa iyong aktwal) tulad ng ipinakita sa ibaba

vi daemon.json
{
"debug": mali,
"tls": totoo,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"host":"tcp: //192.168.16.5: 2376"]
}

Securing Docker Components

Tingnan natin kung paano gagamitin ang mga tool tulad ng CodeNotary at notaryo server upang mag-sign ng mga imahe upang maiwasan ang pagpapatawad ng imahe. Bilang karagdagan, kinakailangan din na mag-scan ng mga imahe upang matiyak na ang mga imahe ay hindi nakaimpake ng mga kahinaan

Gagamitin namin ang notaryo server ng Docker upang mag-sign at mapatunayan ang mga imahe at gamitin Engine ng Anchor upang i-scan ang mga imahe para sa mga kahinaan.

I-verify ang Mga Larawan gamit ang Notary Server

Bago namin magamit ang Notary server upang mag-sign ng mga imahe, kailangan nating i-download at mai-install ang docker-compose. Gagamitin namin ang Docker Compose upang mag-set up ng isang notaryo server.

  • Patakbuhin ang utos sa ibaba upang i-download ang pinakabagong bersyon ng Docker Compose

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

  • Mag-apply ng maipapatupad na mga pahintulot sa docker-compose tulad ng ipinakita sa ibaba

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

  • Maaari mong subukan kung matagumpay mong na-install ang docker-compose sa pamamagitan ng sumusunod na utos

docker-compose – pag-iwas

  • Ngayon ay maaari naming mai-install ang notaryo server sa pamamagitan ng docker-compose

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

  • Ang utos sa itaas clones o kopyahin ang notaryo server mula sa imbakan ng notaryo
  • Simulan ang notaryo server at signer sa pamamagitan ng mga utos sa ibaba:

docker-compose build
docker-compose up -d

  • Pagkatapos ay kopyahin ang mga pagsasaayos ng pagsasaayos at pagsusuri sa iyong lokal na direktoryo ng notaryo gamit ang utos sa ibaba

mkdir -p ~ / .hindi && cp cmd / notaryo / config.json cmd / notaryo / ugat-ca.crt ~ / notnotary

  • Ngayon patakbuhin ang sumusunod na utos upang ikonekta ang notaryo server sa docker client

i-export ang DOCKER_CONTENT_TRUST = 1
i-export ang DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Bumuo ng isang pares ng delegasyon key sa pamamagitan ng utos sa ibaba

docker trust key makabuo ng mike –dir ~. / docker / tiwala

  • Ngayon lumikha tayo ng isang bagong target na key kung sakaling wala ang repository

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

  • Pagkatapos ay maaari mong lagdaan ang iyong docker na imahe gamit ang sign docker trust sign. Kailangan mong hilahin ang imahe ng docker mula sa docker hub at muling tag gamit ang command docker pull at tag ng docker ayon sa pagkakabanggit..

docker trust sign mikedem0 / nginx: pinakabago

Maaari mo ring i-scan ang mga imahe ng docker para sa mga kahinaan at mga flaws sa pagsasaayos. Maaari mong suriin dito upang malaman kung paano mo magagamit ang Anchor Engine upang i-scan para sa mga kahinaan at Docker Bench Security upang suriin para sa mga flaws sa pagsasaayos.

Inaasahan ko na ang nasa itaas ay nagbibigay sa iyo ng isang ideya tungkol sa security Docker para sa kapaligiran sa paggawa. Maaari mo ring suriin ang kursong Udemy tungkol sa pag-hack at pag-secure ng mga lalagyan ng Docker.

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