Լավագույն Docker պատկերների 19%-ը չունի արմատային գաղտնաբառ
Անցյալ շաբաթ օրը՝ մայիսի 18-ին, Ջերի Գեմբլինը Kenna Security-ից ստուգվում Docker Hub-ի 1000 ամենահայտնի պատկերները՝ հիմնված նրանց օգտագործած արմատային գաղտնաբառի վրա: 19% դեպքերում այն դատարկ է եղել։
Նախապատմություն Alpine-ի հետ
Մինի-հետազոտության պատճառը Talos-ի խոցելիության զեկույցն էր, որը հայտնվեց այս ամսվա սկզբին (ԹԱԼՈՍ-2019-0782), որի հեղինակները, Cisco Umbrella-ից Պիտեր Ադկինսի հայտնագործության շնորհիվ, հայտնել են, որ Docker պատկերները հանրաճանաչ Alpine բեռնարկղերի բաշխմամբ չունեն արմատային գաղտնաբառ.
«Alpine Linux Docker պատկերների պաշտոնական տարբերակները (սկսած v3.3-ից) պարունակում են NULL գաղտնաբառ արմատային օգտվողի համար: Այս խոցելիությունը առաջացել է 2015 թվականի դեկտեմբերին ներդրված ռեգրեսիայի արդյունքում: Սրա էությունն այն է, որ համակարգերը, որոնք տեղակայված են Alpine Linux-ի խնդրահարույց տարբերակներով կոնտեյներով և օգտագործում են Linux PAM կամ այլ մեխանիզմ, որն օգտագործում է համակարգի ստվերային ֆայլը որպես նույնականացման տվյալների բազա, կարող են ընդունել NULL գաղտնաբառ արմատային օգտվողի համար»:
Խնդրի համար փորձարկված Docker պատկերների տարբերակները Alpine-ով էին 3.3–3.9 ներառյալ, ինչպես նաև edge-ի վերջին թողարկումը:
Հեղինակները հետևյալ առաջարկությունն են արել տուժած օգտատերերի համար.
«Alpine-ի խնդրահարույց տարբերակներից կառուցված Docker պատկերներում արմատային հաշիվը պետք է բացահայտորեն անջատված լինի: Խոցելիության հավանական շահագործումը կախված է շրջակա միջավայրից, քանի որ դրա հաջողությունը պահանջում է արտաքին փոխանցված ծառայություն կամ հավելված՝ օգտագործելով Linux PAM կամ այլ նմանատիպ մեխանիզմ»:
Խնդիրն այն էր վերացվել է Alpine տարբերակներում 3.6.5, 3.7.3, 3.8.4, 3.9.2 և edge (20190228 snapshot), և ազդակիր պատկերների սեփականատերերին խնդրել են մեկնաբանել արմատով տողը /etc/shadow կամ համոզվեք, որ փաթեթը բացակայում է linux-pam.
Շարունակությունը Docker Hub-ի հետ
Ջերի Գեմբլինը որոշեց հետաքրքրվել, թե «որքան տարածված կարող է լինել տարաներում զրոյական գաղտնաբառեր օգտագործելու պրակտիկան»: Այդ նպատակով նա գրել է մի փոքրիկ Bash սցենար, որի էությունը շատ պարզ է.
Docker Hub-ում API-ին ոլորված հարցման միջոցով պահանջվում է այնտեղ տեղակայված Docker պատկերների ցանկ.
jq-ի միջոցով այն դասավորված է ըստ դաշտի popularity, իսկ ստացված արդյունքներից մնում է առաջին հազարը;
նրանցից յուրաքանչյուրի համար այն կատարվում է docker pull;
Docker Hub-ից ստացված յուրաքանչյուր պատկերի համար կատարվում է docker run ֆայլից առաջին տողը կարդալով /etc/shadow;
եթե տողի արժեքը հավասար է root:::0:::::, պատկերի անունը պահվում է առանձին ֆայլում։
Ինչ է պատահել? IN այս ֆայլը Կային 194 տող Linux համակարգերով հայտնի Docker պատկերների անուններով, որոնցում արմատային օգտվողը գաղտնաբառ չունի.
«Այս ցուցակի ամենահայտնի անուններից էին govuk/governmentpaas, hashicorp, microsoft, monsanto և mesosphere: Իսկ kylemanna/openvpn-ը ցուցակի ամենահայտնի բեռնարկղն է, նրա վիճակագրությունը ներառում է ավելի քան 10 միլիոն քաշքշուկներ»։
Հարկ է, սակայն, հիշեցնել, որ այս երևույթն ինքնին չի նշանակում ուղղակի խոցելիություն դրանք օգտագործող համակարգերի անվտանգության մեջ. ամեն ինչ կախված է նրանից, թե կոնկրետ ինչպես են դրանք օգտագործվում: (տե՛ս վերևում գտնվող Alpine գործի մեկնաբանությունը). Այնուամենայնիվ, մենք բազմիցս տեսել ենք «պատմության բարոյականությունը». ակնհայտ պարզությունը հաճախ ունի բացասական կողմ, որը միշտ պետք է հիշել, և որի հետևանքները հաշվի առնվեն ձեր տեխնոլոգիական կիրառման սցենարներում: