從DevOps到DevSecOps,貫穿始終的安全棧
"二十一世紀最重要的啥?人才!"。葛大爺在《天下無賊》曾經(jīng)這樣呼喊。但是在時下蟲蟲要說最重要是數(shù)據(jù)安全。不管是自動化DevOps,大數(shù)據(jù)還是AI,安全都是第一要務(wù)和基礎(chǔ),甚至國家層面安全也都提到國家戰(zhàn)略中。在開發(fā)即上線的DevOps一棧式模式下,對Devops做安全升級,在全棧每一階段都進行安全檢查和整改,建設(shè)成安全棧式DevSecOps勢在必行。本文蟲蟲就就來給大家談?wù)凞evSecOps各階段進行的安全實踐活動和工具。
DevSecOps基本上基礎(chǔ)也采用DevOps實踐,并在相應(yīng)階段增加安全性檢查,并集成到的CI/CD管道中,擴展現(xiàn)有的devops工具和實踐。
給Pipeline增加安全罩
安全無易事!當(dāng)給DevOps集成安全功能時候,最容易變得不堪重負并迷失!了解當(dāng)前的工作流程和工具是給管道集成安全檢查和安全控制的關(guān)鍵。一般來說DevOps持續(xù)集成(CI),持續(xù)交付和連續(xù)部署(CD)管道分為6階段:
編碼:開發(fā)階段,在代碼進入源代碼存儲庫之前。
構(gòu)建:構(gòu)建并執(zhí)行系統(tǒng)的基本自動化測試。
測試:成功構(gòu)建后,工件將部署到臨時和測試環(huán)境中。
主機運行:此階段涉及需要應(yīng)用于基礎(chǔ)架構(gòu)的配置和版本更新。
運行:如果主機運行通過,則表明應(yīng)用程序已準備好部署到生產(chǎn)環(huán)境中,可以灰度發(fā)布和升級。
監(jiān)控:持續(xù)測量和監(jiān)控生產(chǎn)活動。
本文中,我們基于以上6個階段進行安全集成實踐和探索。
開發(fā)階段
DevOps實踐強調(diào)編寫良好的代碼。代碼運行良好,易于更改和理解。 DevSecOps通過添加用于編寫良好和安全代碼的安全檢查來擴展這些實踐。
傳統(tǒng)的單元測試,靜態(tài)代碼分析,代碼審查,預(yù)提交Hooks(git 客戶端鉤子)等實踐可以擴展到該階段的安全性檢查。為了不影響開發(fā)人員的工作效率,可以在將代碼提交到源代碼存儲庫之前查找并修復(fù)常見的安全問題。
代碼審查
代碼審查是提搞代碼安全性的重要手段。它可以增加開發(fā)人員的責(zé)任感和透明度,降低來自內(nèi)部威脅的風(fēng)險(比如有人代碼中投毒、隱藏后門以及邏輯炸彈等),同時代碼審查也有助于提高代碼質(zhì)量。除了代碼外一些關(guān)鍵配置文件比如Puppet清單,Ansible playbooks,Dockerfiles,.gitlab-ci.yml等也需要納入代碼審查的范疇。
靜態(tài)分析工具
市面上有大量的靜態(tài)分析,包括開源和商業(yè)工具,可以將其集成到喜歡的IDE中,幫助我們檢查代碼的一致性,可維護性,清晰度,錯誤模式等等,還可以通過添加基本的規(guī)則(工具針對該語言)來識別基本安全漏洞。
工具列表
可以在此階段使用的非詳盡工具列表包括:
Gerrit,Phabricator,SpotBugs,PMD,CheckStyle,F(xiàn)ind Security Bugs等等
項目構(gòu)建
將代碼提交到源存儲庫后(比如gitlab),將執(zhí)行應(yīng)用程序的構(gòu)建和基本自動化測試,以確保代碼始終可編譯可構(gòu)建。
同樣,需要在此階段添加檢查,以檢測嚴重和高危安全性問題。如果發(fā)現(xiàn)嚴重問題,則需要進行安全控制,設(shè)定構(gòu)建為失敗并發(fā)送警報通知。
依賴組件安全性分析
根據(jù)Sonatype的2018年軟件供應(yīng)鏈報告,在該年度開發(fā)人員總共下載使用過逾3000億的開源組件,其中八分之一都包含已知的漏洞。而且今年內(nèi)由于基礎(chǔ)庫被注入木馬的安全事件也頻繁發(fā)生,這蟲蟲之前的文章曾專門介紹過,大家可以搜索歷史文章。
使用依賴組件安全性分析可以發(fā)現(xiàn),依賴的開源組件(類庫)是否包含已知的安全漏洞。運行SCA工具有助于識別具有已知安全漏洞的過時庫和框架。
SAST(靜態(tài)分析安全測試)
在此階段提高安全性并向團隊提供快速反饋的另一種有效方法是運行靜態(tài)分析軟件測試。這些工具可以找到審核者遺漏的隱藏錯誤,這類錯誤往往很難通過其他類型的測試找到。
單元測試
在重構(gòu)代碼或進行其他更改時,單元測試對于撲捉回歸漏洞非常重要。對每一功能塊添加單元安全測試很有必要。
工具列表
可以在該階段使用的工具包括:眾所周知的Sonarqube,OWASP依賴性檢查,sourceclear,Retire.js和snyk等。
測試階段
成功構(gòu)建后,通過選擇生成的工件并將其部署到到容器或者測試環(huán)境來觸發(fā)測試階段。這些測試包括功能測試,集成測試,性能測試,高級SAST,安全性和DAST。
這個階段通常需要更多的時間和資源來執(zhí)行,并且遵循失敗快速方法優(yōu)先原則,即更費勁和耗時的測試要盡可能后延,只有在其他測試都通過時才執(zhí)行。
有針對性的動態(tài)掃描
一旦部署,應(yīng)用程序就會暴露到各類可能攻擊中,例如跨站點腳本,SQL注入或身份驗證越過等等。而這些正是動態(tài)應(yīng)用程序安全測試(DAST)發(fā)揮作用的地方。可以根據(jù)OWASP Top 10中總結(jié)的常見關(guān)高危漏洞來分析當(dāng)前測試的應(yīng)用程序。

