應用軟件安全編程分析
時間:2022-01-19 03:40:28
導語:應用軟件安全編程分析一文來源于網友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:應用軟件在編程實現時往往對功能和性能考慮得比較全面,但是對軟件的安全性考慮明顯不足。文章介紹了應用軟件在編程方面存在的常見安全問題和改進的措施。
關鍵詞:應用軟件;安全編程
隨著軟件工程不斷發(fā)展,開發(fā)出滿足功能和性能要求的應用軟件正變得越來越容易。但是,在網絡安全形勢日趨嚴峻的今天,要開發(fā)出安全性足夠高的應用軟件已不是一件易事。本文介紹了應用軟件在編程方面存在的常見安全問題和改進措施。
應用軟件安全編程顧名思義就是指在應用軟件編碼時充分考慮到安全性需求或要求,從而達到提升應用軟件安全性的目標。為了提高軟件開發(fā)人員的安全開發(fā)能力,國內有關機構推出了注冊信息安全開發(fā)人員(CISD)、注冊軟件安全專業(yè)人員(CWASPCSSP)、注冊軟件安全開發(fā)人員(CWASPCSSD)等培訓認證。
2應用軟件編程常見安全問題
(1)身份鑒別方面在身份鑒別方面,通常容易忽視的一些問題主要有:沒有對鑒別失敗的次數進行限制;執(zhí)行重要或者不可逆操作之前沒有再次進行身份鑒別;一次身份鑒別后進行長時間的通話,沒有周期性重新進行身份鑒別;身份鑒別過程可能會被繞過;依賴不可靠信息進行身份鑒別;驗證數字證書不全面;處理身份鑒別的過程中泄露多余信息。(2)口令安全方面在口令安全方面,主要存在的一些問題主要有:雖然采用了強口令,但是口令的復雜度不滿足安全策略要求;對于默認的初始口令,沒有強制用戶第一次登錄時更改默認口令;對于一些關鍵核心系統(tǒng)沒有做到要求定期更改口令;在源代碼中寫入口令;在不安全環(huán)境中進行口令傳輸。(3)日志安全方面在日志安全方面,主要存在的一些問題主要有:未能實現日志文件的安全存儲;有些重要安全事件未能記入日志;未能做到日志記錄的異常捕獲處理;對日志中的特殊元素沒有進行過濾和驗證。(4)數據保護方面在數據保護方面,主要存在的一些問題有:未對敏感數據做到加密存儲和傳輸;未對重要數據完整性檢查;在錯誤消息、調試信息等中含有敏感數據;在客戶端保存敏感數據;Web登錄表單使用瀏覽器的全自動填充功能。(5)輸入驗證方面在輸入驗證方面,主要存在的一些問題有:驗證輸入數據的安全性時沒有全覆蓋;部分容易受到惡意攻擊的場景下未做好數據驗證;對輸入數據驗證前缺少過濾或標準化處理;關鍵業(yè)務操作的輸入數據未驗證數據發(fā)送方的數字簽名。(6)輸出凈化方面在輸出凈化方面,主要存在的一些問題有:未對所有字符進行編碼;編碼規(guī)則沒有參考有關標準;有些含有危險字符的命令沒有進行語義凈化;將URL重定向到不可信站點。
3應用軟件編程常見安全問題的改進措施
(1)身份鑒別方面針對沒有對鑒別失敗的次數進行限制的問題,可以設定同一用戶進行身份鑒別的頻率和次數,設定鑒別失敗次數的閾值,當鑒別失敗次數達到閾值時對用戶進行鎖定,以防止暴力破解。針對執(zhí)行重要或者不可逆操作之前沒有再次進行身份鑒別的問題,可以梳理出重要或者不可逆操作清單,這些操作確認之前要再次進行身份鑒別,以減少不安全會話帶來損失。針對一次身份鑒別后進行長時間的通話,沒有周期性重新進行身份鑒別的問題,可以周期性進行身份鑒別,確保權限沒有發(fā)生改變。如果發(fā)生改變,必須強制注銷用戶,重新進行身份鑒別。針對身份鑒別過程可能會被繞過的問題,嚴格控制用戶訪問系統(tǒng)的可選通道,確保用戶只能通過指定通道訪問系統(tǒng)。針對依賴不可靠信息進行身份鑒別的問題,要避免依賴不可靠信息進行身份鑒別,比如避免信任cookie中的數據、避免依賴反向DomainNameSystem解析獲取的主機信息等等。針對驗證數字證書不全面的問題,應該檢查數字證書的狀態(tài)和持有者,數字證書的狀態(tài)必須是有效的而且未過期的,數字證書的實際持有者要和證書中聲明的持有者一致。針對處理身份鑒別的過程中泄露多余信息的問題,做到處理任何一個認證請求所費時間一致,避免攻擊者根據登錄失敗的時間來判斷登錄是否成功,安全處理失敗的認證,確保鑒別反饋的信息中沒有敏感數據。(2)口令安全方面針對口令的復雜度不滿足安全策略要求的問題,可以設定滿足安全策略要求的口令復雜度,對口令的組成、長度等做出具體的要求。針對初始口令為默認時沒有強制用戶第一次登錄時更改口令的問題,可以采取強制用戶第一次登錄時更改默認口令或者隨機生成用戶的初始密碼方式。針對一些關鍵核心系統(tǒng)沒有做到定期更改口令的問題,可以結合安全策略要求設定口令的更改周期,強制定期更改口令。針對在源代碼中寫入口令的問題,必須做到不在源代碼中出現口令,將加密后的口令存儲在相關配置文件、Database或者其他外部數據源中。針對在不安全環(huán)境中進行口令傳輸的問題,首先要做到不允許明文傳遞口令,其次對于諸如Http、Ftp、POP等傳統(tǒng)協(xié)議,必須要在使用安全傳輸協(xié)議的情況下才能傳輸口令。(3)日志安全方面針對未能實現日志文件的安全存儲的問題,可以將日志文件單獨存儲于應用程序目錄外,采取嚴格的訪問控制措施確保日志文件的安全;針對有些重要安全事件未能記入日志的問題,做到系統(tǒng)發(fā)生重要安全事件創(chuàng)建日志,特別是一些失敗的認證嘗試、失敗的訪問控制、已過期的會話令牌嘗試等。針對未能做到日志記錄的異常捕獲處理的問題,做到對日志記錄進行完善的異常捕獲處理,實現哪怕日志記錄過程出現異常,日志記錄仍然可以繼續(xù)正確地執(zhí)行。針對日志中的特殊元素沒有進行過濾和驗證的問題,做到對日志中的特殊元素進行過濾和驗證,實現日志中的不可信數據不會在界面查看時或者運行軟件時以代碼的形式被執(zhí)行。(4)數據保護方面針對未對敏感數據做到加密存儲和傳輸的問題,做到明確應用軟件中敏感數據的范圍,對敏感數據加密存儲和傳輸;針對未對重要數據完整性檢查的問題,做到對重要數據開展完整性檢查;針對在錯誤消息、調試信息等中含有敏感數據的問題,做到避免在錯誤消息、調試信息中含有敏感數據;針對在客戶端保存敏感數據的問題,做到不允許在客戶端保存敏感數據;針對Web登錄表單使用瀏覽器的口令自動填充的問題,禁止瀏覽器的口令自動填充功能。(5)輸入驗證方面針對驗證輸入數據的安全性時沒有全覆蓋的問題,做到對所有輸入數據進行安全驗證,檢測輸入數據的數據類型、長度(最大和最小長度)、值(最大值和最小值);針對部分容易受到惡意攻擊的場景下未做好數據驗證的問題,重點關注Http請求,防止惡意數據通過表單域、Coookie、URL參數以及URL自身傳入;重點關注來自重定向輸入的數據,防止惡意攻擊者避開有關驗證向重定向目標直接提交惡意代碼;針對輸入數據驗證前缺少過濾或標準化處理的問題,做到在對輸入數據進行驗證前先進行過濾或標準化處理;針對關鍵業(yè)務操作的輸入數據未驗證數據發(fā)送方的數字簽名的問題,做到對關鍵業(yè)務操作的輸入數據,驗證數據的真實性和完整性,通過數據發(fā)送方的數字簽名確認其身份。(6)輸出凈化方面針對未對所有字符進行編碼的問題,做到除目標編譯器安全外,對所有字符進行編碼;針對編碼規(guī)則沒有參考有關標準的問題,做到在制定編碼規(guī)則時參考國際國內行業(yè)標準,結合實際情況;針對有些含有危險字符的命令沒有進行語義凈化的問題,重點關注SQL、XML、LDAP查詢語句、操作系統(tǒng)命令,對其進行語義凈化;針對將URL重定向到不可信站點的問題,做到不允許將URL重定向到用戶可控的不可信站點。
4結語
應用軟件的安全性沒有最好,只有更好。應用軟件的安全性只有起點,沒有終點。只要我們在包括編程實現在內的軟件全生命周期內都充分考慮并且高度重視安全性需求或要求,應用軟件的安全性就會不斷得到提升。
參考文獻:
[1]王磊,張玉清,王力.安全編程研究[J].計算機應用研究,2004(09):130-133.
[2]陳金茹.計算機軟件安全問題的防范措施:[J].電子技術與軟件工程,2019(19):196-197.
[3]朱泓鑫.計算機軟件安全與防護[J].電子技術與軟件工程,2019(09):212.
[4]梁利亭.計算機軟件安全及防護對策[J].信息技術與信息化,2020(01):215-217.
作者:甘清云 單位:中國直升機設計研究所