Անվտանգություն Docker բեռնարկղերի համար

Նշում. թարգմ.Docker-ի անվտանգության թեման, թերևս, ժամանակակից ՏՏ աշխարհի հավերժական թեմաներից մեկն է։ Հետևաբար, առանց լրացուցիչ բացատրության, մենք ներկայացնում ենք համապատասխան առաջարկությունների ևս մեկ ընտրանիի թարգմանությունը։ Եթե դուք արդեն հետաքրքրվել եք այս հարցով, դրանցից շատերը ձեզ ծանոթ կլինեն։ Եվ մենք ընտրանին լրացրել ենք օգտակար ծրագրերի ցանկով և մի քանի ռեսուրսներով՝ հարցի հետագա ուսումնասիրության համար։

Անվտանգություն Docker բեռնարկղերի համար

Ահա Docker-ի անվտանգության ապահովման ուղեցույց: Հետադարձ կապը ողջունելի է, քանի որ սա ավելի շատ տարբեր աղբյուրներից ստացված հատվածների հավաքածու է, և դրանցից ոչ բոլորն են մանրակրկիտ ստուգվել: Առաջարկությունները բաժանված են երեք կատեգորիայի՝

  1. Docker-ի հետ աշխատելիս անհրաժեշտ միջոցառումները հյուրընկալող օպերացիոն համակարգի ներսում։
  2. Կազմաձևման ֆայլի կառուցման և կոնտեյներների ստեղծման հետ կապված հրահանգներ։
  3. Անվտանգության գործիքներ, որոնք կարող են ինտեգրվել Docker Enterprise-ի որոշակի գործառույթների հետ։


Այս ուղեցույցը հիմնված է տարբեր ռեսուրսների վրա, որոնցից շատերը ներկայացված են ստորև։ Այն սպառիչ չէ, բայց ընդգրկում է բոլոր հիմքերը։ Լրացուցիչ տեղեկությունների համար տե՛ս CIS չափորոշիչները (հղումները տրված են այս ուղեցույցի վերջում) և Docker-ի փաստաթղթերը։

Docker անվտանգության չափանիշ

Docker Bench անվտանգության համար Ավտոմատ կերպով ստուգում է ձեր Docker-ը ամենատարածված լավագույն փորձի համեմատ: Սկրիպտը լավ հևրիստիկ անվտանգության թեստ է, բայց չպետք է համարվի համապարփակ վերլուծության գործիք:

Հոսթ ՕՀ

Ակնհայտ է, որ Docker կոնտեյները չի կարող անվտանգ լինել, եթե հոսթ համակարգն ինքնին անվտանգ չէ: Հետևաբար, անհրաժեշտ է հետևել օպերացիոն համակարգի անվտանգության ոլորտում լավագույն փորձին: Բացի այդ, խելամիտ կլինի անցկացնել խոցելիության վերլուծություն՝ հետևյալ առաջարկություններից բացի:

Աուդիտի կանոններ

Ստեղծեք և օգտագործեք աուդիտի կանոններ Docker-ի հետ կապված ֆայլերի համար՝ օգտագործելով auditctlՕրինակ, կարող եք ավելացնել -w /usr/bin/dockerd -k docker к /etc/audit.rules և վերագործարկեք աուդիտի ծառայությունը։

FIPS ռեժիմ

FIPS ռեժիմի միացումը ստիպում է կրիպտոգրաֆիկ գործիքներին անցնել FIPS-համատեղելի ալգորիթմների։ (ամերիկյան Դաշնային տեղեկատվության մշակման ստանդարտներ - մոտ. թարգմ.), այդպիսով համապատասխանելով դաշնային և արդյունաբերական կանոնակարգերին և պահանջներին: Եթե հիմնական օպերացիոն համակարգը աջակցում է FIPS ռեժիմը, այն կարող է միացվել հետևյալ հրամանները կատարելով.

sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && reboot

Դուք նաև պետք է միացնեք FIPS-ը Docker Engine-ում։

mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker

Ավելի շատ տեղեկությունների համար տե՛ս փաստաթղթերը դոկեր и Red Hat.

Docker-ի գաղտնիքները

