保障容器應(yīng)用安全的六個(gè)建議
雖然容器技術(shù)出現(xiàn)已經(jīng)超過了十年時(shí)間,但由于其應(yīng)用的輕量性、快捷性和靈活性,使得容器應(yīng)用的流行程度一直保持了快速的增長(zhǎng)趨勢(shì),并逐漸成為云原生環(huán)境中部署業(yè)務(wù)應(yīng)用和工作負(fù)載的不二選擇。在容器應(yīng)用快速普及的發(fā)展背景下,要確保容器應(yīng)用的安全性也將是一項(xiàng)充滿挑戰(zhàn)的工作,不僅需要全面實(shí)施并維護(hù)保護(hù)容器和底層基礎(chǔ)設(shè)施的安全控制措施,保護(hù)容器化的應(yīng)用程序,同時(shí)還需要保護(hù)整個(gè)DevOps生命周期中使用的各個(gè)組件堆棧。
容器應(yīng)用安全的主要挑戰(zhàn)
據(jù)CNCF(云原生計(jì)算基金會(huì))最新的調(diào)查數(shù)據(jù)顯示,目前有96%的企業(yè)組織正在使用或計(jì)劃使用容器技術(shù),確保容器應(yīng)用安全對(duì)于保護(hù)現(xiàn)代企業(yè)數(shù)字化轉(zhuǎn)型的安全開展至關(guān)重要。安全研究人員發(fā)現(xiàn),容器技術(shù)在應(yīng)用中的安全挑戰(zhàn)主要包括以下方面:
1、容器環(huán)境對(duì)外暴露
在大多數(shù)時(shí)候,創(chuàng)建容器是為了使應(yīng)用部署更加方便。但是沒有訪問控制措施的容器也會(huì)給不法分子可乘之機(jī)。此外,容器技術(shù)應(yīng)用部署依賴 Linux 內(nèi)核的 namespaces 和 cgroups 等特性,從攻擊者的角度看,可以利用內(nèi)核系統(tǒng)漏洞從多個(gè)維度發(fā)起針對(duì)性的逃逸和越權(quán)攻擊。
2、開源代碼隨意使用
開源代碼雖然使用方便,但會(huì)帶來許多安全威脅。大多數(shù)的開源代碼缺少秘密信息(secrets)驗(yàn)證這一環(huán)節(jié),這可能會(huì)暴露企業(yè)的機(jī)密信息。比如說,一些開源代碼中會(huì)含有代碼貢獻(xiàn)者的IP信息,因此當(dāng)這些代碼運(yùn)行時(shí),會(huì)出現(xiàn)針對(duì)該IP地址的遠(yuǎn)程過程調(diào)用(RPC),一旦攻擊者監(jiān)控到這些未授權(quán)的RPC,就能夠模仿成被調(diào)用的對(duì)象來訪問容器中的應(yīng)用或數(shù)據(jù)。
3、交付周期變短
在容器開發(fā)模式中,很多開發(fā)人員被迫加快行動(dòng),以提供更大的價(jià)值,這導(dǎo)致團(tuán)隊(duì)常常忽略安全性檢測(cè)以便如期交付。為了提升應(yīng)用的交付速度而降低安全性完全是個(gè)誤區(qū)。實(shí)際上,從長(zhǎng)遠(yuǎn)來看,在整個(gè)應(yīng)用開發(fā)生命周期的早期階段實(shí)施安全可以節(jié)省更多的開發(fā)時(shí)間和成本。
4、安全職責(zé)不明確
企業(yè)應(yīng)用上云后的安全需要遵循責(zé)任共擔(dān)模型,在企業(yè)應(yīng)用架構(gòu)云原生的轉(zhuǎn)型過程中,需要企業(yè)應(yīng)用管理者和安全運(yùn)維人員理解容器應(yīng)用安全的責(zé)任邊界。這個(gè)過程中也需要云服務(wù)商輸出更全面的容器安全最佳實(shí)踐并提升安全能力的易用性,降低使用門檻。
5、缺少應(yīng)用側(cè)的防護(hù)
容器技術(shù)改變了傳統(tǒng)業(yè)務(wù)應(yīng)用的部署模式,應(yīng)用自身的生命周期被大幅縮短,一個(gè)容器應(yīng)用的生命周期通常是分鐘級(jí);同時(shí),隨著存儲(chǔ)網(wǎng)絡(luò)和異構(gòu)資源利用率等基礎(chǔ)設(shè)施能力上的提升,容器應(yīng)用的部署密度也越來越高。在此背景下,傳統(tǒng)的安全防護(hù)策略和監(jiān)控措施已經(jīng)無法適應(yīng)容器技術(shù)安全應(yīng)用的需求。
容器安全的6點(diǎn)建議
為了應(yīng)對(duì)上述容器化應(yīng)用進(jìn)程中的安全挑戰(zhàn),本文收集整理了6種有用的最佳實(shí)踐。
1、編寫干凈的代碼
為了保護(hù)容器應(yīng)用中的數(shù)據(jù)安全,企業(yè)應(yīng)避免將隱私信息硬編碼到軟件代碼或存儲(chǔ)庫(kù)的配置文件中。企業(yè)可以使用Git Secrets或其他類似的工具,防止將密碼及其他敏感信息提交到Git存儲(chǔ)庫(kù)。另外,建議企業(yè)使用像Amazon CodeGuru Reviewer這樣的工具來檢查編寫的代碼,提前發(fā)現(xiàn)任何潛在的漏洞。越早檢測(cè)和緩解漏洞,對(duì)保障容器的應(yīng)用安全越有利。
2、容器鏡像加固
對(duì)容器鏡像進(jìn)行加固有助于限制潛在的安全風(fēng)險(xiǎn)并減少漏洞。為了簡(jiǎn)化這個(gè)過程,企業(yè)可以使用面向容器操作系統(tǒng)的加固版鏡像,但切勿盲目相信這些預(yù)加固的鏡像。企業(yè)要確保不斷地掃描它們,以查找其中可能潛入的安全漏洞。通過使用加固版鏡像構(gòu)建管道,企業(yè)可以創(chuàng)建供一個(gè)標(biāo)準(zhǔn)化的基礎(chǔ)鏡像環(huán)境,提升容器應(yīng)用的安全性。
3、確保鏡像安全
為了確保鏡像安全,企業(yè)組織要確保僅從可信來源提取鏡像,并將它們存儲(chǔ)在企業(yè)的私有存儲(chǔ)庫(kù)中。通過私有存儲(chǔ)庫(kù),企業(yè)可以為容器的訪問管理提供必要的安全控制措施。要確保只給需要訪問權(quán)限的人進(jìn)行授權(quán),同時(shí)不要以root用戶的身份運(yùn)行鏡像,這種做法過于寬松,可能會(huì)讓不法分子有機(jī)會(huì)注入惡意代碼。
4、在整個(gè)管道中測(cè)試容器
企業(yè)應(yīng)該在整個(gè)開發(fā)管道中進(jìn)行安全性測(cè)試,而不是把測(cè)試留到最后環(huán)節(jié)。第一種測(cè)試方法是容器鏡像掃描,這有助于識(shí)別軟件漏洞。接下來,使用靜態(tài)應(yīng)用程序安全測(cè)試(SAST)工具來分析源代碼或編譯好的代碼,以幫助發(fā)現(xiàn)安全缺陷。最后,動(dòng)態(tài)應(yīng)用程序安全測(cè)試(DAST)工具從外部自動(dòng)掃描Web應(yīng)用程序,尋找安全漏洞,比如SQL注入、命令注入或不安全的服務(wù)器配置。DAST通常在應(yīng)用程序部署到試運(yùn)行環(huán)境之后完成。
5、確保容器環(huán)境的可觀察性
安全運(yùn)營(yíng)團(tuán)隊(duì)需要了解全局,以便盡早緩解威脅,這就是合作至關(guān)重要的原因。由于容器是短暫的,會(huì)快速創(chuàng)建和銷毀,因此很難監(jiān)控和跟蹤變化,特別是在復(fù)雜系統(tǒng)中。為了幫助安全運(yùn)營(yíng)團(tuán)隊(duì)監(jiān)控容器運(yùn)行的安全態(tài)勢(shì),需要采用那些可以提供全面可見性又不干擾容器運(yùn)行工作的創(chuàng)新安全工具。正確的安全工具可以讓企業(yè)足以深入了解適當(dāng)監(jiān)控和測(cè)量容器運(yùn)行狀況所需的指標(biāo)和日志。
6、確保訪問安全
加強(qiáng)對(duì)容器的訪問管理極其重要,除了應(yīng)遵循最小權(quán)限理念,還應(yīng)該采取零信任方法,即從不信任并始終驗(yàn)證請(qǐng)求訪問的任何設(shè)備、應(yīng)用程序或用戶。使用基礎(chǔ)設(shè)施即代碼(IaC)是確保應(yīng)用程序容器在部署時(shí)安全的好方法。記得在部署之前采取必要的安全處理流程,比如掃描IaC模板,以防配置被其他團(tuán)隊(duì)更改。
參考鏈接:
https://www.trendmicro.com/en_us/devops/22/b/container-security-best-practices.html。