
Lucrez în IT de peste 20 de ani, dar până acum nu am avut ocazia să mă ocup cu containerele. Teoretic, înțelegeam cum funcționează și care sunt conceptele de bază. Dar, deoarece nu am avut experiență practică cu ele, nu eram sigur cum funcționează toate componentele lor interne.
În plus, nu aveam nicio idee despre securitatea lor. Din nou, teoria suna bine, dar vechea zicală „pe măsură ce crește securitatea, scade ușurința utilizării” îmi stătea în minte. Așa că m-am gândit că dacă este atât de simplu să lucrezi cu containere, atunci securitatea este sub nivelul acceptabil. Se pare că aveam dreptate.
Pentru un început rapid, m-am înscris la cursuri 2020 intitulată „».
Cursul, condus de Sheila A. Berta și Sol Ozzan, a început imediat cu o descriere a modului în care funcționează containerele Docker și parcursul lor în cadrul Kubernetes. A fost o sesiune complet practică — studenții trebuiau să instaleze Docker și microk8s pe mașinile lor înainte de cursuri — o modalitate excelentă de a observa interacțiunea instrumentelor, de a identifica punctele slabe și, ceea ce este cel mai important, de a încerca să le securizăm.
Din păcate, deși cursurile promiteau să te transforme în „nobil” în doar două zile, simțeam că abia începe și că mai am multe de învățat.

Înainte de a-mi prezenta observațiile, este important să explic ce este un container. În lumea dezvoltării, este considerat normal ca un cod scris pe mașina personală să funcționeze perfect, dar când încerci să-l rulezi pe un server — pur și simplu nu funcționează. Containerele încearcă să depășească această problemă oferind mașini autonome, pe care le poți transporta ușor de pe un server pe altul, știind că vor funcționa întotdeauna. Așa cum sugerează numele, ele conțin cod, biblioteci și alte software-uri necesare pentru funcționare. Kubernetes, pe de altă parte, este . Practic, cu ajutorul său, poți gestiona fără probleme sute sau mii de containere diferite.
Mai jos sunt câteva dintre concluziile mele din perspectiva echipelor roșii și albastre.
Echipa roșie
Cea mai mare parte a conținutului containerelor rulează sub root: aceasta înseamnă că, dacă compromiti un container, vei obține acces complet la acesta. Acest lucru face ca pașii următori să fie semnificativ mai ușor de realizat.
Montarea docker.sock în interiorul unui container este periculoasă: dacă ai obținut root în interiorul containerului și ai instalat, de asemenea, Docker în interiorul unui container care are socketul Docker (\/var\/run\/docker.sock), ai o oportunitate potențială de a explora întregul cluster, inclusiv accesul la orice alt container. Un astfel de acces nu poate fi prevenit nici prin izolare de rețea, nici prin alte metode.
Variabilele de mediu conțin adesea date secrete: în majoritatea cazurilor, oamenii trimit parole în container folosind variabile de mediu obișnuite. Așadar, dacă ai acces la cont, poți spiona aceste variabile de mediu pentru a-ți extinde ulterior privilegii.
API-ul Docker poate oferi o mulțime de informații: API-ul Docker, configurat implicit, funcționează fără autorizare și poate oferi o mulțime de informații. Folosind Shodan, este ușor să găsești o listă de porturi deschise, apoi să obții informații detaliate despre cluster — și să ajungi la capturarea completă a acestuia. TrendMicro a scris un .
Echipa albastră
Nu rulați conținutul containerelor sub root: deși este mai simplu să rulezi sub root, nu ar trebui să faci asta. În schimb, rulează aplicațiile cu privilegii reduse, setând uid fie cu ajutorul parametrului —user atunci când folosești CLI, fie specificând USER în Dockerfile.
Nu permiteți instalarea de programe în containere: aproape fiecare atac începe prin instalarea a ceva. De la nmap și până la ifconfig și Docker însuși (în interiorul containerului), instalarea a ceva în container a fost o practică obișnuită. Din acest motiv, trebuie să blochezi toate porțile neutilizate. Acest lucru ajută, de asemenea, la prevenirea transmiterii comenzilor de control în cazul infectării mașinii tale. Pe lângă prevenirea instalării programelor, ar trebui să te asiguri că în container sunt instalate un număr minim de aplicații necesare pentru a îndeplini sarcina.
Protejați docker.sock: trebuie protejat, deoarece prin acest socket se gestionează comunicația între container și cluster. Deoarece nu vreau să intru în detalii în acest articol, citește , ce poate să se întâmple, precum și cum să blochezi totul.
Folosiți secretele Docker în loc de variabile de mediu: Există secrete . Deși nu este sigur, este totuși mai bine decât variabilele de mediu pentru a transmite date sensibile în containere.
Dacă articolul v-a stârnit interesul pentru containere, puteți instala destul de ușor Docker sau microk8s (o versiune mică de Kubernetes). există instrucțiuni pentru instalarea Docker pe Linux și MacOS, iar — instrucțiuni pentru instalarea microk8s pe Windows, Linux și MacOS.
După instalare, puteți urmări de la Docker, o variantă similară și pentru microk8s.
Dacă aveți dorința sau necesitatea de a urma un curs complet de Docker, în care vorbitorii practici discută despre toate instrumentele sale: de la abstracții de bază până la opțiunile de rețea, nuanțele funcționării cu diferite sisteme de operare și limbaje de programare, atunci încercați „”. Vă veți familiariza cu tehnologia și veți înțelege unde și cum este mai bine să folosiți Docker. În același timp, veți obține cazuri de best practice — este mai bine să învățați într-un mediu sigur și cu suportul practicienilor, bazându-vă pe povești despre greșeli, decât pe propriile greșeli cu mâneri înțepate.
Sursa: habr.com
