安全軟件開(kāi)發(fā)淺談
前 言
數(shù)字化時(shí)代,軟件安全已成為不可忽視的問(wèn)題。軟件安全不僅關(guān)系到數(shù)據(jù)的保密性、完整性和可用性,還直接影響到企業(yè)和個(gè)人的聲譽(yù)和經(jīng)濟(jì)利益。本文剖析軟件開(kāi)發(fā)中的軟件設(shè)計(jì)、可能存在的安全問(wèn)題和相應(yīng)的防護(hù)措施,從五個(gè)方面對(duì)安全軟件開(kāi)發(fā)進(jìn)行簡(jiǎn)要介紹,主要包括安全軟件設(shè)計(jì)、安全Web應(yīng)用程序設(shè)計(jì)、Web應(yīng)用程序攻擊、Web應(yīng)用程序防護(hù)和漏洞挖掘,旨在幫助讀者對(duì)安全軟件開(kāi)發(fā)有初步的認(rèn)識(shí)。
安全軟件設(shè)計(jì)
安全軟件設(shè)計(jì)和開(kāi)發(fā)的重要組成部分包括安全設(shè)計(jì)原則、軟件組件清單、應(yīng)用程序安全性測(cè)試。
開(kāi)發(fā)以安全設(shè)計(jì)原則制定應(yīng)用程序真實(shí)性和完整性的檢驗(yàn)機(jī)制,以安全的方式進(jìn)行軟件配置,提高軟件安全。
軟件組件清單是應(yīng)用程序開(kāi)發(fā)中使用的開(kāi)源和商業(yè)軟件組件的列表。通過(guò)組件清單可以更容易地識(shí)別和管理與應(yīng)用程序使用的單個(gè)軟件組件相關(guān)的安全風(fēng)險(xiǎn),為用戶提供更大的網(wǎng)絡(luò)供應(yīng)鏈透明度。
應(yīng)用程序安全性測(cè)試可以幫助軟件開(kāi)發(fā)人員識(shí)別其應(yīng)用程序中的漏洞。在此過(guò)程中,開(kāi)發(fā)人員應(yīng)該執(zhí)行靜態(tài)應(yīng)用程序安全性測(cè)試和動(dòng)態(tài)應(yīng)用程序安全性測(cè)試,以實(shí)現(xiàn)全面的測(cè)試覆蓋。此外,軟件開(kāi)發(fā)人員可以選擇使用一個(gè)額外的獨(dú)立方來(lái)幫助消除他們?cè)跍y(cè)試自己的應(yīng)用程序時(shí)可能出現(xiàn)的潛在問(wèn)題。
安全Web應(yīng)用程序設(shè)計(jì)
軟件開(kāi)發(fā)人員可以利用Web應(yīng)用程序框架來(lái)增強(qiáng)Web應(yīng)用程序的安全性,同時(shí)減少開(kāi)發(fā)時(shí)間。
HTTPS (Hypertext Transfer Protocol Secure)是采用TLS (Transport Layer Security)加密的超文本傳輸協(xié)議。在web應(yīng)用程序中使用HTTPS可以幫助確保與web應(yīng)用程序的交互是保密的,并且還可以維護(hù)這些交互的完整性。
Web應(yīng)用程序編程接口(Application Programming Interfaces,API)可以促進(jìn)計(jì)算設(shè)備之間的數(shù)據(jù)交換。因此,軟件開(kāi)發(fā)人員應(yīng)該在開(kāi)發(fā)過(guò)程中減輕與它們使用相關(guān)的常見(jiàn)安全風(fēng)險(xiǎn),比如減少使用安全性較差的web API,這些API會(huì)促進(jìn)未經(jīng)授權(quán)的數(shù)據(jù)修改或訪問(wèn)未經(jīng)授權(quán)發(fā)布到公共領(lǐng)域的數(shù)據(jù)。當(dāng)客戶端調(diào)用web API時(shí),確??蛻舳说纳矸蒡?yàn)證和授權(quán)可以減少未經(jīng)授權(quán)的數(shù)據(jù)修改或訪問(wèn)。最后,集中記錄和分析web API的使用可以幫助檢測(cè)惡意行為,并有助于在網(wǎng)絡(luò)安全事件之后進(jìn)行調(diào)查。
Web應(yīng)用程序攻擊
結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language ,SQL)注入攻擊,通過(guò)使用動(dòng)態(tài)生成的查詢,對(duì)數(shù)據(jù)庫(kù)內(nèi)容的機(jī)密性、完整性和可用性構(gòu)成了重大威脅。
SQL注入攻擊允許惡意行為者竊取數(shù)據(jù)庫(kù)內(nèi)容、修改數(shù)據(jù)庫(kù)內(nèi)容、刪除整個(gè)數(shù)據(jù)庫(kù),甚至在某些情況下獲得對(duì)底層數(shù)據(jù)庫(kù)服務(wù)器的控制。此外,當(dāng)來(lái)自web應(yīng)用程序的數(shù)據(jù)庫(kù)查詢失敗時(shí),它們可能會(huì)顯示有關(guān)數(shù)據(jù)庫(kù)結(jié)構(gòu)的詳細(xì)錯(cuò)誤信息。這可以被惡意行為者用來(lái)進(jìn)一步定制他們的SQL注入攻擊。
Web應(yīng)用程序防護(hù)
Web應(yīng)用程序安全防護(hù)包括輸入驗(yàn)證、輸出編碼、web應(yīng)用程序防火墻、Web瀏覽器的控件防護(hù)策略和數(shù)據(jù)庫(kù)查詢集中記錄和分析。
輸入驗(yàn)證。Web應(yīng)用程序漏洞大多數(shù)是由于缺乏安全的輸入處理造成的。因此,在沒(méi)有進(jìn)行驗(yàn)證或清理的情況下,web應(yīng)用程序不信任任何輸入,如網(wǎng)站地址及其參數(shù)、超文本標(biāo)記語(yǔ)言(HTML)表單數(shù)據(jù)、cookie值或請(qǐng)求頭。驗(yàn)證和清理包括確保表單字段只包含數(shù)字,確保結(jié)構(gòu)化查詢語(yǔ)言查詢中使用的數(shù)據(jù)得到正確的清理,以及確保Unicode輸入得到適當(dāng)?shù)奶幚怼?/p>
輸出編碼。輸出編碼可以減少跨站點(diǎn)腳本和其他內(nèi)容注入攻擊的可能性。特別是,當(dāng)外部數(shù)據(jù)源輸出給用戶時(shí),輸出編碼非常有用,因?yàn)橥獠繑?shù)據(jù)源可能不受相同級(jí)別的輸入過(guò)濾的約束。最常見(jiàn)的輸出編碼示例是將潛在危險(xiǎn)的HTML字符轉(zhuǎn)換為其編碼的等效字符,例如將' < '、' > '和' & '轉(zhuǎn)換為'< '、'> '和'& '。
Web應(yīng)用程序防火墻。當(dāng)使用web應(yīng)用程序防火墻時(shí),應(yīng)注意其配置,以確保軟件開(kāi)發(fā)人員web服務(wù)器的互聯(lián)網(wǎng)協(xié)議(Internet Protocol ,IP)地址不會(huì)被惡意行為者識(shí)別,因?yàn)樵捶?wù)器IP地址的知識(shí)可以允許WAF提供的保護(hù)被繞過(guò)。
Web瀏覽器的控件防護(hù)策略。Web應(yīng)用程序可以使用基于Web瀏覽器的控件,如內(nèi)容安全策略、超文本傳輸協(xié)議嚴(yán)格傳輸安全來(lái)幫助保護(hù)自己和用戶,這是通過(guò)在web應(yīng)用程序的響應(yīng)頭中設(shè)置安全策略來(lái)實(shí)現(xiàn)的。
數(shù)據(jù)庫(kù)查詢集中記錄和分析。集中記錄和分析由用戶發(fā)起的web應(yīng)用程序?qū)?shù)據(jù)庫(kù)的所有查詢,可以幫助監(jiān)控?cái)?shù)據(jù)庫(kù)的安全狀態(tài),檢測(cè)惡意行為,并有助于網(wǎng)絡(luò)安全事件后的調(diào)查。集中記錄和分析web應(yīng)用程序崩潰和錯(cuò)誤消息可以幫助監(jiān)控web應(yīng)用程序的安全狀態(tài),檢測(cè)惡意行為并有助于調(diào)查網(wǎng)絡(luò)安全事件。
漏洞挖掘
漏洞挖掘可以幫助軟件開(kāi)發(fā)人員提高其產(chǎn)品和服務(wù)的安全性,它為安全研究人員和其他公眾成員提供了一種以協(xié)調(diào)的方式負(fù)責(zé)任地通知他們漏洞的方法。在驗(yàn)證和解決報(bào)告的漏洞后,它可以幫助軟件開(kāi)發(fā)人員通知其客戶在其產(chǎn)品和服務(wù)中發(fā)現(xiàn)的漏洞,以及應(yīng)該應(yīng)用的任何補(bǔ)丁、更新或供應(yīng)商緩解措施。
漏洞挖掘應(yīng)包括接收、核實(shí)、解決和報(bào)告內(nèi)部、外部各方披露的漏洞。軟件開(kāi)發(fā)人員在通過(guò)內(nèi)部應(yīng)用程序安全測(cè)試或外部安全研究人員識(shí)別漏洞之后,應(yīng)該確保及時(shí)報(bào)告和解決這些漏洞。在這過(guò)程中,軟件開(kāi)發(fā)人員應(yīng)該進(jìn)行根本原因分析,并盡可能地尋求修復(fù)整個(gè)漏洞類(lèi)。如果軟件開(kāi)發(fā)人員不能通過(guò)補(bǔ)丁或更新及時(shí)解決漏洞,軟件開(kāi)發(fā)人員應(yīng)該就如何盡可能減少漏洞被利用的可能性、減少漏洞被利用的影響或兩者兼而有之提供建議。
小 結(jié)
本文主要從安全軟件設(shè)計(jì)、安全Web應(yīng)用程序設(shè)計(jì)、Web應(yīng)用程序攻擊、Web應(yīng)用程序防護(hù)和漏洞挖掘五個(gè)方面從軟件設(shè)計(jì)、攻擊于防護(hù)等方面展開(kāi)對(duì)安全軟件開(kāi)發(fā)的分析,期望可以對(duì)想要初步了解安全軟件開(kāi)發(fā)的讀者有所幫助。
參考文獻(xiàn)
[1] Australian Signals Directorate. Information Security Manual [EB/OL]. June, 2024. https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/ism.