Զգայուն տվյալները պետք է պահվեն որպես գաղտնի։ Դուք կարող եք գործարկել համապատասխան ծառայությունը՝ օգտագործելով docker service create հրամանը։

docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx

Մանրամասների համար տե՛ս փաստաթղթավորում.

Docker-ի կարգավորման ֆայլ

Հետևյալ կարգավորումները կարող են ավելացվել կարգավորման ֆայլին /etc/docker/daemon.json:

  • "icc":false - Անջատում է տվյալների փոխանակումը տարաների միջև՝ ավելորդ տեղեկատվության արտահոսքից խուսափելու համար։
  • log-level: "info" — գրանցում է բոլոր գրանցամատյանները, բացառությամբ վրիպազերծման գրանցամատյանների։
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp://1.2.3.4:1111"
      }
    }

    — թույլ է տալիս հեռակա գրանցում, վերահասցեագրում է այն նշված հասցեին։ Աշխատում է միայն այն դեպքում, եթե syslog դեմոնը աշխատում է։ TCP-ն և UDP-ն ընդունվում են որպես տարբերակներ։ Հնարավոր է նաև միանալ յուրաքանչյուր կոնկրետ կոնտեյների համար։ Դրա համար Docker-ը գործարկելիս սահմանվում է հատուկ դրոշ (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — կանխում է արտոնությունների սրումը՝ մեկուսացնելով անվանատարածքը որոշակի օգտատիրոջ համար։

Տրանսպորտային շերտի անվտանգություն

Միայն TLS հաճախորդի հավատարմագրերին մուտք ունեցող օգտատերերը պետք է կարողանան միանալ Docker դեմոնին (եթե անհրաժեշտ է հեռակա մուտք):

Հաստատման պլագիններ

Որոշեք, թե որ օգտատերերին է թույլատրվում որ հրամանները գործարկել, և ստեղծեք համապատասխան լիազորման հավելված Docker-ի համար։ Այնուհետև գործարկեք Docker-ի դեմոնը և ավելացրեք հավելվածը դրան։

dockerd --authorization-plugin=PLUGIN_ID

Հաստատման պլագիններ ստեղծելու մասին ավելին իմանալու համար տե՛ս փաստաթղթավորում.

Դեմոնի պարամետրեր

Docker դեմոնը աշխատում է պարամետրերի լռելյայն հավաքածուով։

  • --live-restore — այս պարամետրը օգնում է կրճատել կոնտեյներների անգործունության ժամանակը, երբ համակարգը անջատվում կամ վերագործարկվում է։ Ավելի հեշտ է դառնում դրանք թարմացնել կամ թարմացնել՝ նվազագույն անգործունության ժամանակով։
  • --userland-proxy=false - երբ հասանելի են կամ օգտագործվում են «hairpin NAT» կապակցիչներ, օգտատիրոջ տարածքի պրոքսին դառնում է ավելորդ ծառայություն, որը միայն մեծացնում է հնարավոր հարձակման վեկտորների քանակը։
  • --no-new-privileges - կանխում է կոնտեյներների կողմից լրացուցիչ արտոնություններ ստանալը՝ օգտագործելով suid կամ sguid;
  • --seccomp-profile /path/to/profile — եթե դուք ունեք ձեր սեփական seccomp պրոֆիլը, կարող եք այն կիրառել այս դրոշի միջոցով։ Դուք կարող եք ավելին իմանալ Seccomp-ի և Docker-ի մասին։ այստեղ.

Կոնտեյներների և կառուցման ֆայլերի կարգավորում

Օգտագործողի ստեղծում

Համոզվեք, որ կոնտեյների համար ստեղծել եք օգտատեր և գործարկեք այն որպես այդ օգտատեր (ՄԻ՛ գործարկեք կոնտեյները որպես root):

Հեռավոր մուտք

Անջատեք դեմոնին հեռակա մուտքը։ Եթե այն դեռևս անհրաժեշտ է, պաշտպանեք այն վկայագրերով։

Մեկուսացրեք օգտատիրոջ անվանատարածքը

Հատկապես կարևոր է ապահովել, որ օգտատիրոջ անվանատարածքը մեկուսացված լինի Docker-ում, քանի որ այն լռելյայնորեն համօգտագործվում է հոսթի անվանատարածքի հետ։ Որոշ դեպքերում սա կարող է օգտագործվել արտոնությունները մեծացնելու կամ նույնիսկ կոնտեյներից դուրս գալու համար։ Օգտատիրոջ անվանատարածքի մեկուսացումը կարող է իրականացվել կարգավորման ֆայլը խմբագրելով (ինչպես նկարագրված է վերևում՝ Docker-ի կարգավորման ֆայլ բաժնում)։ Այս խնդրի լրացուցիչ հիշատակումը այստեղ պայմանավորված է դրա կարևորությամբ։

Առողջական ստուգումներ

Առողջապահական ստուգումը հզոր գործիք է, որը թույլ է տալիս ստուգել կոնտեյների ամբողջականությունը: Այն կարգավորվում է Dockerfile-ում՝ օգտագործելով հրահանգը: HEALTHCHECKԱռողջության ստուգումները ապահովում են, որ կոնտեյները ճիշտ է աշխատում: Ստորև բերված օրինակում առողջության ստուգումը վերադարձնում է 0, եթե սերվերը աշխատում է, և 1, եթե այն անջատված է:

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux- ը

Եթե ​​SELinux-ը աջակցվում է հոսթ օպերացիոն համակարգի կողմից, ստեղծեք կամ ներմուծեք SELinux քաղաքականություն և գործարկեք Docker-ը daemon ռեժիմով՝ SELinux-ը միացված վիճակում։

docker daemon --selinux-enable

Այս դեպքում Docker կոնտեյներները կարող են գործարկվել անվտանգության պարամետրերով, օրինակ՝

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Անցի միջերեսներ

Ըստ լռելյայնի, Docker-ը լսում է բոլոր ցանցային ինտերֆեյսները: Քանի որ դեպքերի մեծ մասում երթևեկությունը սպասվում է միայն դրանցից մեկի վրա, այս մոտեցումը անհիմն կերպով մեծացնում է հարձակման ռիսկը: Հետևաբար, կոնտեյներ գործարկելիս կարող եք դրա պորտերը կապել հոսթի որոշակի ինտերֆեյսների հետ.

docker run --detach --publish 10.2.3.4:49153:80 nginx

Պատկերների քեշավորված տարբերակներ

Պատկերներ ներբեռնելիս համոզվեք, որ ձեր տեղական քեշը համապատասխանում է պահոցի բովանդակությանը: Հակառակ դեպքում, կարող եք ստանալ պատկերի հնացած տարբերակ կամ պատկեր, որը պարունակում է խոցելիություններ:

Ցանցային կամուրջ

Լռելյայն ցանցի մոդել, docker0, խոցելի է ARP կեղծման և MAC ողողման հարձակումների նկատմամբ։ Այս խնդիրը լուծելու համար ստեղծեք ցանցային կամուրջ՝ համաձայն ձեր նկարագրված պահանջների։ այստեղ.

Docker Socket-ի նախազգուշացում

Երբեք մի՛ բացեք Docker սոքեթը կոնտեյների ներսում: Սա կոնտեյներին կտա Docker հրամաններ կատարելու և, հետևաբար, հոսթ օպերացիոն համակարգի հետ կապվելու և այն կառավարելու հնարավորություն: Մի՛ արեք դա:

Docker Enterprise-ի կարգավորում

Դոկեր Թրաստ

Docker Trust-ը թույլ է տալիս ստեղծել բանալիներ, որոնք կարող են օգտագործվել պատկերների կրիպտոգրաֆիկ ամբողջականությունը ստուգելու համար: Docker Trust բանալիները կարող են օգտագործվել Docker պատկերները ստորագրելու համար՝ օգտագործելով մասնավոր բանալիներ, որոնք ստուգվում են Notary Server-ի հանրային բանալիներով: Լրացուցիչ տեղեկություններ՝ այստեղDocker Trust-ի միացումը Enterprise Engine-ում մանրամասն նկարագրված է փաստաթղթերի այս բաժնում.

Խոցելիության սկանավորում

Docker Enterprise-ն ունի ներկառուցված խոցելիությունների սկաներ, որը թույլ է տալիս ներբեռնել CVE տվյալների բազան՝ պատկերներում խոցելիությունների անցանց սկանավորման համար: Պատկերների պարբերաբար սկանավորումը նպաստում է դրանց ավելի անվտանգ դառնալուն. օգտատերը անմիջապես ստանում է հայտնաբերված խոցելիությունների մասին նախազգուշացումներ: Դա անելու վերաբերյալ լրացուցիչ տեղեկությունների համար տե՛ս այստեղ.

Նշում. թարգմ.Docker-ի պատկերներում կան նաև բաց կոդով խոցելիության սկաներներ, որոնց օրինակները կարելի է գտնել հոդվածի վերջում։

LDAP և UCP ինտեգրացիա

Universal Control Plane-ը կարող է ինտեգրվել LDAP-ի հետ։ Արդյունքում կստացվի պարզեցված նույնականացման համակարգ, որը կխուսափի ավելորդ կրկնօրինակումից։ Այս մասին ավելին կարող եք կարդալ հոդվածում։ Ինտեգրվել LDAP գրացուցակի հետ.

Այլ նյութեր

Docker-ի անվտանգության լավագույն փորձի վերաբերյալ լրացուցիչ տեղեկությունների համար այցելեք docs.docker.comՄենք նաև խորհուրդ ենք տալիս ներբեռնել Docker-ի համար նախատեսված Ինտերնետային անվտանգության թեստերի կենտրոն.

Թարգմանչի բոնուս

Որպես այս հոդվածի տրամաբանական լրացում, մենք հրապարակում ենք ցանկ Docker Security-ի համար նախատեսված 10 հանրաճանաչ բաց կոդով ծրագրերԱյն փոխառվել է մեկ այլ հոդված (Doerrfeld.io-ի Բիլ Դորֆելդի կողմից):

NBԱյստեղ նշված նախագծերից շատերի մասին լրացուցիչ տեղեկությունների համար տե՛ս նաև «33+ Kubernetes անվտանգության գործիքներ.

  1. Docker Bench անվտանգության համար — հոդվածի հենց սկզբում արդեն հիշատակված սկրիպտ, որը ստուգում է Docker կոնտեյներների համապատասխանությունը ընդհանուր անվտանգության պրակտիկային։

    Անվտանգություն Docker բեռնարկղերի համար

  2. Պարզ — հավանաբար ամենատարածված գործիքը կոնտեյներների խոցելիությունների ստատիկ վերլուծության համար։ Այն օգտագործում է CVE խոցելիությունների բազմաթիվ տվյալների բազաներ դրա համար (ներառյալ Linux-ի առաջատար բաշխումների հետևորդները, ինչպիսիք են Red Hat-ը, Debian-ը, Ubuntu-ն)։ Առաջարկում է API մշակողների համար և գործառույթները ընդլայնելու պարզ հնարավորություն («դրայվերներ» ավելացնելով)։ Այն օգտագործվում է կոնտեյներների պատկերների հանրաճանաչ հանրային գրանցամատյանում (Docker Hub-ի նման)՝ Quay.io-ում։
  3. Ցիլիում — BPF ցանցային փաթեթների ֆիլտրման տեխնոլոգիայի վրա հիմնված լուծում՝ միջուկի մակարդակում ցանցային անվտանգությունն ապահովելու համար։
  4. Խարիսխ — CVE տվյալների բազայի հիման վրա պատկերների պարունակությունը անվտանգության խոցելիությունների վերլուծության գործիք։ Բացի այդ, այն թույլ է տալիս կիրառել օգտատիրոջ քաղաքականություններ (տարբեր տվյալների հիման վրա, ներառյալ սպիտակ/սև ցուցակները, ֆայլերի պարունակությունը և այլն)՝ կոնտեյներների անվտանգությունը գնահատելու համար։
  5. OpenSCAP Workbench — մի ամբողջ էկոհամակարգ՝ տարբեր հարթակներում անվտանգության քաղաքականություններ ստեղծելու և պահպանելու համար։ Կոնտեյներների ստուգման համար այն առաջարկում է օգտակար գործիք oscap-docker.
  6. Դագդա — գործիք՝ Docker կոնտեյներները խոցելիությունների, տրոյական ծրագրերի, վիրուսների և վնասակար ծրագրերի սկանավորման համար։ CVE տվյալների բազաները ներառում են OWASP-ից, Red Hat Oval տվյալների բազայից և Exploit Database-ի էքսպլոիտների պահոցից կախվածությունների ստուգումներ։
  7. Նոտարական — Docker պատկերների ստորագրման շրջանակ, որն սկզբնապես ստեղծվել է Docker Inc-ում (և այնուհետև փոխանցվել է CNCF-ին՝ մշակման համար): Դրա օգտագործումը թույլ է տալիս պատվիրակել դերեր և բաշխել պարտականությունները տարաների միջև, ինչպես նաև ստուգել պատկերների կրիպտոգրաֆիկ ամբողջականությունը:
  8. Գրաֆիկներ — Մետատվյալների API, որը նախատեսված է ներքին անվտանգության քաղաքականությունները կառավարելուն օգնելու համար: Օրինակ, այն կարող է բարելավել կոնտեյներների անվտանգության սկաներները: Shopify-ը օգտագործում է այս API-ը՝ իր 500 պատկերների մետատվյալները կառավարելու համար:
  9. Սիսդիգ Ֆալկո — Kubernetes-ի համար նախատեսված գործիք, որը վերահսկում է համակարգի վարքագիծը՝ ակտիվությունը կոնտեյներներում, հոսթերում, ցանցում: Թույլ է տալիս կարգավորել ենթակառուցվածքների շարունակական ստուգումները, հայտնաբերել անոմալիաներ և ուղարկել ծանուցումներ Linux համակարգի ցանկացած կանչի համար:
  10. Բանյանոպս հավաքորդ — Docker կոնտեյներների պատկերների ստատիկ վերլուծության մեկ այլ գործիք։ Թույլ է տալիս «նայել» պատկերի ֆայլերին, հավաքել անհրաժեշտ տվյալները, կիրառել անհրաժեշտ քաղաքականությունները և այլն։

Գործնական առաջարկությունների ևս մեկ լավ ընտրություն Ինչպես Docker-ը ավելի անվտանգ դարձնելու մասին կարող եք գտնել այստեղ այս հոդվածը Aqua Security: Դրա շատ խորհուրդներ համընկնում են վերը նշվածների հետ, բայց կան նաև ուրիշներ: Օրինակ, հեղինակները առաջարկում են կազմակերպել գործունեության մոնիթորինգ կոնտեյներներում և նշում են, թե ինչին ուշադրություն դարձնել Docker Swarm-ն օգտագործելիս:

Նրանց համար, ովքեր ցանկանում են ավելի մանրամասն ուսումնասիրել այս թեման, անցյալ տարի գիրք»Docker Security: Հակիրճ հղումներ», որի հատվածները ազատորեն հասանելի են այստեղ.

Վերջապես, Docker-ի անվտանգության որոշ ասպեկտների գործնական ներածության համար՝ Seccomp պրոֆիլներ և Linux միջուկի հնարավորությունների օգտագործումը կոնտեյներներում, կարող եք վերցնել համապատասխանը։ լաբորատոր աշխատանք ռեսուրս Խաղ Docker-ի հետ* — տե՛ս «Անվտանգություն» բաժինը։

Անվտանգություն Docker բեռնարկղերի համար

* Մենք խոսում ենք այս ռեսուրսի մասին պատմեց Երկու տարի առաջ, և 2018 թվականի նոյեմբերին, դրա հետ շատ հետաքրքիր (անվտանգության տեսանկյունից) պատմություն պատահեց։ Ամփոփելով՝ CyberArk Software Ltd.-ի մասնագետներին հաջողվեց կոտրել այն՝ հասնելով կոնտեյներներից դուրս, այսինքն՝ հոսթ համակարգի վրա հրամաններ կատարելու հնարավորության։ Docker-ի անվտանգության խնդրի հիանալի օրինակ է, այնպես չէ՞։ Կարդացեք տեղի ունեցածի բոլոր մանրամասների մասին։ այստեղ.

PS թարգմանչից

Կարդացեք նաև մեր բլոգում.

Source: www.habr.com

Добавить комментарий