如何以代碼的形式提供安全性:11個(gè)入門提示
如今,作為代碼和安全設(shè)計(jì)的安全性是會(huì)議的熱門術(shù)語(yǔ)。但這些短語(yǔ)究竟是什么意思,你怎么能開始在你的組織中采用它們?
正如Grupo Banco Santander安全研究負(fù)責(zé)人Daniel Cuthbert在“為開發(fā)者致電武器:以安全為代碼的革命性”中所寫道:
現(xiàn)在是時(shí)候把我們的努力集中在防御 - 而不是攻擊 - 并讓那些能夠有所作為的人成為英雄:開發(fā)者。
BIDS Trading Technologies的首席技術(shù)官Jim Bird是一位擁有20多年金融服務(wù)技術(shù)經(jīng)驗(yàn)的軟件和項(xiàng)目經(jīng)理,他在O'Reilly的這份報(bào)告中寫道:
作為代碼的安全性是關(guān)于在DevOps工具和實(shí)踐中構(gòu)建安全性,使其成為工具鏈和工作流的重要組成部分。您可以通過繪制如何更改代碼和基礎(chǔ)結(jié)構(gòu)以及查找添加安全檢查和測(cè)試和門的位置而不會(huì)引入不必要的成本或延遲來實(shí)現(xiàn)此目的。
- 吉姆伯德
那么您的團(tuán)隊(duì)如何超越概念轉(zhuǎn)變?yōu)樾袆?dòng)?這里有11個(gè)技巧可以幫助您入門。
1.理解'安全SDLC'的含義
了解安全軟件開發(fā)生命周期(SDLC)將幫助您評(píng)估如何在特定的DevOps情況下構(gòu)建安全性。您可以犯的很大錯(cuò)誤是嘗試執(zhí)行安全性而不了解它是什么。
關(guān)于這個(gè)主題的權(quán)威來源是OWASP Secure SDLC備忘單;雖然它仍處于草稿模式,但它提供了一個(gè)很好的概述。下圖顯示了在開發(fā)周期的每個(gè)步驟中發(fā)生的活動(dòng)。

