
Ðо меÑе взÑоÑÐ»ÐµÐ½Ð¸Ñ Ð¸ ÑÑабилизаÑии ÑкоÑиÑÑÐµÐ¼Ñ Docker ÑвÑзаннÑе Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ ÑÑого пÑодÑкÑа ÑÐµÐ¼Ñ Ð¿ÑивлекаÑÑ Ð²Ñе болÑÑе вниманиÑ. ÐÑи пÑоекÑиÑовании инÑÑаÑÑÑÑкÑÑÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ избежаÑÑ Ð²Ð¾Ð¿ÑоÑа обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи Docker.
Ð Docker Ñже вÑÑÑоено неÑколÑко замеÑаÑелÑнÑÑ ÑÑедÑÑв обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи:
-
Docker-конÑейнеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑ: один или неÑколÑко ÑабоÑаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑов, ÑолÑко Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ðµ пÑогÑаммное обеÑпеÑение. ÐÑо ÑÐ½Ð¸Ð¶Ð°ÐµÑ Ð²ÐµÑоÑÑноÑÑÑ Ð¿Ð¾ÑÑÑадаÑÑ Ð¾Ñ ÑÑзвимоÑÑей в ÐÐ.
Docker-конÑейнеÑÑ Ð²ÑполнÑÑÑ ÑпеÑиÑиÑеÑкÑÑ Ð·Ð°Ð´Ð°ÑÑ. ÐаÑанее извеÑÑно, ÑÑо должно вÑполнÑÑÑÑÑ Ð² конÑейнеÑе, опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¿ÑÑи к диÑекÑоÑиÑм, оÑкÑÑÑÑе поÑÑÑ, конÑигÑÑаÑии демонов, ÑоÑки монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ. д. Ð ÑÐ°ÐºÐ¸Ñ ÑÑловиÑÑ Ð¿ÑоÑе обнаÑÑжиÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо ÑвÑзаннÑе Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ Ð°Ð½Ð¾Ð¼Ð°Ð»Ð¸Ð¸. ÐÑÐ¾Ñ Ð¿ÑинÑип оÑганизаÑии ÑиÑÑем Ð¸Ð´ÐµÑ ÑÑка об ÑÑÐºÑ Ñ Ð¼Ð¸ÐºÑоÑеÑвиÑной аÑÑ Ð¸ÑекÑÑÑой, позволÑÑ Ð·Ð½Ð°ÑиÑелÑно ÑменÑÑиÑÑ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑÑ Ð°Ñаки.
Docker-конÑейнеÑÑ Ð¸Ð·Ð¾Ð»Ð¸ÑÐ¾Ð²Ð°Ð½Ñ ÐºÐ°Ðº Ð¾Ñ Ñ Ð¾ÑÑа, Ñак и Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑов. ÐÑого ÑдаеÑÑÑ Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ ÑпоÑобноÑÑи ÑдÑа Linux изолиÑоваÑÑ ÑеÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
cgroupsиnamespaces. Ðо еÑÑÑ ÑеÑÑÐµÐ·Ð½Ð°Ñ Ð¿Ñоблема â ÑдÑо пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ Ð´ÐµÐ»Ð¸ÑÑ Ð¼ÐµÐ¶Ð´Ñ Ñ Ð¾ÑÑом и конÑейнеÑами (Ð¼Ñ ÐµÑе веÑнемÑÑ Ðº ÑÑой Ñеме ÑÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ).
- Docker-конÑейнеÑÑ Ð²Ð¾ÑпÑоизводимÑ. ÐлагодаÑÑ Ð¸Ñ Ð´ÐµÐºÐ»Ð°ÑаÑивной ÑиÑÑеме ÑбоÑки лÑбой админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð»ÐµÐ³ÐºÐ¾ вÑÑÑниÑÑ, из Ñего и как бÑл Ñделан конÑейнеÑ. ÐÑайне маловеÑоÑÑно, ÑÑо Ñ Ð²Ð°Ñ Ð² иÑоге окажеÑÑÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑно кем наÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ legacy-ÑиÑÑема, коÑоÑÑÑ Ð½Ð¸ÐºÐ¾Ð¼Ñ Ð½Ðµ Ñ Ð¾ÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑиÑоваÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾. Ðнакомо, не пÑавда ли? ;)
Ðднако в оÑнованнÑÑ Ð½Ð° Docker ÑиÑÑÐµÐ¼Ð°Ñ ÐµÑÑÑ Ð¸ ÑлабÑе меÑÑа. Ð ÑÑой ÑÑаÑÑе Ð¼Ñ ÐºÐ°Ðº Ñаз о Ð½Ð¸Ñ Ð¸ поговоÑим, ÑаÑÑмоÑÑев 7 пÑоблем безопаÑноÑÑи Docker.
ÐÐ°Ð¶Ð´Ð°Ñ ÑекÑÐ¸Ñ Ñазделена на ÑледÑÑÑие ÑаÑÑи:
- ÐпиÑание ÑгÑозÑ: векÑÐ¾Ñ Ð°Ñаки и пÑиÑÐ¸Ð½Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ.
- ÐÑÑÑие пÑакÑики: ÑÑо можно ÑделаÑÑ Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ ÑгÑоз Ñакого вида.
- ÐÑимеÑ(-Ñ): пÑоÑÑÑе, легко воÑпÑоизводимÑе ÑпÑÐ°Ð¶Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑакÑики.
ÐезопаÑноÑÑÑ Docker-Ñ Ð¾ÑÑа и ÑдÑа
ÐпиÑание
Ð ÑкомпÑомеÑиÑованной ÑиÑÑеме изолÑÑÐ¸Ñ Ð¸ пÑоÑие Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи конÑейнеÑов Ñже вÑÑд ли помогÑÑ. ÐÑоме Ñого, ÑиÑÑема ÑпÑоекÑиÑована Ñаким обÑазом, ÑÑо конÑейнеÑÑ Ð¸ÑполÑзÑÑÑ ÑдÑо Ñ Ð¾ÑÑа. Ðо многим Ñже знакомÑм вам пÑиÑинам ÑÑо повÑÑÐ°ÐµÑ ÑÑÑекÑивноÑÑÑ ÑабоÑÑ, но Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи ÑÐ°ÐºÐ°Ñ Ð¾ÑобенноÑÑÑ ÑвлÑеÑÑÑ ÑгÑозой, Ñ ÐºÐ¾ÑоÑой надо боÑоÑÑÑÑ.
ÐÑÑÑие пÑакÑики
Тема обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи Linux-Ñ Ð¾ÑÑа веÑÑма обÑиÑна, и по ней напиÑано немало лиÑеÑаÑÑÑÑ. ЧÑо каÑаеÑÑÑ Ð¸ÑклÑÑиÑелÑно Docker:
УбедиÑеÑÑ Ð² безопаÑноÑÑи конÑигÑÑаÑии Ñ Ð¾ÑÑа и Docker engine (доÑÑÑп огÑаниÑен и пÑедоÑÑавлен ÑолÑко аÑÑенÑиÑиÑиÑованнÑм полÑзоваÑелÑм, канал ÑвÑзи заÑиÑÑован и Ñ. д.) ÐÐ»Ñ Ð¿ÑовеÑки конÑигÑÑаÑии на ÑооÑвеÑÑÑвие лÑÑÑим пÑакÑикам ÑекомендÑÑ Ð²Ð¾ÑполÑзоваÑÑÑÑ Ð¸Ð½ÑÑÑÑменÑом Docker bench audit tool.
СвоевÑеменно обновлÑйÑе ÑиÑÑемÑ, подпиÑиÑеÑÑ Ð½Ð° ÑаÑÑÑÐ»ÐºÑ Ð¿Ð¾ безопаÑноÑÑи опеÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð¸ дÑÑгого ÑÑÑановленного пÑогÑаммного обеÑпеÑениÑ, оÑобенно еÑли оно ÑÑÑанавливаеÑÑÑ Ð¸Ð· ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑепозиÑоÑиев (напÑимеÑ, ÑиÑÑÐµÐ¼Ñ Ð¾ÑкеÑÑÑовки конÑейнеÑов, Ð¾Ð´Ð½Ñ Ð¸Ð· коÑоÑÑÑ Ð²Ñ Ñже навеÑнÑка ÑÑÑановили).
ÐÑполÑзÑйÑе минималÑнÑе, ÑпеÑиалÑно пÑедназнаÑеннÑе Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ ÐºÐ¾Ð½ÑейнеÑами Ñ Ð¾ÑÑ-ÑиÑÑемÑ, Ñакие как CoreOS, Red Hat Atomic, RancherOS и Ñ. д. ÐÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÑменÑÑиÑÑ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑÑ Ð°Ñаки, а Ñакже воÑполÑзоваÑÑÑÑ Ñакими ÑдобнÑми ÑÑнкÑиÑми, как, напÑимеÑ, вÑполнение ÑиÑÑемнÑÑ ÑеÑвиÑов в конÑейнеÑÐ°Ñ .
- ÐÐ»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑнÑÑ Ð¾Ð¿ÐµÑаÑий как на Ñ Ð¾ÑÑе, Ñак и в конÑейнеÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ задейÑÑвоваÑÑ ÑиÑÑÐµÐ¼Ñ ÐандаÑного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ��Ñпом (Mandatory Access Control). Ð ÑÑом вам помогÑÑ Ñакие инÑÑÑÑменÑÑ, как Seccomp, AppArmor или SELinux.
ÐÑимеÑÑ:
Seccomp позволÑÐµÑ Ð¾Ð³ÑаниÑиваÑÑ Ð´ÐµÐ¹ÑÑвиÑ, доÑÑÑпнÑе конÑейнеÑÑ, в ÑаÑÑноÑÑи â ÑиÑÑемнÑе вÑзовÑ. ÐÑо ÑÑо-Ñо вÑоде бÑандмаÑÑÑа, но Ð´Ð»Ñ Ð¸Ð½ÑеÑÑейÑа вÑзовов ÑдÑа.
ÐекоÑоÑÑе пÑивилегии заблокиÑÐ¾Ð²Ð°Ð½Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐопÑобÑйÑе вÑполниÑÑ Ñакие командÑ:
# docker run -it alpine sh / # whoami root / # mount /dev/sda1 /tmp mount: permission denied (are you root?)
или
/ # swapoff -a swapoff: /dev/sda2: Operation not permitted
ÐÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑоздаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий пÑоÑÐ¸Ð»Ñ Seccomp, напÑимеÑ, запÑеÑив вÑÐ·Ð¾Ð²Ñ chmod.
ÐавайÑе загÑÑзим деÑолÑнÑй пÑоÑÐ¸Ð»Ñ Seccomp Ð´Ð»Ñ Docker:
https://raw.githubusercontent.com/moby/moby/master/profiles/seccomp/default.json
Ðо вÑÐµÐ¼Ñ ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайла Ð²Ñ ÑвидиÑе белÑй ÑпиÑок (whitelist) ÑиÑÑемнÑÑ Ð²Ñзовов (в Ñайоне ÑÑÑоки 52), ÑдалиÑе из него chmod, fchmod и fchmodat.
ТепеÑÑ Ð·Ð°Ð¿ÑÑÑиÑе конÑÐµÐ¹Ð½ÐµÑ Ñ ÑÑим пÑоÑилем и пÑовеÑÑÑе ÑабоÑÑ ÑÑÑановленнÑÑ Ð¾Ð³ÑаниÑений:
# docker container run --rm -it --security-opt seccomp=./default.json alpine sh / # chmod +r /usr chmod: /usr: Operation not permitted
ÐÑÑ Ð¾Ð´ за пÑÐµÐ´ÐµÐ»Ñ Docker-конÑейнеÑа
ÐпиÑание
ТеÑмин «вÑÑ Ð¾Ð´ за пÑÐµÐ´ÐµÐ»Ñ ÐºÐ¾Ð½ÑейнеÑа» (container breakout) иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑиÑÑаÑии, пÑи коÑоÑой какой-либо пÑогÑамме, запÑÑенной внÑÑÑи Docker-конÑейнеÑа, ÑдаеÑÑÑ Ð¿ÑеодолеÑÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ Ð¸Ð·Ð¾Ð»ÑÑии и полÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пÑивилегии или доÑÑÑп к конÑиденÑиалÑной инÑоÑмаÑии на Ñ Ð¾ÑÑе. ÐÐ»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ï¿½ï¿½Ñ Ð¿ÑоÑÑвов иÑполÑзÑеÑÑÑ ÑменÑÑение колиÑеÑÑва пÑивилегий конÑейнеÑа, вÑдаваемÑÑ ÐµÐ¼Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐапÑимеÑ, демон Docker по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑполнÑеÑÑÑ Ð¿Ð¾Ð´ ÑÑÑом, однако ÑÑÑеÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑоздаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкое пÑоÑÑÑанÑÑво имен (user-level namespace) или ÑнÑÑÑ Ð¿Ð¾ÑенÑиалÑно опаÑнÑе пÑивилегии конÑейнеÑа.
ЦиÑаÑа из ÑÑаÑÑи об ÑÑзвимоÑÑÑÑ , ÑвÑзаннÑÑ Ñ ÐºÐ¾Ð½ÑигÑÑаÑией Docker по ÑмолÑаниÑ:
«ÐÑÐ¾Ñ ÑкÑпеÑименÑалÑнÑй ÑкÑÐ¿Ð»Ð¾Ð¸Ñ Ð¾Ñнован на Ñом, ÑÑо ÑдÑо пÑедоÑÑавлÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾ÑкÑÑÑÑ Ñайл по его inode. РболÑÑинÑÑве ÑиÑÑем inode коÑневой диÑекÑоÑии (/) Ñавен 2. ÐÑо Ð´Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸Ð´Ñи по деÑÐµÐ²Ñ ÐºÐ°Ñалогов Ñайловой ÑиÑÑÐµÐ¼Ñ Ñ Ð¾ÑÑа до ÑÐµÑ Ð¿Ð¾Ñ, пока не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½ иÑкомÑй обÑекÑ, напÑимеÑ, Ñайл Ñ Ð¿Ð°ÑолÑми».
ÐÑÑÑие пÑакÑики
ÐÑивилегии (capabilities), коÑоÑÑе не нÑÐ¶Ð½Ñ Ð¿ÑиложениÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑнÑÑÑ.
- CAP_SYS_ADMIN в плане безопаÑноÑÑи оÑобенно коваÑна, поÑколÑÐºÑ Ð´Ð°ÐµÑ Ð¿Ñаво на вÑполнение знаÑиÑелÑного колиÑеÑÑва опеÑаÑий ÑÑÐ¾Ð²Ð½Ñ ÑÑпеÑполÑзоваÑелÑ: монÑиÑование ÑайловÑÑ ÑиÑÑем, Ð²Ñ Ð¾Ð´ в пÑоÑÑÑанÑÑва имен ÑдÑа, опеÑаÑии ioctl...
ЧÑÐ¾Ð±Ñ Ð¿Ñивилегии конÑейнеÑа бÑли ÑквиваленÑÑ Ð¿Ñавам обÑÑного полÑзоваÑелÑ, ÑоздайÑе Ð´Ð»Ñ Ð²Ð°ÑÐ¸Ñ ÐºÐ¾Ð½ÑейнеÑов изолиÑованное полÑзоваÑелÑÑкое пÑоÑÑÑанÑÑво имен. Ðо возможноÑÑи избегайÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑов Ñ uid 0.
ÐÑли без пÑивилегиÑованного конÑейнеÑа вÑе же не обойÑиÑÑ, ÑбедиÑеÑÑ, ÑÑо он ÑÑÑанавливаеÑÑÑ Ð¸Ð· довеÑенного ÑепозиÑоÑÐ¸Ñ (Ñм. ниже Ñаздел «ÐодлинноÑÑÑ Ð¾Ð±Ñазов конÑейнеÑов»).
- ÐнимаÑелÑно ÑледиÑе за ÑлÑÑаÑми монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑенÑиалÑно опаÑнÑÑ ÑеÑÑÑÑов Ñ Ð¾ÑÑа: /var/run/docker.sock), /proc, /dev и Ñ. д. ÐбÑÑно ÑÑи ÑеÑÑÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий, ÑвÑзаннÑÑ Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð¹ ÑÑнкÑионалÑноÑÑÑÑ ÐºÐ¾Ð½ÑейнеÑов. УбедиÑеÑÑ, ÑÑо Ð²Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑе, поÑÐµÐ¼Ñ Ð¸ как Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ огÑаниÑиваÑÑ Ð´Ð¾ÑÑÑп пÑоÑеÑÑов к ÑÑой инÑоÑмаÑии. Ðногда доÑÑаÑоÑно лиÑÑ ÑÑÑановки Ñежима «ÑолÑко ÑÑение». Ðикогда не давайÑе пÑава на запиÑÑ, не задавÑиÑÑ Ð²Ð¾Ð¿ÑоÑом, заÑем нÑжно ÑÑо пÑаво. РлÑбом ÑлÑÑае Docker иÑполÑзÑÐµÑ copy-on-write, ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ðµ изменений, пÑоизоÑедÑÐ¸Ñ Ð² вÑполнÑÑÑемÑÑ ÐºÐ¾Ð½ÑейнеÑе, в его базовÑй обÑаз и поÑенÑиалÑно в дÑÑгие конÑейнеÑÑ, коÑоÑÑе бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð½Ð° базе ÑÑого обÑаза.
ÐÑимеÑÑ
Root-полÑзоваÑÐµÐ»Ñ Docker-конÑейнеÑа по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ ÑÑÑÑойÑÑва. ÐеÑоÑÑно, Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе ÑÑо запÑеÑиÑÑ:
# sudo docker run --rm -it --cap-drop=MKNOD alpine sh / # mknod /dev/random2 c 1 8 mknod: /dev/random2: Operation not permitted
Root Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ñава доÑÑÑпа лÑбого Ñайла. ÐÑо легко пÑовеÑиÑÑ: ÑоздайÑе Ñайл под лÑбÑм обÑÑнÑм полÑзоваÑелем, вÑполниÑе chmod 600 (ÑÑение и запиÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑолÑко владелÑÑÑ), зайдиÑе Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ root и ÑбедиÑеÑÑ, ÑÑо Ñайл вам по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð´Ð¾ÑÑÑпен.
ÐÑо Ñакже можно иÑпÑавиÑÑ, оÑобенно еÑли Ñ Ð²Ð°Ñ Ð¼Ð¾Ð½ÑиÑÑÑÑÑÑ Ð¿Ð°Ð¿ÐºÐ¸ Ñ ÐºÐ¾Ð½ÑиденÑиалÑнÑми полÑзоваÑелÑÑкими даннÑми.
# sudo docker run --rm -it --cap-drop=DAC_OVERRIDE alpine sh
СоздайÑе обÑÑного полÑзоваÑÐµÐ»Ñ Ð¸ пеÑейдиÑе в его домаÑнÑÑ Ð´Ð¸ÑекÑоÑиÑ. ÐаÑем:
~ $ touch supersecretfile ~ $ chmod 600 supersecretfile ~ $ exit ~ # cat /home/user/supersecretfile cat: can't open '/home/user/supersecretfile': Permission denied
Ðногие ÑканеÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи и вÑедоноÑнÑе пÑогÑÐ°Ð¼Ð¼Ñ ÑобиÑаÑÑ Ñвои ÑеÑевÑе пакеÑÑ Ñ Ð½ÑлÑ. Такое поведение можно запÑеÑиÑÑ ÑледÑÑÑим обÑазом:
# docker run --cap-drop=NET_RAW -it uzyexe/nmap -A localhost Starting Nmap 7.12 ( https://nmap.org ) at 2017-08-16 10:13 GMT Couldn't open a raw socket. Error: Operation not permitted (1)
ÐолнÑй ÑпиÑок пÑивилегий можно найÑи здеÑÑ. РекомендÑÑ Ñ Ð½Ð¸Ð¼ ознакомиÑÑÑÑ Ð¸ ÑбÑаÑÑ Ð²Ñе пÑивилегии, коÑоÑÑе ваÑим конÑейнеÑам не нÑжнÑ.
ÐÑли Ð²Ñ ÑоздаеÑе конÑÐµÐ¹Ð½ÐµÑ Ð±ÐµÐ· пÑоÑÑÑанÑÑва имен, Ñо по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑоÑеÑÑÑ, вÑполнÑÑÑиеÑÑ Ð²Ð½ÑÑÑи конÑейнеÑа, Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ñ Ð¾ÑÑа бÑдÑÑ ÑабоÑаÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑелÑ.
# docker run -d -P nginx # ps aux | grep nginx root 18951 0.2 0.0 32416 4928 ? Ss 12:31 0:00 nginx: master process nginx -g daemon off;
Ðднако Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ Ð¾ÑделÑное полÑзоваÑелÑÑкое пÑоÑÑÑанÑÑво имен. ÐÐ»Ñ ÑÑого добавÑÑе клÑÑ conf в Ñайл /etc/docker/daemon.json (аккÑÑаÑнее, ÑоблÑдайÑе пÑавила ÑинÑакÑиÑа json):
"userns-remap": "default"
ÐеÑезапÑÑÑиÑе Docker. ÐÑи ÑÑом бÑÐ´ÐµÑ Ñоздан полÑзоваÑÐµÐ»Ñ dockremap. Ðовое пÑоÑÑÑанÑÑво имен бÑÐ´ÐµÑ Ð¿ÑÑÑÑм.
# systemctl restart docker # docker ps
Снова запÑÑÑиÑе обÑаз nginx:
# docker run -d -P nginx # ps aux | grep nginx 165536 19906 0.2 0.0 32416 5092 ? Ss 12:39 0:00 nginx: master process nginx -g daemon off;
ТепеÑÑ Ð¿ÑоÑеÑÑ nginx вÑполнÑеÑÑÑ Ð² дÑÑгом (полÑзоваÑелÑÑком) пÑоÑÑÑанÑÑве имен. Таким обÑазом нам ÑдалоÑÑ ÑлÑÑÑиÑÑ Ð¸Ð·Ð¾Ð»ÑÑÐ¸Ñ ÐºÐ¾Ð½ÑейнеÑов.
ÐодлинноÑÑÑ Ð¾Ð±Ñазов Docker
ÐпиÑание
Ð ÐнÑеÑÐ½ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ найÑи немало Docker-обÑазов, коÑоÑÑе делаÑÑ Ð²ÑевозможнÑе полезнÑе и клаÑÑнÑе веÑи, но еÑли Ð²Ñ Ð·Ð°Ð³ÑÑжаеÑе обÑÐ°Ð·Ñ Ð±ÐµÐ· иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°ÐºÐ¸Ñ -либо Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² довеÑÐ¸Ñ Ð¸ пÑовеÑки подлинноÑÑи, Ð²Ñ Ð¿Ð¾ ÑÑÑи запÑÑкаеÑе на ÑÐ²Ð¾Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¿ÑоизволÑное ÐÐ.
- ÐÑкÑда бÑл загÑÑжен ÑÑÐ¾Ñ Ð¾Ð±Ñаз?
- ÐовеÑÑеÑе ли Ð²Ñ ÐµÐ³Ð¾ ÑоздаÑелÑм? Ðакие полиÑики безопаÑноÑÑи они иÑполÑзÑÑÑ?
- ÐÑÑÑ Ð»Ð¸ Ñ Ð²Ð°Ñ Ð¾Ð±ÑекÑивное кÑипÑогÑаÑиÑеÑкое доказаÑелÑÑÑво Ñого, ÑÑо обÑаз бÑл дейÑÑвиÑелÑно Ñоздан ÑÑими лÑдÑми.
- ÐÑ ÑвеÑенÑ, ÑÑо никÑо не изменил обÑаз поÑле Ñого, как он бÑл загÑÑжен?
Docker запÑÑÑÐ¸Ñ Ð²Ñе, ÑÑо попÑоÑиÑе, поÑÑÐ¾Ð¼Ñ Ð¸Ð½ÐºÐ°Ð¿ÑÑлÑÑÐ¸Ñ Ð·Ð´ÐµÑÑ Ð½Ðµ поможеÑ. Ðаже еÑли Ð²Ñ Ð¿Ð¾Ð»ÑзÑеÑеÑÑ Ð¸ÑклÑÑиÑелÑно обÑазами ÑобÑÑвенного пÑоизводÑÑва, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл пÑовеÑÑÑÑ, не изменÑÐµÑ Ð»Ð¸ Ð¸Ñ ÐºÑо-нибÑÐ´Ñ Ð¿Ð¾Ñле ÑозданиÑ. РеÑение в иÑоге ÑводиÑÑÑ Ðº клаÑÑиÑеÑкой ÑепоÑке довеÑÐ¸Ñ Ð½Ð° оÑнове PKI.
ÐÑÑÑие пÑакÑики
ÐбÑÑнÑй здÑавÑй ÑмÑÑл: не запÑÑкайÑе непÑовеÑенное ÐРи/или ÐÐ, полÑÑенное из недовеÑеннÑÑ Ð¸ÑÑоÑников.
С помоÑÑÑ ÑеÑвеÑов ÑееÑÑÑов Docker, коÑоÑÑе можно найÑи в ÑÑом ÑпиÑке Docker Security Tools, ÑазвеÑниÑе довеÑеннÑй ÑеÑÐ²ÐµÑ (trust server).
- ÐÐ»Ñ Ð»Ñбого обÑаза, коÑоÑÑй загÑÑжаеÑÑÑ Ð¸Ð»Ð¸ запÑÑкаеÑÑÑ Ð² ÑиÑÑеме, обеÑпеÑÑÑе обÑзаÑелÑнÑÑ Ð¿ÑовеÑÐºÑ ÑиÑÑовой подпиÑи.
ÐÑимеÑÑ
РазвеÑÑÑвание полноÑенного довеÑенного ÑеÑвеÑа вÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð° Ñамки ÑÑой ÑÑаÑÑи, но Ð²Ñ Ñже ÑейÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑе наÑаÑÑ Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑÐ²Ð°Ð½Ð¸Ñ ÑÐ²Ð¾Ð¸Ñ Ð¾Ð±Ñазов.
ÐÑли Ñ Ð²Ð°Ñ ÐµÑе Ð½ÐµÑ ÑÑеÑной запиÑи на Docker Hub, заведиÑе ее.
СоздайÑе диÑекÑоÑÐ¸Ñ Ñ Ð¿ÑоÑÑÑм Dockerfile ÑледÑÑÑего ÑодеÑжаниÑ:
# cat Dockerfile FROM alpine:latest
СобеÑиÑе обÑаз:
# docker build -t <youruser>/alpineunsigned .
ÐойдиÑе в ÑÐ²Ð¾Ñ ÑÑеÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð° Docker Hub и загÑÑзиÑе обÑаз:
# docker login [â¦] # docker push <youruser>/alpineunsigned:latest
ÐклÑÑиÑе в Docker пÑинÑдиÑелÑнÑÑ Ð¿ÑовеÑÐºÑ Ð´Ð¾Ð²ÐµÑиÑ:
# export DOCKER_CONTENT_TRUST=1
ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑйÑе полÑÑиÑÑ ÑолÑко ÑÑо загÑÑженнÑй вами обÑаз:
# docker pull <youruser>/alpineunsigned
ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑледÑÑÑÑÑ Ð¾ÑибкÑ:
Using default tag: latest Error: remote trust data does not exist for docker.io/<youruser>/alpineunsigned: notary.docker.io does not have trust data for docker.io/<youruser>/alpineunsigned
ÐÑи вклÑÑенном DOCKER_CONTENT_TRUST ÑобеÑиÑе конÑÐµÐ¹Ð½ÐµÑ ÐµÑе Ñаз. ТепеÑÑ Ð¾Ð½ по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñан.
# docker build --disable-content-trust=false -t <youruser>/alpinesigned:latest .
ТепеÑÑ Ð²Ñ ÑможеÑе ÑкаÑиваÑÑ Ð¸ загÑÑжаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑаннÑе конÑейнеÑÑ Ð±ÐµÐ· ÐºÐ°ÐºÐ¸Ñ -либо пÑедÑпÑеждений, ÑвÑзаннÑÑ Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ. ÐÑи пеÑвой загÑÑзке довеÑенного обÑаза Docker ÑоздаÑÑ Ð´Ð»Ñ Ð²Ð°Ñ ÐºÐ¾Ñневой клÑÑ. Ðам Ñакже понадобиÑÑÑ ÐºÐ»ÑÑ ÑепозиÑоÑиÑ. Ð Ð¾Ð±Ð¾Ð¸Ñ ÑлÑÑаÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ñедложено задаÑÑ Ð¿Ð°ÑолÑ.
ÐаÑи закÑÑÑÑе клÑÑи бÑдÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð² диÑекÑоÑии ~/.docker/trust, огÑаниÑÑÑе к ним доÑÑÑп и ÑоздайÑе ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ.
DOCKER_CONTENT_TRUST â ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑжениÑ, коÑоÑÐ°Ñ Ð¸ÑÑÐµÐ·Ð½ÐµÑ Ð¿Ð¾Ñле закÑÑÑÐ¸Ñ ÑеÑминалÑной ÑеÑÑии. Ðднако пÑовеÑка довеÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ð½ÐµÐ´Ñена на каждом ÑÑапе пÑоÑеÑÑа â Ð¾Ñ ÑбоÑки обÑазов и Ð¸Ñ ÑазмеÑÐµÐ½Ð¸Ñ Ð² ÑееÑÑÑÐ°Ñ Ð´Ð¾ закаÑки и вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° ÑеÑвеÑÐ°Ñ .
ÐлоÑпоÑÑебление ÑеÑÑÑÑами
ÐпиÑание
Ð ÑÑеднем конÑейнеÑÑ Ð¿Ð¾ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð²Ð¸ÑÑÑалÑнÑми маÑинами гоÑаздо более многоÑиÑленнÑ. Ðни легковеÑнÑ, ÑÑо позволÑÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво конÑейнеÑов даже на веÑÑма ÑкÑомном железе. ÐÑо, безÑÑловно, пÑеимÑÑеÑÑво, однако обÑаÑной ÑÑоÑоной медали ÑвлÑеÑÑÑ ÑеÑÑÐµÐ·Ð½Ð°Ñ ÐºÐ¾Ð½ÐºÑÑенÑÐ¸Ñ Ð·Ð° ÑеÑÑÑÑÑ Ñ Ð¾ÑÑа. ÐÑибки в пÑогÑаммном обеÑпеÑении, недоÑÑаÑки пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ аÑаки Ñ Ð°ÐºÐµÑов могÑÑ Ð¿ÑиводиÑÑ Ðº ÐÑказам в обÑлÑживании (Denial of Service). ÐÐ»Ñ Ð¸Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ должнÑм обÑазом наÑÑÑаиваÑÑ Ð»Ð¸Ð¼Ð¸ÑÑ ÑеÑÑÑÑов.
Ðоложение ÑÑ ÑдÑаеÑÑÑ Ñем, ÑÑо ÑеÑÑÑÑов, коÑоÑÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ конÑÑолиÑоваÑÑ, неÑколÑко: CPU, памÑÑÑ, меÑÑо на диÑÐºÐ°Ñ , загÑÑзка ÑеÑи, I/O, подкаÑка и Ñ. д. Ð ÑдÑе еÑÑÑ Ð¸ не ÑÑÐ¾Ð»Ñ Ð¾ÑевиднÑе ÑеÑÑÑÑÑ, как, напÑимеÑ, иденÑиÑикаÑоÑÑ Ð¿Ð¾Ð»ÑзоваÑелей (UIDs).
ÐÑÑÑие пÑакÑики
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² болÑÑинÑÑве ÑиÑÑем конÑейнеÑизаÑии огÑаниÑение ÑÑÐ¸Ñ ÑеÑÑÑÑов оÑклÑÑено. Ðднако в production Ð¸Ñ Ð½Ð°ÑÑÑойка пÑоÑÑо обÑзаÑелÑна. РекомендÑÑ Ð¿ÑидеÑживаÑÑÑÑ ÑледÑÑÑÐ¸Ñ Ð¿ÑинÑипов:
ÐÑполÑзÑйÑе ÑÑнкÑии огÑаниÑÐµÐ½Ð¸Ñ ÑеÑÑÑÑов, идÑÑие в ÑоÑÑаве ÑдÑа Linux и/или ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð½ÑейнеÑизаÑии.
ÐоÑÑаÑайÑеÑÑ Ð¿ÑовеÑÑи нагÑÑзоÑное ÑеÑÑиÑование ÑиÑÑÐµÐ¼Ñ Ð¿ÐµÑед ее запÑÑком в пÑомÑÑленнÑÑ ÑкÑплÑаÑаÑиÑ. ÐÐ»Ñ ÑÑого иÑполÑзÑÑÑÑÑ ÐºÐ°Ðº ÑинÑеÑиÑеÑкие ÑеÑÑÑ, Ñак и «пÑоигÑÑвание» ÑеалÑного ÑÑаÑика боевой ÑиÑÑемÑ. ÐагÑÑзоÑное ÑеÑÑиÑование жизненно важно Ð´Ð»Ñ Ð²ÑÑÑÐ½ÐµÐ½Ð¸Ñ Ð¿ÑеделÑнÑÑ Ð¸ ноÑмалÑнÑÑ ÑабоÑÐ¸Ñ Ð½Ð°Ð³ÑÑзок.
- РазвеÑниÑе ÑиÑÑÐµÐ¼Ñ Ð¼Ð¾Ð½Ð¸ÑоÑинга и оповеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Docker. УвеÑен, ÑÑо в ÑлÑÑае злоÑпоÑÑÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÑеÑÑÑÑами (злонамеÑенного или неÑ) Ð²Ñ Ð¿ÑедпоÑÑеÑе полÑÑиÑÑ ÑвоевÑеменное пÑедÑпÑеждение, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð²ÑеÌзаÑÑÑÑ Ð² ÑÑÐµÐ½Ñ Ð½Ð° полном Ñ Ð¾Ð´Ñ.
ÐÑимеÑÑ
ÐонÑÑолÑнÑе гÑÑÐ¿Ð¿Ñ (cgroups) â ÑÑо пÑедоÑÑавлÑемÑй ÑдÑом Linux инÑÑÑÑменÑ, коÑоÑÑй позволÑÐµÑ Ð¾Ð³ÑаниÑиваÑÑ Ð´Ð¾ÑÑÑп пÑоÑеÑÑов и конÑейнеÑов к ÑиÑÑемнÑм ÑеÑÑÑÑам. ÐекоÑоÑÑе лимиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ конÑÑолиÑоваÑÑ Ð¸Ð· командной ÑÑÑоки Docker:
# docker run -it --memory=2G --memory-swap=3G ubuntu bash
ÐÑа команда ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ Ð¾Ð³ÑаниÑение доÑÑÑпной конÑейнеÑÑ Ð¿Ð°Ð¼ÑÑи в 2 ÐÐ (вÑего 3 ÐРна оÑновнÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð¸ подкаÑкÑ). ÐÐ»Ñ Ð¿ÑовеÑки огÑаниÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑÑим ÑимÑлÑÑÐ¾Ñ Ð½Ð°Ð³ÑÑзки, напÑимеÑ, пÑогÑÐ°Ð¼Ð¼Ñ stress, коÑоÑÐ°Ñ ÐµÑÑÑ Ð² ÑепозиÑоÑиÑÑ
Ubuntu:
root@e05a311b401e:/# stress -m 4 --vm-bytes 8G
РвÑводе пÑогÑÐ°Ð¼Ð¼Ñ Ð²Ñ ÑвидиÑе ÑÑÑÐ¾ÐºÑ âFAILEDâ.
Ð syslog Ñ Ð¾ÑÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾ÑвиÑÑÑÑ Ñакие ÑÑÑоки:
Aug 15 12:09:03 host kernel: [1340695.340552] Memory cgroup out of memory: Kill process 22607 (stress) score 210 or sacrifice child Aug 15 12:09:03 host kernel: [1340695.340556] Killed process 22607 (stress) total-vm:8396092kB, anon-rss:363184kB, file-rss:176kB, shmem-rss:0kB
С помоÑÑÑ docker stats Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑоÑниÑÑ ÑекÑÑее поÑÑебление памÑÑи и ÑÑÑановленнÑе лимиÑÑ. Ð ÑлÑÑае Ñ Kubernetes в опÑеделении пода можно забÑониÑоваÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑе Ð´Ð»Ñ Ð½Ð¾ÑмалÑной ÑабоÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑеÑÑÑÑÑ, а Ñакже ÑÑÑановиÑÑ Ð»Ð¸Ð¼Ð¸ÑÑ. См. requests and limits:
[...] - name: wp image: wordpress resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" [...]
УÑзвимоÑÑи в обÑÐ°Ð·Ð°Ñ ÐºÐ¾Ð½ÑейнеÑов
ÐпиÑание
ÐонÑейнеÑÑ â ÑÑо изолиÑованнÑе ÑеÑнÑе ÑÑики. ÐÑли они вÑполнÑÑÑ Ñвои ÑÑнкÑии, легко забÑÑÑ, какие пÑогÑÐ°Ð¼Ð¼Ñ ÐºÐ°ÐºÐ¸Ñ Ð²ÐµÑÑий запÑÑÐµÐ½Ñ Ð²Ð½ÑÑÑи. ÐонÑÐµÐ¹Ð½ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑно ÑпÑавлÑÑÑÑÑ Ñо Ñвоими обÑзанноÑÑÑми Ñ Ð¾Ð¿ÐµÑаÑионной ÑоÑки зÑениÑ, пÑи ÑÑом иÑполÑзÑÑ ÑÑзвимое пÑогÑаммное обеÑпеÑение. ÐÑи ÑÑзвимоÑÑи могÑÑ Ð±ÑÑÑ Ð´Ð°Ð²Ð½Ð¾ иÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² апÑÑÑиме, но не в ваÑем локалÑном обÑазе. ÐÑли не пÑедпÑинимаÑÑ ÑооÑвеÑÑÑвÑÑÑие меÑÑ, пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð³Ð¾ Ñода могÑÑ Ð´Ð¾Ð»Ð³Ð¾Ðµ вÑÐµÐ¼Ñ Ð¾ÑÑаваÑÑÑÑ Ð½ÐµÐ·Ð°Ð¼ÐµÑеннÑми.
ÐÑÑÑие пÑакÑики
ÐÑедÑÑавление конÑейнеÑов в виде неизменÑемÑÑ Ð°ÑомаÑнÑÑ ÑаÑÑей ÑиÑÑÐµÐ¼Ñ Ð¾Ð±Ð¾Ñнованно Ñ Ð°ÑÑ Ð¸ÑекÑÑÑной ÑоÑки зÑениÑ, однако Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи Ð¸Ñ ÑодеÑжимое нÑжно ÑегÑлÑÑно пÑовеÑÑÑÑ:
- ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ñвежие иÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑзвимоÑÑей, ÑегÑлÑÑно обновлÑйÑе и пеÑеÑобиÑайÑе Ñвои обÑазÑ. РазÑмееÑÑÑ, не забÑвайÑе ÑеÑÑиÑоваÑÑ Ð¸Ñ
пеÑед Ñем, как оÑпÑавлÑÑÑ Ð² production.
- ÐаÑÑиÑÑ ÑабоÑаÑÑие конÑейнеÑÑ ÑÑиÑаеÑÑÑ Ð´ÑÑнÑм Ñоном. ÐÑÑÑе пÑи каждом обновлении пеÑеÑобиÑаÑÑ Ð¾Ð±Ñаз. Ð Docker Ñеализована деклаÑаÑивнаÑ, ÑÑÑекÑÐ¸Ð²Ð½Ð°Ñ Ð¸ Ð»ÐµÐ³ÐºÐ°Ñ Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ ÑиÑÑема ÑбоÑки, Ñак ÑÑо ÑÑа пÑоÑедÑÑа на Ñамом деле пÑоÑе, Ñем кажеÑÑÑ Ð½Ð° пеÑвÑй взглÑд.
- ÐÑполÑзÑйÑе пÑогÑаммное обеÑпеÑение, коÑоÑое ÑегÑлÑÑно полÑÑÐ°ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи. ÐÑе, ÑÑо Ð²Ñ ÑÑÑанавливаеÑе вÑÑÑнÑÑ, минÑÑ ÑепозиÑоÑии ваÑего диÑÑÑибÑÑива, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ в далÑнейÑем обновлÑÑÑ ÑамоÑÑоÑÑелÑно.
- ÐоÑÑепеннÑе Ñоллинг-Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ· пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑабоÑÑ ÑеÑвиÑа ÑÑиÑаÑÑÑÑ ÑÑндаменÑалÑнÑм ÑвойÑÑвом модели поÑÑÑÐ¾ÐµÐ½Ð¸Ñ ÑиÑÑем Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Docker и микÑоÑеÑвиÑов.
- ÐолÑзоваÑелÑÑкие даннÑе оÑÐ´ÐµÐ»ÐµÐ½Ñ Ð¾Ñ Ð¾Ð±Ñазов конÑейнеÑов, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¿ÑоÑеÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñнее.
- Ðе ÑÑложнÑйÑе. ÐÑоÑÑÑе ÑиÑÑÐµÐ¼Ñ Ñеже ÑÑебÑÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ð¹. Чем менÑÑе компоненÑов в ÑиÑÑеме, Ñем менÑÑе повеÑÑ Ð½Ð¾ÑÑÑ Ð°Ñаки и пÑоÑе обновлениÑ. РазбивайÑе конÑейнеÑÑ, еÑли они ÑÑановÑÑÑÑ ÑлиÑком ÑложнÑми.
- ÐÑполÑзÑйÑе ÑканеÑÑ ÑÑзвимоÑÑей. ÐÑ
ÑейÑÐ°Ñ Ð¿ÑедоÑÑаÑоÑно â и беÑплаÑнÑÑ
, и коммеÑÑеÑкиÑ
. СÑаÑайÑеÑÑ Ð±ÑÑÑ Ð² кÑÑÑе ÑобÑÑий, ÑвÑзаннÑÑ
Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ Ð¸ÑполÑзÑемого вами пÑогÑаммного обеÑпеÑениÑ, подпиÑиÑеÑÑ Ð½Ð° поÑÑовÑе ÑаÑÑÑлки, ÑеÑвиÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑений и Ñ. д.
- СделайÑе ÑканиÑование безопаÑноÑÑи обÑзаÑелÑнÑм ÑÑапом Ñвоей CI/CD-ÑепоÑки, авÑомаÑизиÑÑйÑе по возможноÑÑи â не ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð»Ð¸ÑÑ Ð½Ð° ÑÑÑнÑе пÑовеÑки.
ÐÑимеÑÑ
Ðногие ÑееÑÑÑÑ Ð¾Ð±Ñазов Docker пÑедлагаÑÑ ÑÑлÑÐ³Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñазов. ÐÑбеÑем, напÑимеÑ, CoreOS Quay, в коÑоÑом иÑполÑзÑеÑÑÑ ÑÐºÐ°Ð½ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи обÑазов Docker Ñ Ð¾ÑкÑÑÑÑм иÑÑ Ð¾Ð´Ð½Ñм кодом под названием Clair. Quay â ÑÑо коммеÑÑеÑÐºÐ°Ñ Ð¿Ð»Ð°ÑÑоÑма, но некоÑоÑÑе ÑÑлÑги пÑедоÑÑавлÑÑÑÑÑ Ð±ÐµÑплаÑно. ÐÑобнÑÑ ÑÑеÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑоздаÑÑ, ÑледÑÑ ÑÑим инÑÑÑÑкÑиÑм.
ÐоÑле ÑегиÑÑÑаÑии аккаÑнÑа оÑкÑойÑе Account Settings и ÑÑÑановиÑе новÑй паÑÐ¾Ð»Ñ (он понадобиÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑепозиÑоÑиев).
ÐажмиÑе + в пÑавом веÑÑ Ð½ÐµÐ¼ ÑÐ³Ð»Ñ Ð¸ ÑоздайÑе новÑй пÑблиÑнÑй ÑепозиÑоÑий:

