關(guān)于DevSecOps,你應(yīng)該知道這些 | IDCF

來源:CIO Talk 作者:馬景賀
一、什么是DevSecOps

對(duì)比DevOps的概念,可以將DevSecOps理解為:
DevSecOps 描述了一個(gè)組織的文化和具體實(shí)踐,這些文化和實(shí)踐能夠打破開發(fā)、安全、運(yùn)維部門之間的壁壘,使得開發(fā)、運(yùn)維和安全能夠通過通力協(xié)作和敏捷開發(fā)來提高工作效率,實(shí)現(xiàn)軟件的更快速、更安全交付。
二、DevOps不香了嗎
滯后型:在以前的開發(fā)模式中,安全往往是置于軟件開發(fā)的最后階段,在半年甚至一年發(fā)布一個(gè)版本的時(shí)候,這種模式的弊端并沒有顯得太突兀。就像鳳凰項(xiàng)目一樣,安全團(tuán)隊(duì)甚至有好幾個(gè)月的時(shí)間去完成安全工作。 甩鍋型:我是開發(fā),安全與我無關(guān);我是測試,安全與我無關(guān);我是安全,漏洞是開發(fā)引入的,測試沒有測試出來,安全與我無關(guān)。 狹隘型: 安全問題只有一種:被黑客利用漏洞攻擊了。其余的配置錯(cuò)誤,敏感信息泄漏,權(quán)限管理混亂,都不是安全問題,只是因?yàn)椴恍⌒摹?/span> 僥幸型: 全世界這么多軟件,就算被攻擊,怎么會(huì)輪到我呢? 勢利型: 增加安全必然增加成本,雇傭?qū)I(yè)的安全人員,選用專業(yè)的安全工具,進(jìn)行專業(yè)的安全測試。然而,能給我?guī)淼氖找嬗卸嗌伲?/span>
三、DevSecOps 更香
安全融入:在軟件開發(fā)的整個(gè)生命周期中都融入安全,從設(shè)計(jì)到上線之后的運(yùn)維、監(jiān)控階段。安全貫穿始終。 安全左移(security shifting left):傳統(tǒng)開發(fā)模式下,安全都是在開發(fā)的最后階段介入,甚至上線之前。在DevSecOps 模式下,安全在計(jì)劃階段就介入,在軟件的生命周期中,可以看到左移了。

測試領(lǐng)域有一個(gè)原理:在需求階段發(fā)現(xiàn)并修復(fù)一個(gè)缺陷或問題如果如需要花費(fèi)一美分,那么在開發(fā)階段修復(fù)同樣的問題則需要花費(fèi)十美分;在測試階段話花費(fèi)一美元,在生產(chǎn)環(huán)境則需要十美元。

根據(jù)Red Hat的統(tǒng)計(jì)數(shù)據(jù),他們的客戶在不采用DevSecOps模式時(shí),在生產(chǎn)環(huán)境上通過動(dòng)態(tài)掃描發(fā)現(xiàn)漏洞后,修復(fù)漏洞的平均時(shí)間是174天,但是采用DevSecOps模式后,時(shí)間變?yōu)?2天;如果是開發(fā)階段就用靜態(tài)掃描發(fā)現(xiàn)漏洞,不采用DevSecOps模式的時(shí)候,修復(fù)的平均時(shí)間是113,而采用DevSecOps模式后,時(shí)間變?yōu)?2天。

