開發(fā)人員應(yīng)用軟件安全編碼的最佳實(shí)踐
信息安全并不僅僅是保護(hù)計(jì)算機(jī)、網(wǎng)絡(luò)、信息免受攻擊和危害。應(yīng)用軟件缺乏安全性日益成為許多企業(yè)的一種巨大漏洞!
無論是軟件開發(fā)者,還是安全專家,在與攻擊者斗爭(zhēng)的過程中,永遠(yuǎn)不可能一勞永逸地解決安全問題。因?yàn)楣粽咄挥袆?chuàng)造性并且堅(jiān)忍不拔,還有金錢的巨大誘惑。除了利用操作系統(tǒng)的漏洞之外,攻擊者還喜歡利用應(yīng)用軟件的漏洞,而軟件工程師們似乎忽視了這一點(diǎn)。
軟件安全的目標(biāo)是什么?是構(gòu)建更好的、無缺陷的軟件。一般情況下,應(yīng)用軟件都會(huì)存在許多缺陷,其中的相當(dāng)一部分都成為安全問題的源頭。在開發(fā)軟件時(shí),將安全性牢記在心,有助于應(yīng)對(duì)風(fēng)險(xiǎn)并挫敗攻擊;在成功的攻擊面前,這樣做也有助于更快地從災(zāi)難中恢復(fù)過來。
負(fù)責(zé)軟件開發(fā)的項(xiàng)目管理者需要認(rèn)真考慮其開發(fā)團(tuán)隊(duì)的知識(shí)、技術(shù)、技能、能力。構(gòu)建安全的最佳途徑是在編碼和測(cè)試時(shí)就考慮應(yīng)用軟件的安全性。那么,有哪些成熟的做法可有助于軟件開發(fā)安全呢?
1、培訓(xùn)軟件開發(fā)人員,實(shí)施特定語言的安全編碼實(shí)踐并確保其應(yīng)用。
2、使用靜態(tài)分析和其它的代碼分析工具來執(zhí)行源代碼的檢查。
3、理解軟件安全測(cè)試與傳統(tǒng)的軟件測(cè)試之間的區(qū)別,并將其反映到軟件測(cè)試中。
4、執(zhí)行基于風(fēng)險(xiǎn)的安全測(cè)試,查找常見的錯(cuò)誤、可疑的軟件缺陷,并實(shí)施減輕風(fēng)險(xiǎn)的方法,確保其運(yùn)行。
5、使用一種確定的過程,確認(rèn)安全需求的原因、安全需求的分類、安全需求的優(yōu)先級(jí)等內(nèi)容,根據(jù)優(yōu)先級(jí)的高低解決安全問題。
6、利用威脅建模和攻擊模式來確認(rèn)安全威脅。攻擊模式包括發(fā)動(dòng)攻擊的先決條件、相關(guān)漏洞、執(zhí)行攻擊所要求的技巧和資源等。
7、執(zhí)行架構(gòu)風(fēng)險(xiǎn)分析,評(píng)估架構(gòu)和設(shè)計(jì)滿足安全需求的能力,以及從相關(guān)威脅中的恢復(fù)能力。
不管從哪里開始,下面的方法對(duì)于開發(fā)安全的軟件總是有幫助的:
1、在確定架構(gòu)、進(jìn)行設(shè)計(jì)和實(shí)施、測(cè)試、部署應(yīng)用軟件的過程中,選擇并將安全實(shí)踐(如上面所描述的)集成到現(xiàn)有的軟件開發(fā)過程中。將安全性納入到軟件開發(fā)過程中并不是完全推翻現(xiàn)有的過程,而是加入健全的安全實(shí)踐和方法。應(yīng)對(duì)安全問題,需要與軟件工程人員解決性能和可靠問題一樣。
2、像攻擊者一樣思考。除了考慮應(yīng)用軟件的功能、特性,還要思考應(yīng)用軟件應(yīng)當(dāng)做什么,不應(yīng)當(dāng)做什么,考慮應(yīng)用軟件如何才能更好地對(duì)抗攻擊,或在遭受攻擊后進(jìn)行恢復(fù)。
3、安全是一個(gè)風(fēng)險(xiǎn)管理問題。在每一個(gè)軟件的生命周期中,開發(fā)人員和測(cè)試人員必須評(píng)估和減輕最高級(jí)的漏洞和風(fēng)險(xiǎn)。隨著應(yīng)用軟件的設(shè)計(jì)、開發(fā)、測(cè)試、部署,風(fēng)險(xiǎn)及其優(yōu)先級(jí)也會(huì)發(fā)生變化。風(fēng)險(xiǎn)管理方法的實(shí)施依賴于應(yīng)用軟件的特征。例如,對(duì)一個(gè)集成系統(tǒng)的風(fēng)險(xiǎn)分析和評(píng)估,就與評(píng)估商業(yè)級(jí)應(yīng)用軟件或評(píng)估一個(gè)基礎(chǔ)架構(gòu)的組件的風(fēng)險(xiǎn)的需求不同。
每家公司在開發(fā)每個(gè)項(xiàng)目時(shí),都要根據(jù)自己的目標(biāo)、限制條件和應(yīng)用軟件的重要程度,在開發(fā)過程中選擇并調(diào)整自己特定的安全實(shí)踐和方法,而不要一味地追求速度和性能。