ÐдеÑÑ Ð¼Ñ Ñоздадим пÑÑÑой ÑепозиÑоÑий, но, как видно на ÑкÑинÑоÑе, ÑÑÑеÑÑвÑÑÑ Ð¸ дÑÑгие ваÑианÑÑ.
ТепеÑÑ Ð¸Ð· конÑоли залогинимÑÑ Ð² Quay и загÑÑзим ÑÑда локалÑнÑй обÑаз:
# docker login quay.io # docker push quay.io/<your_quay_user>/<your_quay_image>:<tag>
ÐÑли обÑаз Ñже загÑÑжен, можно ÑелкнÑÑÑ Ð¿Ð¾ его ID и поÑмоÑÑеÑÑ ÑезÑлÑÑаÑÑ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, оÑÑоÑÑиÑованнÑе в поÑÑдке ÑбÑÐ²Ð°Ð½Ð¸Ñ Ð¾Ð¿Ð°ÑноÑÑи ÑÑзвимоÑÑи, коÑоÑÑе ÑÐ½Ð°Ð±Ð¶ÐµÐ½Ñ ÑÑÑлками на CVE и веÑÑии пакеÑов, ÑодеÑжаÑие иÑпÑавлениÑ.

УÑеÑнÑе даннÑе и ÑекÑеÑÑ Docker
ÐпиÑание
РболÑÑинÑÑве ÑлÑÑаев пÑогÑаммам Ð´Ð»Ñ Ð½Ð¾ÑмалÑной ÑабоÑÑ Ð½ÑÐ¶Ð½Ñ ÐºÐ¾Ð½ÑиденÑиалÑнÑе даннÑе: Ñ ÐµÑи паÑолей полÑзоваÑелей, ÑеÑÑиÑикаÑÑ, клÑÑи ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ. д. ÐÑа ÑиÑÑаÑÐ¸Ñ ÑÑÑгÑблÑеÑÑÑ Ð¿ÑиÑодой конÑейнеÑов: Ð²Ñ Ð½Ðµ пÑоÑÑо поднимаеÑе ÑеÑвеÑ, а наÑÑÑаиваеÑе ÑÑедÑ, в коÑоÑой микÑоÑеÑвиÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑÑоÑнно ÑоздаваÑÑÑÑ Ð¸ ÑниÑÑожаÑÑÑÑ. Ð ÑÑом ÑлÑÑае Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ ÑабоÑаÑÑий авÑомаÑиÑеÑки, надежнÑй и безопаÑнÑй пÑоÑеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÑиденÑиалÑной инÑоÑмаÑии.
ÐÑÑÑие пÑакÑики
Ðе иÑполÑзÑйÑе пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑекÑеÑов. ÐÑо ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ð½Ð°Ñ Ð¸ небезопаÑÐ½Ð°Ñ Ð¿ÑакÑика.
Ðе ÑÐ¾Ñ ÑанÑйÑе ÑекÑеÑÑ Ð² обÑÐ°Ð·Ð°Ñ ÐºÐ¾Ð½ÑейнеÑов. ÐÑоÑиÑайÑе ÑÑÐ¾Ñ Ð¾ÑÑÐµÑ Ð¾ Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¸ и ÑÑÑÑанении ÑÑзвимоÑÑи в одном из ÑеÑвиÑов IBM: «ÐакÑÑÑÑй клÑÑ Ð¸ ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð±Ñли по оÑибке оÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð²Ð½ÑÑÑи обÑаза конÑейнеÑа».
- ÐÑли Ñ Ð²Ð°Ñ Ð´Ð¾ÑÑаÑоÑно ÑÐ»Ð¾Ð¶Ð½Ð°Ñ ÑиÑÑема, ÑазвеÑниÑе пÑогÑаммное обеÑпеÑение ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑеÑнÑми даннÑми Docker. Ð ÑÑаÑÑе Docker security tools Ð¼Ñ ÑаÑÑмоÑÑели неÑколÑко коммеÑÑеÑкиÑ
и беÑплаÑнÑÑ
ÑеÑений. ÐеÑиÑеÑÑ Ð·Ð° Ñоздание ÑобÑÑвенного Ñ
ÑанилиÑа ÑекÑеÑов (Ñ Ð·Ð°Ð³ÑÑзкой ÑекÑеÑов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
curl, монÑиÑованием Ñомов и Ñ. д. и Ñ. п.) ÑолÑко в Ñом ÑлÑÑае, еÑли Ð²Ñ Ð¾ÑÐµÐ½Ñ Ñ Ð¾ÑоÑо знаеÑе, ÑÑо делаеÑе.
ÐÑимеÑÑ
ÐÐ»Ñ Ð½Ð°Ñала поÑмоÑÑим, как пеÑÐµÑ Ð²Ð°ÑÑваÑÑÑÑ Ð¿ÐµÑеменнÑÑ Ð¾ÐºÑÑжениÑ:
# docker run -it -e password='S3cr3tp4ssw0rd' alpine sh / # env | grep pass password=S3cr3tp4ssw0rd
То еÑÑÑ ÑÑо ÑлеменÑаÑно, даже еÑли Ð²Ñ Ð¿ÐµÑеклÑÑиÑеÑÑ Ð½Ð° обÑÑного полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ su:
/ # su user / $ env | grep pass password=S3cr3tp4ssw0rd
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð² ÑоÑÑав ÑиÑÑем оÑкеÑÑÑовки конÑейнеÑов вÑ
одÑÑ Ð¸Ð½ÑÑÑÑменÑÑ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекÑеÑами. ÐапÑимеÑ, в Kubernetes еÑÑÑ Ð¾Ð±ÑекÑÑ Ñипа secret. Ð Docker Swarm Ñакже еÑÑÑ ÑÐ²Ð¾Ñ ÑÑнкÑионалÑноÑÑÑ Ð¿Ð¾ ÑабоÑе Ñ ÑекÑеÑами, коÑоÑÑÑ Ð¼Ñ ÑейÑÐ°Ñ Ð¿ÑодемонÑÑÑиÑÑем:
ÐÑоиниÑиализиÑÑйÑе новÑй Docker Swarm (возможно, Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе ÑделаÑÑ ÑÑо в виÑÑÑалÑной маÑине):
# docker swarm init --advertise-addr <your_advertise_addr>
СоздайÑе Ñайл Ñ Ð¿ÑоизволÑнÑм ÑекÑÑом â ÑÑо бÑÐ´ÐµÑ Ð²Ð°Ñ ÑекÑеÑ:
# cat secret.txt This is my secret
Ðа оÑнове ÑÑого Ñайла ÑоздайÑе новÑй ÑекÑеÑнÑй ÑеÑÑÑÑ (secret resource):
# docker secret create somesecret secret.txt
СоздайÑе ÑеÑÐ²Ð¸Ñ Docker Swarm Ñ Ð´Ð¾ÑÑÑпом к ÑÑÐ¾Ð¼Ñ ÑекÑеÑÑ (Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе менÑÑÑ uid, gid, mode и Ñ. д.):
# docker service create --name nginx --secret source=somesecret,target=somesecret,mode=0400 nginx
ÐойдиÑе в конÑÐµÐ¹Ð½ÐµÑ nginx â Ñ Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° поÑвиÑÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÐ¾Ñ ÑаненнÑй ÑекÑеÑ:
root@3989dd5f7426:/# cat /run/secrets/somesecret This is my secret root@3989dd5f7426:/# ls /run/secrets/somesecret -r-------- 1 root root 19 Aug 28 16:45 /run/secrets/somesecret
ÐозможноÑÑи ÑиÑÑÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекÑеÑами на ÑÑом не иÑÑеÑпÑваÑÑÑÑ, но пÑиведеннÑй пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð½Ð°ÑаÑÑ Ñ ÑаниÑÑ ÑекÑеÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом и ÑабоÑаÑÑ Ñ Ð½Ð¸Ð¼Ð¸ из одного пÑнкÑа ÑпÑавлениÑ.
ÐониÑоÑинг безопаÑноÑÑи Docker во вÑÐµÐ¼Ñ Ð²ÑполнениÑ
ÐпиÑание
РпÑедÑдÑÑÐ¸Ñ ÑаÑÑÑÑ ÑÑаÑÑи Ð¼Ñ Ð³Ð¾Ð²Ð¾Ñили в оÑновном о ÑÑаÑиÑеÑком аÑпекÑе безопаÑноÑÑи Docker: ÑÑзвимÑе ÑдÑа, ненадежнÑе обÑазÑ, пÑивилегии, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð´Ð°Ð½Ñ Ð¸Ð»Ð¸ ÑнÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка, и Ñ. д. Ð ÑÑо еÑли, неÑмоÑÑÑ Ð½Ð° вÑе пÑедпÑинÑÑÑе меÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, обÑаз оказалÑÑ ÑкомпÑомеÑиÑованнÑм во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ наÑал пÑоÑвлÑÑÑ Ð¿Ð¾Ð´Ð¾Ð·ÑиÑелÑнÑÑ Ð°ÐºÑивноÑÑÑ?
ÐÑÑÑие пÑакÑики
ÐÑÑеопиÑаннÑе ÑÑаÑиÑеÑкие конÑÑмеÑÑ Ð½Ðµ покÑÑваÑÑ Ð²Ñе возможнÑе векÑоÑÑ Ð°Ñаки. Ð ÑÑо еÑли в ваÑем ÑобÑÑвенном пÑиложении еÑÑÑ ÑÑзвимоÑÑи или аÑакÑÑÑие иÑполÑзÑÑÑ 0-day, коÑоÑÑй не опÑеделÑеÑÑÑ ÑканеÑом? ÐезопаÑноÑÑÑ Ð²Ñемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑавниÑÑ Ñ Ð°Ð½ÑивиÑÑÑнÑм ÑканиÑованием в Windows, в задаÑи коÑоÑого Ð²Ñ Ð¾Ð´Ð¸Ñ Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ вÑедоноÑнÑÑ Ð¿ÑогÑамм и пÑедоÑвÑаÑение далÑнейÑего ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð°Ñаки.
Ðе нÑжно заменÑÑÑ ÑÑаÑиÑеÑкÑÑ Ð¿ÑовеÑÐºÑ Ð¾Ð±Ñазов на динамиÑеÑкÑÑ Ð·Ð°ÑиÑÑ Ð²Ñемени вÑполнениÑ, поÑколÑÐºÑ Ð¿ÑедоÑвÑаÑение аÑаки вÑегда лÑÑÑе ее оÑÑажениÑ. ÐÑполÑзÑйÑе динамиÑеÑкÑÑ Ð·Ð°ÑиÑÑ Ð² каÑеÑÑве дополниÑелÑного ÑÑÐ¾Ð²Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.
- ÐÐ»Ñ Ð¿Ð¾ÑмеÑÑного анализа аÑаки оÑÐµÐ½Ñ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÑÑ Ð¿Ð¾Ð´ÑобнÑе и ÑдобнÑе логи, ÑодеÑжимое коÑоÑÑÑ Ñ Ð¾ÑоÑо коÑÑелиÑÑÐµÑ Ñ Ð²Ð½ÐµÑеннÑми в ÑиÑÑÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñми.
ÐÑимеÑÑ
Sysdig Falco â ÑÑо ÑиÑÑема поведенÑеÑкого мониÑоÑинга пÑогÑаммного обеÑпеÑениÑ, ÑазÑабоÑÐ°Ð½Ð½Ð°Ñ Ð´Ð»Ñ Ð¾Ð±Ð½Ð°ÑÑÐ¶ÐµÐ½Ð¸Ñ Ð°Ð½Ð¾Ð¼Ð°Ð»Ñной акÑивноÑÑи. ÐÑÑ Ð¾Ð´Ð½Ñй код ÑиÑÑÐµÐ¼Ñ Ð¾ÑкÑÑÑ. Sysdig Falco на Linux-Ñ Ð¾ÑÑÐ°Ñ ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº ÑиÑÑема обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ð²ÑоÑжений и в оÑобенноÑÑи полезна пÑи иÑполÑзовании Docker, поÑколÑÐºÑ Ð¿Ñи Ñоздании пÑавил поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑпеÑиÑиÑеÑкий Ð´Ð»Ñ ÐºÐ¾Ð½ÑейнеÑов конÑекÑÑ, напÑÐ¸Ð¼ÐµÑ container.id, container.image, ÑеÑÑÑÑÑ Kubernetes или пÑоÑÑÑанÑÑва имен.
ÐÑавила Falco могÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑÐµÐ½Ð¸Ñ Ð¾ ÑазнÑÑ Ð²Ð¸Ð´Ð°Ñ Ð°Ð½Ð¾Ð¼Ð°Ð»Ñной акÑивноÑÑи. ÐавайÑе ÑаÑÑмоÑÑим ÑиÑÑаÑиÑ, когда кÑо-Ñо запÑÑÑил команднÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÑ Ð² конÑейнеÑе в production.
ÐÐ»Ñ Ð½Ð°Ñала ÑазвеÑнем Falco Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°Ð²ÑомаÑиÑеÑкого ÑкÑипÑа ÑÑÑановки (не ÑекомендÑеÑÑÑ Ð´Ð»Ñ production; возможно, Ð´Ð»Ñ Ñелей ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»ÑÑÑе ÑÑÑанавливаÑÑ Ð² виÑÑÑалÑной маÑине):
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-falco | sudo bash # service falco start
Ð ÑепеÑÑ Ð·Ð°Ð¿ÑÑÑим команднÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÑ Ð² конÑейнеÑе nginx:
# docker run -d --name nginx nginx # docker exec -it nginx bash
Ðа Ñ Ð¾ÑÑе в конÑе Ñайла /var/log/syslog должна поÑвиÑÑÑÑ ÑледÑÑÑÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ:
Aug 15 21:25:31 host falco: 21:25:31.159081055: Debug Shell spawned by untrusted binary (user=root shell=sh parent=anacron cmdline=sh -c run-parts --report /etc/cron.weekly pcmdline=anacron -dsq)
ÐÑмеÑÑ, ÑÑо Sysdig Falco вÑполнÑÐµÑ Ñвои ÑÑнкÑии, не вноÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в конÑейнеÑÑ. ÐÑ ÑолÑко ÑÑо ÑаÑÑмоÑÑели оÑÐµÐ½Ñ Ð¿ÑоÑÑой пÑимеÑ, о дÑÑÐ³Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑзнаÑÑ Ð·Ð´ÐµÑÑ.
ÐаклÑÑение
Docker ÑоздавалÑÑ Ñ ÑÑеÑом ÑÑебований безопаÑноÑÑи, и некоÑоÑÑе его оÑобенноÑÑи помогаÑÑ Ð² ее обеÑпеÑении. Ðднако не ÑÑÐ¾Ð¸Ñ Ð·Ð°Ð±ÑваÑÑ Ð¾Ð± оÑÑоÑожноÑÑи, поÑколÑÐºÑ Ð·Ð´ÐµÑÑ Ð½ÐµÑ Ð´ÑÑгого пÑÑи, кÑоме как поÑÑоÑнно ÑледиÑÑ Ð·Ð° ÑовÑеменнÑми ÑенденÑиÑми и пÑименÑÑÑ Ð»ÑÑÑие пÑакÑики, ÑложивÑиеÑÑ Ð² ÑÑой ÑÑеÑе. Также ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð´ÑмаÑÑ Ð¾Ð± иÑполÑзовании ÑпеÑиÑиÑнÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÑейнеÑов инÑÑÑÑменÑов обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, коÑоÑÑе помогаÑÑ Ð±Ð¾ÑоÑÑÑÑ Ñ ÑÑзвимоÑÑÑми и ÑгÑозами, ÑвÑзаннÑми Ñ Ð¸ÑполÑзованием Docker.
ÐадеÑÑÑ, ÑаÑÑмоÑÑÐµÐ½Ð½Ð°Ñ Ñема Ð²Ð°Ñ Ð·Ð°Ð¸Ð½ÑеÑеÑовала.
СÑÑлки:
- ÐÑигинал: 7 Docker security vulnerabilities and threats.
