天天看點

從DevOps到DevSecOps,貫穿始終的安全棧

“二十一世紀最重要的啥?人才!”。葛大爺在《天下無賊》曾經這樣呼喊。但是在時下蟲蟲要說最重要是資料安全。不管是自動化DevOps,大資料還是AI,安全都是第一要務和基礎,甚至國家層面安全也都提到國家戰略中。在開發即上線的DevOps一棧式模式下,對Devops做安全更新,在全棧每一階段都進行安全檢查和整改,建設成安全棧式DevSecOps勢在必行。本文蟲蟲就就來給大家談談DevSecOps各階段進行的安全實踐活動和工具。

DevSecOps基本上基礎也采用DevOps實踐,并在相應階段增加安全性檢查,并內建到的CI/CD管道中,擴充現有的devops工具和實踐。

給Pipeline增加安全罩

安全無易事!當給DevOps內建安全功能時候,最容易變得不堪重負并迷失!了解目前的工作流程和工具是給管道內建安全檢查和安全控制的關鍵。一般來說DevOps持續內建(CI),持續傳遞和連續部署(CD)管道分為6階段:

編碼:開發階段,在代碼進入源代碼存儲庫之前。

建構:建構并執行系統的基本自動化測試。

測試:成功建構後,工件将部署到臨時和測試環境中。

主機運作:此階段涉及需要應用于基礎架構的配置和版本更新。

運作:如果主機運作通過,則表明應用程式已準備好部署到生産環境中,可以灰階釋出和更新。

監控:持續測量和監控生産活動。

本文中,我們基于以上6個階段進行安全內建實踐和探索。

開發階段

DevOps實踐強調編寫良好的代碼。代碼運作良好,易于更改和了解。 DevSecOps通過添加用于編寫良好和安全代碼的安全檢查來擴充這些實踐。

傳統的單元測試,靜态代碼分析,代碼審查,預送出Hooks(git 用戶端鈎子)等實踐可以擴充到該階段的安全性檢查。為了不影響開發人員的工作效率,可以在将代碼送出到源代碼存儲庫之前查找并修複常見的安全問題。

代碼審查

代碼審查是提搞代碼安全性的重要手段。它可以增加開發人員的責任感和透明度,降低來自内部威脅的風險(比如有人代碼中投毒、隐藏後門以及邏輯炸彈等),同時代碼審查也有助于提高代碼品質。除了代碼外一些關鍵配置檔案比如Puppet清單,Ansible playbooks,Dockerfiles,.gitlab-ci.yml等也需要納入代碼審查的範疇。

靜态分析工具

市面上有大量的靜态分析,包括開源和商業工具,可以将其內建到喜歡的IDE中,幫助我們檢查代碼的一緻性,可維護性,清晰度,錯誤模式等等,還可以通過添加基本的規則(工具針對該語言)來識别基本安全漏洞。

工具清單

可以在此階段使用的非詳盡工具清單包括:

Gerrit,Phabricator,SpotBugs,PMD,CheckStyle,Find Security Bugs等等

項目建構

将代碼送出到源存儲庫後(比如gitlab),将執行應用程式的建構和基本自動化測試,以確定代碼始終可編譯可建構。

同樣,需要在此階段添加檢查,以檢測嚴重和高危安全性問題。如果發現嚴重問題,則需要進行安全控制,設定建構為失敗并發送警報通知。

依賴元件安全性分析

根據Sonatype的2018年軟體供應鍊報告,在該年度開發人員總共下載下傳使用過逾3000億的開源元件,其中八分之一都包含已知的漏洞。而且今年内由于基礎庫被注入木馬的安全事件也頻繁發生,這蟲蟲之前的文章曾專門介紹過,大家可以搜尋曆史文章。

使用依賴元件安全性分析可以發現,依賴的開源元件(類庫)是否包含已知的安全漏洞。運作SCA工具有助于識别具有已知安全漏洞的過時庫和架構。

SAST(靜态分析安全測試)

在此階段提高安全性并向團隊提供快速回報的另一種有效方法是運作靜态分析軟體測試。這些工具可以找到稽核者遺漏的隐藏錯誤,這類錯誤往往很難通過其他類型的測試找到。

單元測試

在重構代碼或進行其他更改時,單元測試對于撲捉回歸漏洞非常重要。對每一功能塊添加單元安全測試很有必要。

工具清單

可以在該階段使用的工具包括:衆所周知的Sonarqube,OWASP依賴性檢查,sourceclear,Retire.js和snyk等。

測試階段

成功建構後,通過選擇生成的工件并将其部署到到容器或者測試環境來觸發測試階段。這些測試包括功能測試,內建測試,性能測試,進階SAST,安全性和DAST。

