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