盤點(diǎn)CI/CD管道安全的六種優(yōu)秀實(shí)踐
CI/CD是應(yīng)用程序開發(fā)周期的重要組成部分。然而,犯罪分子正在利用CI(持續(xù)集成)/CD(持續(xù)交付)管道中的漏洞,竊取敏感信息,挖掘加密貨幣,并交付惡意代碼。
最近的網(wǎng)絡(luò)攻擊利用了持續(xù)集成/持續(xù)交付(CI/CD)管道和開發(fā)人員工具中的漏洞,這說明了提高開發(fā)人員基礎(chǔ)設(shè)施的安全性迫在眉睫。最典型的案例則是Codecov供應(yīng)鏈攻擊,這也提醒了用戶,無論環(huán)境多么安全都不要在CI/CD環(huán)境變量中存儲(chǔ)私密信息。
Codecov攻擊者入侵了數(shù)千名開發(fā)人員使用的Bash上傳器,成功地從客戶環(huán)境中竊取了憑證、密鑰和API令牌,且隱藏了兩個(gè)月,一直未被發(fā)現(xiàn),據(jù)說還攻破了數(shù)百個(gè)受限的客戶網(wǎng)絡(luò)。同樣,對(duì)自動(dòng)化工具(如Jenkins、GitHub Actions和云原生容器環(huán)境)的攻擊也進(jìn)一步促使企業(yè)探索和部署對(duì)這些工具的有效防御措施。
以下是確保CI/CD管道安全的一些優(yōu)秀實(shí)踐。
一、請(qǐng)不要在CI/CD環(huán)境中存儲(chǔ)敏感信息
Codecov供應(yīng)鏈攻擊之所以能成功,背后的原因在于攻擊者滲出的環(huán)境變量包含硬編碼的敏感信息,包括密碼、令牌和鑰匙。由于其中一些憑證使攻擊者能夠訪問公司的私人GitHub存儲(chǔ)庫,因此可以從這些包含本應(yīng)保密數(shù)據(jù)的私人存儲(chǔ)庫中進(jìn)一步滲出數(shù)據(jù)。
盡管包括HashiCorp、Twilio、Rapid7和Monday.com在內(nèi)的多個(gè)Codecov客戶披露了供應(yīng)鏈攻擊帶來的影響,但迄今為止影響最為深遠(yuǎn)的數(shù)據(jù)泄露還是在日本電商巨頭Mercari。在Codecov攻擊之后,與Mercari客戶的財(cái)務(wù)、商戶、商業(yè)伙伴、公司員工、承包商和各種實(shí)體有關(guān)的共27000多條記錄泄露給了未經(jīng)授權(quán)的外部攻擊者。
盡管這些攻擊可能都是從Codecov漏洞開始的,但一些人也質(zhì)疑了為什么客戶財(cái)務(wù)記錄等個(gè)人身份信息(PII)會(huì)被存儲(chǔ)在私人GitHub存儲(chǔ)庫中。
對(duì)于HashiCorp存儲(chǔ)在CI/CD環(huán)境中的GPG私鑰,人們也提出了類似的擔(dān)憂。這是由HashiCorp發(fā)布的用于簽署和驗(yàn)證軟件版本的密鑰。在該密鑰被撤銷之前,攻擊者可以濫用該密鑰來偽造HashiCorp在惡意軟件發(fā)布上的簽名。一位開發(fā)者在推特上說:"為什么沒有人談?wù)揤ault的制造商HashiCorp將他們的簽名密鑰存儲(chǔ)為ENV這一問題?"
企業(yè)需要重新思考哪些信息可以存儲(chǔ)在CI/CD工具、環(huán)境變量和私人GitHub存儲(chǔ)庫中。如果一個(gè)應(yīng)用程序需要將憑證或令牌存儲(chǔ)在這些地方,最好是將憑證存儲(chǔ)在具有最低權(quán)限的賬戶或資源中,只是完成任務(wù)的必要條件,通常被稱為最小權(quán)限原則。這樣,即使私密信息在一次前所未有的攻擊中被暴露,也能夠控制損失。
二、審查自動(dòng)拉取請(qǐng)求和計(jì)劃任務(wù)
像GitHub Actions這樣的CI/CD自動(dòng)化工具允許開發(fā)者為他們的代碼庫設(shè)置計(jì)劃任務(wù),比如自動(dòng)審核和處理傳入的拉取請(qǐng)求。但是,如果向開源項(xiàng)目提出拉動(dòng)請(qǐng)求的貢獻(xiàn)者不懷好意,會(huì)發(fā)生什么?
2021年4月,GitHub Actions被攻擊者濫用,他們向數(shù)百個(gè)倉庫提出自動(dòng)拉取請(qǐng)求,目的是利用GitHub的基礎(chǔ)設(shè)施挖掘加密貨幣。這一大規(guī)模的攻擊發(fā)生在2月初GitHub Actions的漏洞曝光之后。
最低權(quán)限來說,這些拉取請(qǐng)求可以濫用GitHub的服務(wù)器來挖掘加密貨幣或執(zhí)行攻擊者的惡意代碼。如果項(xiàng)目負(fù)責(zé)人疏忽大意,合并了這些拉取請(qǐng)求,那么他們便將把惡意代碼引入了他們的倉庫和更廣泛的軟件供應(yīng)鏈。5月,GitLab報(bào)告說,其平臺(tái)上的攻擊者濫用分配給新賬戶的 "免費(fèi)分鐘"(配額),處理了類似的加密攻擊。
因?yàn)橄馟itHub Actions和GitLab這樣的CI/CD自動(dòng)化工具的本質(zhì)是為關(guān)鍵任務(wù)的自動(dòng)化提供便利,所以把關(guān)成為一個(gè)挑戰(zhàn)??赡苁怯幸鉃橹墓δ茉诒煌{者濫用后很快就變成了一個(gè)安全漏洞。
GitHub最近宣布了新的功能,打擊加密攻擊者對(duì)其Actions平臺(tái)的濫用。來自首次貢獻(xiàn)者的拉取請(qǐng)求將需要在任何行動(dòng)工作流程運(yùn)行前得到具有寫入權(quán)限的倉庫合作者的手動(dòng)批準(zhǔn)。GitHub產(chǎn)品經(jīng)理Chris Patterson在一篇博文中說:"當(dāng)首次貢獻(xiàn)者打開拉取請(qǐng)求時(shí),他們會(huì)看到一條信息,即維護(hù)者必須批準(zhǔn)他們的行動(dòng)工作流才能運(yùn)行。
領(lǐng)先的CI/CD解決方案和DevOps平臺(tái)可以效仿GitHub的做法,增加一些安全檢查,以阻止惡意行為者大規(guī)模濫用其基礎(chǔ)設(shè)施。
三、加強(qiáng)并定期審計(jì)云原生容器
實(shí)踐出真知,標(biāo)準(zhǔn)的最佳實(shí)踐具有很大的參考意義。比如確保生產(chǎn)容器配置正確,并對(duì)常見的攻擊載體進(jìn)行加固,包括保護(hù)管道配置。
然而,簡(jiǎn)單的錯(cuò)誤配置有時(shí)很難被發(fā)現(xiàn)。那么問題來了,基于Docker的環(huán)境是否有漏洞?所以,需要定期對(duì)容器進(jìn)行安全審計(jì),以發(fā)現(xiàn)弱點(diǎn),掃描容器鏡像和清單文件,以發(fā)現(xiàn)常見的安全問題,這些措施仍然是很有幫助的。
投資于可靠的云原生容器安全解決方案也是明智之舉,它可以自動(dòng)完成大部分工作。每年都報(bào)告了大量的安全漏洞,并且難以被人發(fā)現(xiàn)。
此外,隨著公司采用Kubernetes框架和Docker容器來部署他們的應(yīng)用程序,具有內(nèi)置Web應(yīng)用防火墻的容器安全解決方案可以在早期檢測(cè)和阻止可疑的網(wǎng)絡(luò)流量。這可以防止較大的損害,即使攻擊者能夠穿透容器并獲得初始訪問。
四、集成深度代碼掃描以自動(dòng)進(jìn)行代碼質(zhì)量檢查
在代碼正式提交之前,需要自動(dòng)化工具來發(fā)現(xiàn)代碼質(zhì)量問題、安全漏洞和內(nèi)存泄漏或競(jìng)賽條件等錯(cuò)誤,這可以從一開始就確保CI/CD管道安全的有效策略。雖然重點(diǎn)主要放在防止網(wǎng)絡(luò)攻擊上,但微小的錯(cuò)誤也同樣可能產(chǎn)生大規(guī)模的影響。比如,F(xiàn)astly的全球故障使世界各地的主要網(wǎng)站都下線了。
像GitHub代碼掃描器或Sonatype的Lift這樣的解決方案可以無縫地集成到現(xiàn)有的編碼工作流程中,并為開發(fā)者提供基本的保障。歸根結(jié)底,一個(gè)組織的目標(biāo)應(yīng)該是支持其開發(fā)人員做好工作,同時(shí)盡可能地防止在應(yīng)用程序中引入錯(cuò)誤或安全漏洞。這需要開發(fā)和安全團(tuán)隊(duì)之間的相互契合。在開發(fā)人員編碼時(shí)提醒他們可能出現(xiàn)的疏忽,實(shí)時(shí)通知可以節(jié)省每個(gè)人的時(shí)間,并從一開始就確保整個(gè)CI/CD工作流程。
五、盡早對(duì)最新的CI/CD工具漏洞打補(bǔ)丁
2021年3月,攻擊者利用一個(gè)名為z0Miner的加密挖礦僵尸網(wǎng)絡(luò),在有漏洞的Jenkins和ElasticSearch服務(wù)器上開采Monero(XMR)加密貨幣。通過利用互聯(lián)網(wǎng)服務(wù)器中的遠(yuǎn)程代碼執(zhí)行(RCE)漏洞,攻擊者試圖感染和接管自動(dòng)化基礎(chǔ)設(shè)施,以進(jìn)行他們的犯罪活動(dòng)。
無獨(dú)有偶,去年報(bào)告了攻擊者利用Jenkins服務(wù)器開展造成分布式拒絕服務(wù)(DDoS)攻擊。事件背后是因?yàn)橐粋€(gè)UDP放大反射DoS攻擊漏洞,被追蹤為CVE-2020-2100,它影響到Jenkins v2.219以下的版本,以及Jenkins LTS 2.204.1以下的版本。
一旦發(fā)現(xiàn)這些嚴(yán)重的漏洞,立即對(duì)自動(dòng)化工具和管道進(jìn)行修補(bǔ),這對(duì)于確保CI/CD基礎(chǔ)設(shè)施的安全至關(guān)重要。
六、在應(yīng)用更新之前驗(yàn)證其完整性
應(yīng)用最新的更新和補(bǔ)丁聽起來是合理舉措,但更新是否又被篡改這似乎很難確定?幾十年來,"更新到最新版本 "的建議一直是安全專家的口頭禪,但在SolarWinds供應(yīng)鏈攻擊事件后,這一建議受到了挑戰(zhàn)。
在SolarWinds事件中,對(duì)Orion IT產(chǎn)品的惡意更新使攻擊者能夠向下游的18000多名客戶分發(fā)惡意代碼。然而,Passwordstate密碼管理器的 "本地升級(jí)功能 "再次被入侵,向Passwordstate用戶分發(fā)惡意更新。因此,盲目地應(yīng)用產(chǎn)品更新未必是一件好事。
在Codecov的案例中,一個(gè)簡(jiǎn)單的完整性檢查發(fā)現(xiàn)了長(zhǎng)達(dá)兩個(gè)月的漏洞。一位客戶注意到托管在服務(wù)器上的Bash Uploader的校驗(yàn)和(哈希值)與Codecov的GitHub倉庫中列出的合法校驗(yàn)和之間存在差異,立即與Codecov聯(lián)系,隨后他們修復(fù)了這一問題。
因此,深度防御的方法要求對(duì)任何更新、補(bǔ)丁和下載的完整性進(jìn)行驗(yàn)證,以便排除來自復(fù)雜的供應(yīng)鏈攻擊的風(fēng)險(xiǎn)。
參考鏈接:Securing CI/CD pipelines: 6 best practices