文化建設(shè):打造開發(fā),運(yùn)維,安全團(tuán)隊(duì)共擔(dān)責(zé)任、相互信任、不推諉的文化。團(tuán)隊(duì)之間,團(tuán)隊(duì)內(nèi)部都能形成大家認(rèn)可和遵守的公約。比如,代碼層面的漏洞由開發(fā)團(tuán)隊(duì)負(fù)責(zé),基礎(chǔ)設(shè)施的漏洞由運(yùn)維負(fù)責(zé)等,這樣團(tuán)隊(duì)之間安全責(zé)任比較明確。而針對(duì)于團(tuán)隊(duì)內(nèi)部,比如開發(fā)團(tuán)隊(duì),可以約定每一個(gè)開發(fā)人員提交代碼之前必須要借助于安裝在IDE中的安全插件,完成本地代碼掃描和測試才能提交代碼。 團(tuán)隊(duì)管理:組建規(guī)模合適的團(tuán)隊(duì)(比如two pizza team),團(tuán)隊(duì)與團(tuán)隊(duì)之間的溝通要方便,快捷。這里所說的溝通,不僅指開發(fā)內(nèi)部團(tuán)隊(duì)的溝通,運(yùn)維團(tuán)隊(duì)內(nèi)部的溝通,安全團(tuán)隊(duì)內(nèi)部的溝通,更重要的開發(fā),運(yùn)維,安全這種跨部門團(tuán)隊(duì)之間的溝通。可以用實(shí)時(shí)通訊工具,如slack等實(shí)現(xiàn)團(tuán)隊(duì)內(nèi)、跨團(tuán)隊(duì)的協(xié)同工作。 報(bào)告共享:與安全相關(guān)的報(bào)告,不管是成功案例還是失敗案例,都應(yīng)該各個(gè)團(tuán)隊(duì)共享,通過學(xué)習(xí)案例來改進(jìn)系統(tǒng)設(shè)計(jì),強(qiáng)化實(shí)施和增強(qiáng)事件響應(yīng)能力。比如代碼掃描報(bào)告,測試覆蓋報(bào)告,鏡像掃描報(bào)告等。 組織培訓(xùn):對(duì)于安全來講,意識(shí)比任何事情都重要。對(duì)于大多數(shù)從事軟件開發(fā)的人員來講,安全的認(rèn)知僅限于代碼層面,公司法規(guī),安全審計(jì),權(quán)限管理等都從未考慮。通過組織安全培訓(xùn),可以讓每個(gè)人明確安全的范圍到底有多大,每個(gè)人擔(dān)負(fù)的責(zé)任有哪些。
流程意味著標(biāo)準(zhǔn)化,流程的制定應(yīng)該由多團(tuán)隊(duì)共同參與,明確各個(gè)團(tuán)隊(duì)所承擔(dān)的安全責(zé)任,以及對(duì)應(yīng)階段中的一些安全閾值設(shè)定,比如有高危漏洞,CI/CD Pipeline 就要終止,阻止代碼的提交(持續(xù)集成階段)或者上線(測試階段),只有高危漏洞解決了,才能繼續(xù)往下走;如果測試覆蓋率低于80%,就不可以部署此版本到生產(chǎn)線;已有漏洞的解決,在迭代內(nèi)以50%的速率遞減等等。這種適合多個(gè)團(tuán)隊(duì)的流程,方便管理的同時(shí),也便于推廣。 如果能夠自動(dòng)化的,應(yīng)該采用相應(yīng)的工具來盡可能的實(shí)現(xiàn)自動(dòng)化,以此來減少人工干預(yù)。比如可能由安全人員來手動(dòng)執(zhí)行的靜態(tài)安全測試(SAST),動(dòng)態(tài)安全測試(DAST),由測試人員手動(dòng)執(zhí)行的壓力測試等,可以進(jìn)行自動(dòng)化改造,最好是融入到CI/CD Pipeline中。以期做到持續(xù)測試。 流程應(yīng)該高度透明,比如測試可以看到開發(fā)在代碼提交前是否執(zhí)行了單元測試,安全團(tuán)隊(duì)可以看到開發(fā)在代碼提交之前是否執(zhí)行了敏感信息檢測,代碼靜態(tài)掃描等,還有覆蓋率的閾值設(shè)置及結(jié)果都應(yīng)該是公開透明的。這種透明,不是為了讓各自找證據(jù)用來甩鍋,而是要培養(yǎng)團(tuán)隊(duì)之間的相互信任。完全的可見性會(huì)驅(qū)動(dòng)全面的信任。 要將安全加入流程,形成端到端的安全交付流程,不是一蹴而就的??梢砸孕〔介_始,比如先在持續(xù)集成加入諸如代碼掃描,敏感信息檢測步驟,然后循序漸進(jìn),在持續(xù)測試,持續(xù)交付,持續(xù)部署,持續(xù)運(yùn)維,持續(xù)監(jiān)控中加入相應(yīng)的安全步驟(后面章節(jié)會(huì)介紹)。每個(gè)步驟都應(yīng)該形成一個(gè)閉環(huán),通過反饋來做到持續(xù)改進(jìn)。這種改進(jìn)可以按照迭代的方式來進(jìn)行。

有數(shù)據(jù)統(tǒng)計(jì),現(xiàn)在能自動(dòng)修復(fù)的漏洞數(shù)量不及發(fā)現(xiàn)漏洞數(shù)量的1%,借助于AI和ML,在2023年這種比例要達(dá)到10%以上。
四、DevSecOps CI/CD 實(shí)踐案例

