所謂“左移開發(fā)安全”就是在開發(fā)流程中的所有階段都考慮到安全性問題,研發(fā)人員承擔更多的軟件安全責任。
很多研發(fā)會認為考慮軟件的安全性會給他們徒增更多工作量,但實際上安全能力是研發(fā)工作中錦上添花的東西,比如可以幫他們節(jié)約大量修復bug的時間。
靠單個產(chǎn)品修復所有的應用安全漏洞幾乎不可能。
開發(fā)安全需要在開發(fā)各個階段實施不同的防御措施,層層遞進地去實現(xiàn)。

開發(fā)安全類工具一般包括:
SAST - 靜態(tài)應用安全測試
DAST - 動態(tài)應用安全測試
IAST - 交互式應用安全測試
RASP - 運行時應用自我保護
依賴項安全掃描
Secrets Detection(機密信息檢測)
盡早修復漏洞確實更加容易,成本也更低,但在開發(fā)早期階段發(fā)現(xiàn)所有漏洞也不太可能。
安全應貫穿軟件開發(fā)生命周期的整個過程。

縱軸:修復成本;橫軸:軟件開發(fā)生命周期
一.SAST
靜態(tài)應用安全測試,也稱為“白盒測試”,通過掃描源代碼發(fā)現(xiàn)代碼中的已知漏洞,是最常見也是最早出現(xiàn)的自動化應用安全測試。
市場上的SAST工具非常多。確定使用某個工具前,需要評估工具的支持和維護情況以及是否適配自身的技術棧。
這里推薦一些免費的SAST工具。
NodeJsScan

NodeJs Scan有一個命令行接口,可輕松與DevSecOps CI/CD管道集成,并以JSON格式生成掃描結果。
每種語言都有一個配置文件,可以根據(jù)自定義檢索進行修改。文件總覽和整個代碼庫都可以通過統(tǒng)計數(shù)據(jù)和餅圖做到可視化。
它還可以檢測緩沖區(qū)溢出漏洞和針對JAVA的十大OWASP漏洞。
SonarQube

SonarQube被譽為是“最好用的免費自動化代碼審計工具之一”,具備上千種自動化靜態(tài)代碼分析規(guī)則,且支持27種開發(fā)語言,能夠很好地覆蓋整個開發(fā)項目的發(fā)展。
二.DAST
DAST,動態(tài)應用安全測試,也被稱為“黑盒測試”,不像SAST那樣從源代碼中發(fā)現(xiàn)漏洞,而是在應用運行時,通過注入故障的方式進行安全測試。
DAST可以發(fā)現(xiàn)SQL注入、跨站腳本等常見的安全漏洞,識別應用程序運行時的安全風險,如身份驗證和服務器配置問題,以及只有在已知用戶登錄時才有可能發(fā)現(xiàn)的安全問題。
OWASP ZAP

OWASP ZAP是一個功能非常全面的開源DAST工具,不但能夠自動進行漏掃,還能協(xié)助測試人員完成web應用的滲透測試。ZAP的漏洞庫也非常豐富。
三.IAST
IAST,交互式應用安全測試,有時也稱為“灰盒測試”,是一種綜合了SAST和DAST的檢測技術,一般會在測試環(huán)境中以agent的形式(例如針對Java虛擬機或.NET CLR的插樁技術)監(jiān)測運營與攻擊情況,從而發(fā)現(xiàn)風險點。
Contrast Security - Community

Contrast也是一個聲稱“開發(fā)者至上”的產(chǎn)品,能更深入地發(fā)現(xiàn)漏洞。應用程序運行時的上下文信息對于其它的SAST和DAST工具完全是盲區(qū),如控制器、業(yè)務邏輯、數(shù)據(jù)層、視圖,用戶庫,開源組件和應用程序服務器。
四.RASP
RASP,運行時應用程序自我保護,一般部署在某個服務器上,當應用運行時即開始工作,能夠實時發(fā)現(xiàn)目標應用中的攻擊活動。應用程序一旦開始運行,RASP就會分析應用的行為和上下文信息,防止惡意輸入或惡意行為的發(fā)生。通過對應用行為的持續(xù)監(jiān)控,不用人為干預就可以發(fā)現(xiàn)攻擊活動并且做到及時修復。
Sqreen