模糊測試(Fuzzy)
模糊測試是一種黑盒測試,暴力可靠性測試技術(shù),主要包括以自動方式使用非預(yù)期的數(shù)據(jù)測試結(jié)果以發(fā)現(xiàn)漏洞的測試方法。
自動攻擊
作為自動化測試周期的一部分,我們可以進一步嘗試模擬對運行應(yīng)用程序的攻擊,對系統(tǒng)執(zhí)行基本的針對性自動滲透測試。
工具列表
該階段可用的工具(開源和商業(yè))包括:Acunetix Web Vulnerability Scanner,BDD Security,JBroFuzz,Boofuzz,OWASP ZAP,Arachi,IBM AppScan,Mittn,GAUNTLT,SecApp套件等等
主機運行(單機)
在主機運行階段主要立足于保護運行時環(huán)境和保護其上運行的應(yīng)用程序。多年來,業(yè)界提出了很多最佳安全實踐,模式,指南和工具,以幫助加強基礎(chǔ)架構(gòu)并使其更具彈性。
降權(quán)、最低權(quán)限
PoLP聲明每個模塊(例如進程,用戶或程序,取決于主題)必須只能訪問其合法用途所必需的信息和資源。
配置自動化
配置管理工具可以輕松地反復(fù)大規(guī)模部署和創(chuàng)建安全基礎(chǔ)架構(gòu)。通過標(biāo)準化配置,CM工具可以減少與補丁管理相關(guān)的問題,最大限度地降低黑客可以利用未修補的服務(wù)器的風(fēng)險,并有助于減少不同環(huán)境之間的差異。值得一提的是,使用CM工具可以在中央存儲庫和版本控制下跟蹤配置信息。
不可變基礎(chǔ)架構(gòu)
使用不可變基礎(chǔ)架構(gòu),一旦在系統(tǒng)中創(chuàng)建工件,它就不會通過用戶修改而改變,則不會有增量更改:創(chuàng)建新服務(wù)器實例并替換舊服務(wù)器實例,而不是一系列增量更新和更改。一。
安全標(biāo)準
許多社區(qū)提供了基礎(chǔ)架構(gòu)加強指導(dǎo)和建議。這些標(biāo)準包括Internet安全中心(CIS)基準測試和NIST配置清單等。

工具列表
該階段可使用工具包括:Ansible,Puppet,(R)?ex,HashiCorp Terraform,Chef,Docker等等
運行階段
如果上述所有階段成功運行,則需要準備投入生產(chǎn)環(huán)境運行。該階段目標(biāo)主要是驗證在配置或部署時間內(nèi)是否存在任何錯誤,這些錯誤是否會降低系統(tǒng)的可靠性和彈性,是否可以在故障情況通過這些進行攻擊。
該階段使用自動化運行時檢查和測試中發(fā)揮重要作用的地方,特別是發(fā)現(xiàn)安全違規(guī)和漏洞的安全問題,并突出了風(fēng)險,如訪問控制策略或防火墻規(guī)則的變化。
工具列表
這方面我們要特別提及一個Netflix開源的工具chaosmonkey,利用混沌學(xué)原理,在分布式系統(tǒng)上進行實驗, 目的是建立對系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力以及信心。

監(jiān)控階段
系統(tǒng)投入生產(chǎn)后,安全性不會終止,而是真正開始。在DevSecOps中,自動安全檢查和監(jiān)視反饋循環(huán)迭代是生產(chǎn)操作的基本部分。
持續(xù)監(jiān)控可以深入了解應(yīng)用程序正在接收的流量類型,并幫助識別惡意用戶的攻擊模式。
運行時應(yīng)用程序安全保護
RASP技術(shù)可實時識別和阻止應(yīng)用程序安全威脅。通過向應(yīng)用程序運行時環(huán)境添加檢測和保護功能,RASP使應(yīng)用程序能夠通過自動重新配置來"自我保護",無需人工干預(yù),以響應(yīng)某些條件。
安全監(jiān)控
首先是自動收集和分析潛在安全威脅指標(biāo)的過程,定義應(yīng)觸發(fā)警報的行為類型,并對警報采取嚴肅措施。比如IDS,主機進程監(jiān)控,工作目錄變更監(jiān)控,流量監(jiān)控等等。
漏洞懸賞
通過漏洞懸賞計劃,借助第三方的力量,深入漏洞挖掘,充分了解現(xiàn)實的風(fēng)險水平,系統(tǒng)弱點和漏洞。他們通??梢宰杂傻夭扇⌒袆樱粫茐南到y(tǒng)或破壞或泄露敏感數(shù)據(jù)。
工具列表
市場上存在許多運行時防御工具:Prevoty,Alert Logic,HALO,EVIDENT等等。