應(yīng)用程序:應(yīng)用程序是IT最核心的產(chǎn)物,也是價(jià)值的真正體現(xiàn)。安全是貫穿在應(yīng)用程序的整個(gè)生命周期中的。常用的包括威脅建模,SAST,DAST,IAST,滲透測試。當(dāng)然還有包括代碼風(fēng)格檢測,性能、功能測試、壓力測試等其他手段。從源碼到產(chǎn)品,從靜態(tài)到動(dòng)態(tài),都有相應(yīng)安全手段。
SAST(Static Application Security Testing): 也稱為白盒測試,通過分析應(yīng)用的源碼,字節(jié)碼,二進(jìn)制文件來發(fā)現(xiàn)安全漏洞,一般在軟件的開發(fā),測試階段進(jìn)行。 DAST(Dynamic Application Security Testing): 在應(yīng)用處于運(yùn)行狀態(tài)時(shí),通過模擬外部攻擊,查看應(yīng)用程序應(yīng)對(duì)攻擊的反應(yīng)來確定,是否存在漏洞。一般在軟件的測試或者維護(hù)階段進(jìn)行。 IAST(Interactive Application Security Testing):兼具SAST和DAST特點(diǎn)的一種安全測試手段,也是這幾年比較流行的一種方法,IAST還能夠?qū)τ谝恍┸浖蚣苓M(jìn)行安全檢測。
鏡像 & 容器:可以說容器技術(shù)的發(fā)展極大的促進(jìn)了云計(jì)算的發(fā)展,容器交付模式也大大縮短了應(yīng)用程序開發(fā)周期。對(duì)于鏡像,可以通過鏡像掃描來掃描出鏡像漏洞;鏡像簽名可以防止鏡像被惡意篡改;制作沒有漏洞的基礎(chǔ)鏡像,確保多個(gè)項(xiàng)目應(yīng)用的基礎(chǔ)鏡像是安全的。最小權(quán)限確保了應(yīng)用程序所在的容器是以非root權(quán)限運(yùn)行的。
云平臺(tái):云平臺(tái)的安全是最大的安全,如果云平臺(tái)不安全,那么在上面進(jìn)行再多安全操作和防護(hù)都是沒有意義的。在租用云平臺(tái)的時(shí)候,必須要理清楚租用的云平臺(tái)的網(wǎng)絡(luò),數(shù)據(jù),租戶管理等等,是否能達(dá)標(biāo)公司要求的安全標(biāo)準(zhǔn)。

| 工具名稱 | 作用 | 作用階段 | 地址 |
|---|---|---|---|
| git-secrets | 代碼中敏感信息檢測 | 編碼階段 | https://github.com/awslabs/git-secrets |
| sonarqube | 代碼質(zhì)量檢測 | 編碼階段、構(gòu)建階段 | https://www.sonarqube.org/ |
| SAST/DAST相關(guān)工具 | SAST/DAST檢測 | 編碼階段、測試階段、運(yùn)維階段 | https://www.gartner.com/doc/reprints?id=1-6JR0995&ct=190419&st=sb |
| vault | 敏感數(shù)據(jù)管理 | 任意階段 | https://www.vaultproject.io/ |
| Clair/Xray/Anchore | 鏡像掃描 | 構(gòu)建階段中鏡像打包環(huán)節(jié) | Clair: https://github.com/quay/clair 和 Xray: https://github.com/atom-archive/xray 和 Anchore: https://anchore.com/ |
| Terraform | 管理基礎(chǔ)設(shè)施,基礎(chǔ)設(shè)施即代碼 | 部署階段 | https://www.terraform.io/ |
五、路漫漫其修遠(yuǎn)兮,吾將上下而求索
https://devops.com/the-state-of-devops-report-2019-is-out/
https://www.recordedfuture.com/vulnerability-management-prioritization/
https://medium.com/@Joachim8675309/devops-concepts-pets-vs-cattle-2380b5aab313
https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code
https://www.redhat.com/en/topics/devops/what-is-devsecops
https://www.recordedfuture.com/vulnerability-management-prioritization/
https://www.plutora.com/blog/devsecops-guide
https://www.gartner.com/doc/reprints?id=1-6JR0995&ct=190419&st=sb
https://devops.com/devops-and-security-the-path-to-devsecops/
https://www.kiuwan.com/blog/the-benefits-of-a-devsecops-approach-to-the-sdlc/
作者:馬景賀
馬景賀,人稱小馬哥,曾做過LTE 4G網(wǎng)絡(luò)協(xié)議開發(fā),后轉(zhuǎn)向DevOps,對(duì)于Cloud Native DevSecOps進(jìn)行布道,喜歡研究docker,kubernetes,istio等Cloud Native相關(guān)技術(shù),樂于分享,運(yùn)營著DevOps SIG公眾號(hào)。在大連DevOps社區(qū)活動(dòng)上,舉辦DevOps Workshop活動(dòng)。

5月25日,徐磊老師線上課程《基于BoatHouse的DevOps實(shí)戰(zhàn)訓(xùn)練營》開課,現(xiàn)在有早鳥優(yōu)惠,快快報(bào)名吧~