Sqreen的RASP可通過請求的完整執(zhí)行上下文信息來發(fā)現(xiàn)應用上線后的漏洞利用和攻擊活動,覆蓋OWASP十大安全漏洞,如SQL注入、XSS和SSRF等。
它的強大之處在于能夠根據(jù)請求的執(zhí)行邏輯進行攻擊攔截,比其它解決方案的誤報率低得多。
Sqreen還能自動適配不同的應用程序技術棧,無需重新部署或配置。
依賴項安全掃描
依賴項安全掃描(Dependency Scanning)能夠在應用程序開發(fā)和測試時檢測依賴項的安全漏洞,例如正在使用的外部(開源)依賴庫是否存在風險。
Snyk

據(jù)說Snyk也是一個開發(fā)者之上的企業(yè),為開發(fā)人員提供一些開源的解決方案。
Snyk自帶很多比較好的功能,比如能在IDE中檢測漏洞,掃描本地git測試存儲庫中的項目等等。
Snyk有一個能夠防止新漏洞通過構建過程進入開發(fā)環(huán)境的安全網(wǎng)關,還有一個用于測試運行環(huán)境中是否存在暴露風險點的生產(chǎn)環(huán)境。
WhiteSource Bolt for GitHub

Whitesource和Snyk一樣有一些面向開發(fā)人員的免費工具。
WhiteSource Bolt for GitHub是一款免費的應用,能夠持續(xù)掃描自有和公開的存儲庫,檢測開源組件中的漏洞并提供修復建議,支持200多種編程語言,能夠像美國國家安全漏洞庫NVD一樣持續(xù)跟蹤多個開源漏洞庫。
Secrets Detection(機密信息檢測)
API密鑰、數(shù)據(jù)庫憑證和安全證書等是一個組織的機密信息(secrets),拿到這些東西就能訪問很多敏感系統(tǒng)。因此需要secrets detection這樣的技術加以保護。
secrets detection可掃描源代碼、日志等文件,發(fā)現(xiàn)其中隱藏的機密。
這是一項技術要求較高的專業(yè)服務,因為大多數(shù)機密都是以隨機字符串的形式存儲,而且很多隨機字符串都不是機密信息,因此需要通過分類算法,才能以較高的準確度檢測到機密信息。
很多人可能會把secrets detection和SAST搞混,因為兩者都是掃描源碼的技術。
但SAST只掃描目標應用的當前版本,而secrets detection檢測的是該項目的所有開發(fā)版本。
像git這樣的版本控制系統(tǒng)會對項目的所有變更信息進行跟蹤和存儲。
如果源碼的上一個版本含有硬編碼的機密信息,卻在后面的階段被刪除了,代碼審計和SAST工具就無法發(fā)現(xiàn)這個問題,遺留在git存儲庫中容易遭到惡意利用。
所以secrets detection成為了一個獨立的分類
GitGuardian

GitGuardian可通過掃描開發(fā)人員存儲庫,持續(xù)發(fā)現(xiàn)機密信息,涵蓋300多種不同類型的機密類型,從密鑰到數(shù)據(jù)庫連接字符串、SSL證書、用戶名和密碼,通過復雜的模型匹配等多種算法技術進行檢測。
GitGuardian可以與GitHub帳戶實現(xiàn)集成,幾分鐘即可完成配置。
開發(fā)人員可以通過GitGuardian API檢測目錄、郵件客戶端或Slack channel等服務中的機密信息。
五.總結
眼花繚亂的解決方案容易讓人選擇困難,一個重要標準就是思考這個工具是否能夠適配當前的工作流程。
上述的開源工具都只能提供最基本的保護,實際運營過程中還是需要更多功能更加豐富的商業(yè)軟件和方案。
確保應用的安全是開發(fā)人員中最有價值的技能之一,
雖然將安全性“左移”看起來是一項艱巨的任務,但在整個開發(fā)生命周期中融合安全測試系統(tǒng)肯定是一項非常值得的投資。