安全編碼實踐三個關(guān)鍵原則
多數(shù)安全漏洞是人為錯誤的結(jié)果。開發(fā)人員可以引入Web應(yīng)用程序漏洞和API安全問題。因此,構(gòu)建安全應(yīng)用程序的基礎(chǔ)方法是盡一切可能首先避免引入此類錯誤。
我們可以找到一些關(guān)于如何在應(yīng)用程序開發(fā)過程中創(chuàng)建安全代碼的詳細(xì)指南,例如,Open Web Application Security Project (OWASP) 提供的指南。他們專注于輸入驗證、輸出編碼、訪問控制、通信安全、數(shù)據(jù)保護(hù)、加密實踐、錯誤處理、最小特權(quán)原則等細(xì)節(jié)。此外,我們還應(yīng)該從戰(zhàn)略角度來看待軟件安全問題。
原則 1:傳播意識和教育
在大多數(shù)情況下,開發(fā)人員在編寫的源代碼中引入安全風(fēng)險只是因為他們沒有意識到這些風(fēng)險。雖然大學(xué)經(jīng)常側(cè)重于教授形式驗證等細(xì)節(jié),但很多大學(xué)都沒有專門開設(shè)網(wǎng)絡(luò)安全課程,甚至沒有提到注入攻擊或跨站腳本(XSS)等主題。
在大學(xué)學(xué)到的編程語言是有限的,因此開發(fā)人員在大多數(shù)情況下會有自學(xué)的內(nèi)容,并且一些安全問題是編程語言特有的。
為了確保你的軟件開發(fā)團(tuán)隊不會因為缺乏意識、理解或教育上的差距而犯錯誤,可以從戰(zhàn)略上看待這個問題:
安全問題應(yīng)該是從開發(fā)還未進(jìn)行時就提前想到的,尤其項目經(jīng)理對安全的重視。對于開發(fā)人員,可以在編碼過程中對其進(jìn)行安全編碼標(biāo)準(zhǔn)的培訓(xùn)。
需要注意的是,無論您的開發(fā)人員對安全性有多了解,由于技術(shù)進(jìn)步的速度,新技術(shù)和攻擊經(jīng)常出現(xiàn)。因此不要期望開發(fā)人員可以一直不犯錯,而是讓開發(fā)團(tuán)隊和安全團(tuán)隊密切合作。
原則二:引入多層驗證
即使是最有意識和受過最好教育的開發(fā)人員也會犯錯誤的可能,所以除了相信他們能編寫安全的代碼,還需要在開發(fā)過程中實時工作的自動審計工具,以幫助他們認(rèn)識到錯誤并采取適當(dāng)?shù)慕鉀Q方案。
在理想情況下,一般會使用以下工具和方法來測試軟件:
一個內(nèi)置在開發(fā)環(huán)境中的代碼分析工具。這種工具可以在開發(fā)人員輸入代碼時即時防止出現(xiàn)基本錯誤。
作為CI/CD管道的一部分工作的SAST(靜態(tài)應(yīng)用程序安全性測試)解決方案。這種解決方案在構(gòu)建源代碼之前對其進(jìn)行分析,并能發(fā)現(xiàn)潛在的軟件漏洞。
作為CI/CD管道的一部分工作的SCA(軟件組合分析)解決方案。由于現(xiàn)在大多數(shù)代碼不是直接來自開發(fā)人員,而是來自他們使用的開源庫,因此通過SCA幫助他們確保他們使用的是此類庫的安全版本。
作為 CI/CD 管道的一部分工作的DAST(動態(tài)應(yīng)用程序安全測試)解決方案。這樣的解決方案在運(yùn)行時分析應(yīng)用程序(在編譯之后,無法訪問源代碼)并找到安全漏洞。
對無法自動發(fā)現(xiàn)的錯誤進(jìn)行額外的手動滲透測試,例如業(yè)務(wù)邏輯錯誤。但是,這需要專門的安全人員并花費(fèi)大量時間,因此通常僅在軟件開發(fā)生命周期 (SDLC) 的最后階段執(zhí)行。
早期的安全測試不但可以提高軟件安全,而且還能大大降低修改漏洞的時間和成本,為企業(yè)避免遭到網(wǎng)絡(luò)攻擊的風(fēng)險。
原則 3:盡早測試以提升責(zé)任感
要獲得最高的代碼質(zhì)量,僅僅有安全的編碼需求和安全的編碼準(zhǔn)則以及測試基礎(chǔ)設(shè)施是不夠的。開發(fā)團(tuán)隊編寫安全代碼除了是在遵循安全編碼原則,而且編寫安全的代碼也符合他們的最佳利益。安全編碼不僅需要規(guī)則和執(zhí)行,還需要正確的態(tài)度。
左移方法有許多優(yōu)點(diǎn),其中之一是讓開發(fā)人員意識到他們是安全環(huán)境的一個組成部分。這使得他們覺得對代碼安全性有責(zé)任,并且意識到如果犯了錯誤,他們會立即修復(fù)它,而不是指望別人稍后來做。
當(dāng)然,您可以在應(yīng)用程序投入生產(chǎn)之前或什至在生產(chǎn)中(右移)測試您的應(yīng)用程序是否存在安全漏洞。但是,與向左移動相比,它會花費(fèi)更多。該軟件將不得不再次經(jīng)歷所有階段,這涉及其他資源,而不僅僅是開發(fā)人員。開發(fā)人員不會記住他們使用的代碼,或者修復(fù)程序可能會分配給與原始開發(fā)人員不同的開發(fā)人員,因此,開發(fā)人員將需要更多時間來查找和刪除漏洞。因此,延遲測試可能會延遲發(fā)布甚至數(shù)周。
當(dāng)然,企業(yè)也可以嘗試將安全測試“右移”,但這付出的代價要比左移大得多。軟件將不得不再次經(jīng)歷所有階段,這涉及到其他資源,而不僅僅是開發(fā)人員。開發(fā)人員很可能不再熟悉他們編寫的代碼,或者修復(fù)問題可能分配給不同的開發(fā)人員,從而導(dǎo)致不得不花費(fèi)更多的時間來發(fā)現(xiàn)并修復(fù)安全漏洞,延遲測試將會推遲發(fā)布時間。
不僅僅是安全政策
總之,意識到安全問題很有必要,但如果認(rèn)為其是一種限制而非增強(qiáng)則是不夠的。安全始于構(gòu)建應(yīng)用軟件時正確的態(tài)度。即使是用于維護(hù)安全的最好工具也必須在過程中以正確的方式使用,以便它們被認(rèn)為是有幫助的而不是一種“累贅”。
參讀鏈接:
https://www.acunetix.com/blog/web-security-zone/secure-coding-practices/