這個階段通常需要更多的時間和資源來執行,并且遵循失敗快速方法優先原則,即更費勁和耗時的測試要盡可能後延,隻有在其他測試都通過時才執行。

測一測:

你适合學DevOps嗎?

有針對性的動态掃描

一旦部署,應用程式就會暴露到各類可能攻擊中,例如跨站點腳本,SQL注入或身份驗證越過等等。而這些正是動态應用程式安全測試(DAST)發揮作用的地方。可以根據OWASP Top 10中總結的常見關高危漏洞來分析目前測試的應用程式。

從DevOps到DevSecOps,貫穿始終的安全棧

模糊測試(Fuzzy)

模糊測試是一種黑盒測試,暴力可靠性測試技術,主要包括以自動方式使用非預期的資料測試結果以發現漏洞的測試方法。

自動攻擊

作為自動化測試周期的一部分,我們可以進一步嘗試模拟對運作應用程式的攻擊,對系統執行基本的針對性自動滲透測試。

工具清單

該階段可用的工具(開源和商業)包括:Acunetix Web Vulnerability Scanner,BDD Security,JBroFuzz,Boofuzz,OWASP ZAP,Arachi,IBM AppScan,Mittn,GAUNTLT,SecApp套件等等

主機運作(單機)

在主機運作階段主要立足于保護運作時環境和保護其上運作的應用程式。多年來,業界提出了很多最佳安全實踐,模式,指南和工具,以幫助加強基礎架構并使其更具彈性。

降級、最低權限

PoLP聲明每個子產品(例如程序,使用者或程式,取決于主題)必須隻能通路其合法用途所必需的資訊和資源。

配置自動化

配置管理工具可以輕松地反複大規模部署和建立安全基礎架構。通過标準化配置,CM工具可以減少與更新檔管理相關的問題,最大限度地降低黑客可以利用未修補的伺服器的風險,并有助于減少不同環境之間的差異。值得一提的是,使用CM工具可以在中央存儲庫和版本控制下跟蹤配置資訊。

不可變基礎架構

使用不可變基礎架構,一旦在系統中建立工件,它就不會通過使用者修改而改變,則不會有增量更改:建立新伺服器執行個體并替換舊伺服器執行個體,而不是一系列增量更新和更改。一。

安全标準

許多社群提供了基礎架構加強指導和建議。這些标準包括Internet安全中心(CIS)基準測試和NIST配置清單等。

從DevOps到DevSecOps,貫穿始終的安全棧

工具清單

該階段可使用工具包括:Ansible,Puppet,®?ex,HashiCorp Terraform,Chef,Docker等等

運作階段

如果上述所有階段成功運作,則需要準備投入生産環境運作。該階段目标主要是驗證在配置或部署時間内是否存在任何錯誤,這些錯誤是否會降低系統的可靠性和彈性,是否可以在故障情況通過這些進行攻擊。

該階段使用自動化運作時檢查和測試中發揮重要作用的地方,特别是發現安全違規和漏洞的安全問題,并突出了風險,如通路控制政策或防火牆規則的變化。

工具清單

這方面我們要特别提及一個Netflix開源的工具chaosmonkey,利用混沌學原理,在分布式系統上進行實驗, 目的是建立對系統抵禦生産環境中失控條件的能力以及信心。

從DevOps到DevSecOps,貫穿始終的安全棧

監控階段

系統投入生産後,安全性不會終止,而是真正開始。在DevSecOps中,自動安全檢查和監視回報循環疊代是生産操作的基本部分。

持續監控可以深入了解應用程式正在接收的流量類型,并幫助識别惡意使用者的攻擊模式。

運作時應用程式安全保護

RASP技術可實時識别和阻止應用程式安全威脅。通過向應用程式運作時環境添加檢測和保護功能,RASP使應用程式能夠通過自動重新配置來"自我保護",無需人工幹預,以響應某些條件。

安全監控

首先是自動收集和分析潛在安全威脅名額的過程,定義應觸發警報的行為類型,并對警報采取嚴肅措施。比如IDS,主機程序監控,工作目錄變更監控,流量監控等等。

漏洞懸賞

通過漏洞懸賞計劃,借助第三方的力量,深入漏洞挖掘,充分了解現實的風險水準,系統弱點和漏洞。他們通常可以自由地采取行動,不會破壞系統或破壞或洩露敏感資料。

工具清單

市場上存在許多運作時防禦工具:Prevoty,Alert Logic,HALO,EVIDENT等等。

測一測:

你适合學DevOps嗎?

繼續閱讀