顯示“向左移動(dòng)”的箭頭說明了通過執(zhí)行安全實(shí)踐盡早嵌入安全性的概念,下面進(jìn)一步定義。圖片提供:OWASP。
2.使用SAMM評(píng)估您的情況
軟件保障成熟度模型(SAMM)是一個(gè)開放式框架,可幫助組織制定和實(shí)施針對(duì)組織面臨的特定風(fēng)險(xiǎn)量身定制的軟件安全策略。但是,有些人認(rèn)為這個(gè)框架執(zhí)行起來很復(fù)雜。
在您的組織牢牢掌握SAMM之前,這些問題將幫助您快速評(píng)估DevOps流程的安全組件:
- 要求:您是否正在收集專門針對(duì)要構(gòu)建的軟件的安全和隱私要求?
- 設(shè)計(jì):您是否在每個(gè)sprint上進(jìn)行威脅建模?
- 開發(fā):您使用靜態(tài)分析和代碼審查嗎?
- 測(cè)試:您是否使用動(dòng)態(tài)分析和安全測(cè)試來驗(yàn)證安全要求?
- 部署:您是否計(jì)劃使用筆測(cè)試評(píng)估最終版本或進(jìn)行包含錯(cuò)誤賞金計(jì)劃的風(fēng)險(xiǎn)評(píng)估?
如果您的答案大多數(shù)沒有,那么您處于實(shí)施安全性的早期階段 - 換句話說,您的DevSecOps工作處于非常低的成熟度級(jí)別。
許多組織將他們的安全工作集中在周期的最后階段,在筆測(cè)試之后進(jìn)行部署。不幸的是,如果您發(fā)現(xiàn)主要漏洞,這種方法成本很高。而且一個(gè)很大的風(fēng)險(xiǎn)是筆測(cè)試可能無(wú)法發(fā)現(xiàn)確實(shí)存在的任何重大問題。
相反,“左移”運(yùn)動(dòng)越來越注重從一開始就嵌入安全性,最終成本更低,風(fēng)險(xiǎn)更小。
3.注意DevOps中固有的安全挑戰(zhàn)
DevOps是一個(gè)嵌入安全性的具有挑戰(zhàn)性的過程。例如,考慮安全原則,例如“最低權(quán)限”,開發(fā)人員可以訪問生產(chǎn)環(huán)境并進(jìn)行任何更改。這與大多數(shù)優(yōu)秀實(shí)踐安全概念相矛盾,但是當(dāng)安全性作為代碼到位時(shí),仍然希望嵌入安全性。
安全性不能成為業(yè)務(wù)的障礙,但有必要在安全開發(fā)和沒有安全形式的敏捷之間找到平衡點(diǎn)。
4.盡快將安全性作為代碼實(shí)施
在敏捷沖刺期間嵌入安全性應(yīng)該是完美無(wú)缺的,并且?guī)缀跏亲詣?dòng)的。這是理想的情況,但很難做到正確。
另一種方法是在此過程中盡可能自動(dòng)化,包括應(yīng)該必須具備的特定安全DevOps管道。團(tuán)隊(duì)中的每個(gè)人都應(yīng)該保持一致并堅(jiān)持這些想法。
5.早期的威脅模型
在sprint開始前至少一天計(jì)劃威脅建模會(huì)話。所有潛在的問題和風(fēng)險(xiǎn)都應(yīng)成為安全故事的一部分。
6.盡早定義安全要求
- 確保在sprint開始時(shí)定義安全要求,包括威脅建模問題。 (提示:使用OWASP ASVS 2.0來支持此過程。)
- 制作安全要求安全性故事并將其添加到sprint backlog中。
- 在sprint定義期間,計(jì)算實(shí)現(xiàn)和創(chuàng)建測(cè)試用例以解決這些安全性故事/任務(wù)所需的工作量。 (提示:使用OWASP測(cè)試指南。)
- 在開發(fā)階段使用OWASP主動(dòng)控件,并確保在每個(gè)sprint期間這些控件成為常規(guī)任務(wù)。
7.使用SAST / DAST工具
- 在構(gòu)建過程中插入靜態(tài)和動(dòng)態(tài)分析工具(SAST / DAST)。
- 從這些掃描中獲得定期沖刺錯(cuò)誤的結(jié)果。這應(yīng)該在清理任務(wù)之后完成,例如確保消除盡可能多的誤報(bào)。
- 如果代碼變化太大,您可能會(huì)重新考慮如何應(yīng)用SAST,因?yàn)楫?dāng)代碼發(fā)生很大變化時(shí)會(huì)出現(xiàn)許多誤報(bào)。
- 如果您的組織無(wú)法負(fù)擔(dān)付費(fèi)工具,請(qǐng)查看開源替代方案,例如OWASP依賴關(guān)系檢查,以至少找到易受攻擊的組件。
8.盡可能執(zhí)行代碼審查
一個(gè)任務(wù)是執(zhí)行代碼審查作為sprint的一部分。這里發(fā)現(xiàn)的任何問題都會(huì)在沖刺結(jié)束時(shí)成為錯(cuò)誤。
9.衡量風(fēng)險(xiǎn)并確定優(yōu)先順序
產(chǎn)品所有者 - 或者在決策中執(zhí)行此指定角色的人 - 應(yīng)具有適當(dāng)?shù)陌踩尘?,以了解問題并能夠優(yōu)先考慮那些需要很高關(guān)注的問題。
10.準(zhǔn)備安全性代碼骨干
環(huán)境的任何更改(QA / UAT / PROD)都應(yīng)該使用代碼手動(dòng)完成。配置的所有更改都應(yīng)該通過代碼,使用源存儲(chǔ)庫(kù)并跟蹤所有更改。這可以通過任何流行的構(gòu)建,源代碼和部署工具來實(shí)現(xiàn)。這是代碼安全概念的支柱。
縱觀整個(gè)過程,DevOps管道應(yīng)側(cè)重于嵌入自動(dòng)化持續(xù)交付過程的活動(dòng)。以下是關(guān)注的內(nèi)容:
- 所有環(huán)境中的配置更改都應(yīng)該由源控制和同行評(píng)審。
- 構(gòu)建過程應(yīng)該自動(dòng)化集成和部署。
- 在考慮安全性的情況下仔細(xì)檢查容器的配置。
- 應(yīng)將SAST工具集成到構(gòu)建過程中,并將發(fā)現(xiàn)的問題反饋到sprint中。
11.定期評(píng)估,沖洗并重復(fù)
進(jìn)行SAMM評(píng)估會(huì)議以檢查您實(shí)施安全性的完整程度,并創(chuàng)建特定的短期任務(wù)來實(shí)現(xiàn)此目標(biāo)。一步一步是關(guān)鍵。
左移可以幫助你保持領(lǐng)先
向左移動(dòng)的組織在發(fā)現(xiàn)缺陷方面更有效,修復(fù)它們的損失和成本低于開發(fā)人員部署應(yīng)用程序時(shí),或者在發(fā)布應(yīng)用程序之后。
但快速交付的壓力使設(shè)計(jì)的安全性變得更加困難。 DevOps團(tuán)隊(duì)有責(zé)任在短時(shí)間內(nèi)驗(yàn)證安全要求。 “作為代碼的安全性”可以在這方面發(fā)揮重要作用,因?yàn)樗兄谧詣?dòng)化安全部署過程,使過程更容易,更快。