王偉萌,劉承亮,朱韋橋,蘇 倫
(中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081)
隨著軟件技術的發(fā)展及企業(yè)信息化的推進,企業(yè)內應用軟件業(yè)務不斷擴展,軟件功能層出不窮,大幅度提高了企業(yè)的生產效率。同時,企業(yè)應用軟件所面臨的安全挑戰(zhàn)也日益嚴峻,除了軟件在設計開發(fā)過程中產生的自身程序缺陷外,外部黑客的攻擊和破壞不斷增加。企業(yè)應用軟件安全漏洞一旦被利用,將導致嚴重甚至是災難性的后果。因此,需要構建、完善應用軟件開發(fā)安全體系,應對企業(yè)應用軟件的安全問題。目前,應用軟件開發(fā)安全體系不夠全面,而且構筑的體系多針對特定平臺。本文針對相關問題,為企業(yè)應用軟件構建安全體系框架并在框架下提出安全技術要求,旨在從內容全面性、平臺普適性兩方面完善當前應用軟件開發(fā)安全體系。
1.1.1 漏洞檢測技術
Sajjad R[1]等人分析2002~2015 年研發(fā)出的應用軟件漏洞檢測工具對于應用軟件安全性防護的實際有效性,有些工具和檢測機制延用至今都是主流技術,包括輸入參數分析、漏洞掃描、靜態(tài)分析、運行檢查、入侵檢測、Sec-SIP 框架、SQL Injection Gen、Safer XSS 等。在移動應用中也通過滲透測試技術[2]檢測應用軟件漏洞。通過漏洞檢測技術可以梳理出用于面對惡意攻擊的防范風險點,為制定有效防范人為攻擊的安全技術要求提供框架基礎。
1.1.2 漏洞防御技術
研究漏洞防御技術為防御惡意攻擊提供了具體的安全技術要求。防火墻技術、訪問控制技術、身份認證技術、數據加密技術、規(guī)則過濾技術、安全審計技術等提供了保障應用軟件安全的措施。Mitropoulos D[3]等人針對41 種防御技術的準確性、性能進行了分析,搭建試驗模型,分析、判斷出一些防御機制可以被攻擊繞過的技術,幫助本文在安全技術要求選擇上排除防御機制效果差的方法。
GB/T 22239—2019《信息安全技術 網絡安全等級保護基本要求》[4]作為構建應用軟件開發(fā)安全體系的主要依據,主要從技術要求和管理要求兩方面對應用軟件安全保障體系進行了規(guī)范。其中,技術要求包含物理環(huán)境、通信網絡、區(qū)域邊界、計算環(huán)境、管理中心,且通過計算環(huán)境提供了包括身份鑒別、訪問控制、安全審計、入侵防范、惡意代碼防范、數據完整性保密性、信息保護等安全要求,為應用軟件開發(fā)安全體系中應用安全、數據安全的安全風險和安全防護手段提供參考。
另外,標準中管理要求從制度管理、機構管理、人員管理、建設管理、運維管理進行約束。建設管理與運維管理包括軟件開發(fā)管理、漏洞和風險管理、網絡和系統(tǒng)安全管理、惡意代碼防范管理等,提供了應用軟件開發(fā)安全體系中過程管理安全的內容參考。
GB/T 28452—2012《信息安全技術 應用軟件系統(tǒng)通用安全技術要求》[5]明確了應用軟件在設計與實現(xiàn)過程中的安全技術要求,從應用軟件生存周期管理要求及應用軟件系統(tǒng)安全技術要求兩方面構建應用軟件的安全框架,如圖1 所示。
圖1 應用軟件系統(tǒng)通用安全技術要求框架
標準中的生存周期安全管理要求包括應用軟件設計(開始階段)、開發(fā)過程(獲得或開發(fā)階段)、測試(實現(xiàn)和評估階段)、運行維護(運行和維護階段)等階段的管理要求,提供了過程管理安全的內容參考。
系統(tǒng)安全技術要求包括安全功能技術要求(安全功能)及安全保證技術要求(安全保證),其中,安全功能提供了用戶身份鑒別、抗抵賴、訪問控制、安全審計、數據完整性保護、數據保密性保護、備份與恢復等技術要求。
企業(yè)應用軟件開發(fā)安全體系建立在專家學者對應用軟件開發(fā)安全研究的基礎上,同時參考國家標準中涉及應用軟件安全功能設計及安全管理的要求,結合企業(yè)應用軟件開發(fā)流程,按照開發(fā)生命周期過程,豐富體系內容。企業(yè)應用軟件開發(fā)安全體系結構,如圖2 所示。
2.1.1 架構安全設計
2.1.1.1 架構安全
對應用軟件架構及其傳輸協(xié)議、服務端口、組件等的安全規(guī)范描述。(1)傳輸命令和數據所采用通信協(xié)議根據組件之間通信內容安全性程度選擇不同安全性要求協(xié)議;(2)建立對于組件資源的訪問控制機制;(3)不使用常見的不安全服務端口;(4)對組件內部的配置文件、用戶數據進行加密存儲。
2.1.1.2 與外接口安全
圖2 企業(yè)應用軟件開發(fā)安全體系
應用軟件對外開放的接口進行應用范圍、身份驗證、訪問控制等。(1)限制對外開放接口的應用范圍;(2)對允許接入的系統(tǒng)進行唯一性標識;(3)對請求連接的系統(tǒng)進行身份驗證;(4)采用校驗技術對對外接口傳輸的數據進行合法性檢驗;(5)建立系統(tǒng)之間資源的訪問控制機制;(6)限制同一時間內并發(fā)訪問的接口數[6]。
2.1.2 功能安全設計
2.1.2.1 身份鑒別
對應用軟件身份鑒別中的標識、口令、失敗處理、二次鑒別等內容進行安全規(guī)范描述。(1)用戶登錄、后臺管理系統(tǒng)登錄應進行身份鑒別;(2)保證用戶身份標識的唯一性;(3)提供一定的口令復雜度校驗功能;(4)為用戶創(chuàng)建獨立且滿足復雜度要求的初始口令,要求新建用戶首次登錄系統(tǒng)修改初始口令;(5)提供身份驗證失敗處理功能,連續(xù)登錄失敗應鎖定賬號;(6)認證失敗后,應提供一般性的提示。
同時,對于涉及重要業(yè)務或涉及企業(yè)重要數據的應用軟件。(1)登錄時采用2 種或2 種以上的鑒別技術對用戶進行身份鑒別;(2)要求用戶定期修改口令。
2.1.2.2 訪問控制
應用軟件具備業(yè)務、功能、數據的安全訪問策略。(1)制定業(yè)務、功能、數據等對象的訪問權限策略,遵循最小權限原則;(2)授權和用戶角色數據存放在服務器端,鑒權處理應在服務器端完成。
2.1.2.3 數據輸入
應用軟件針對數據輸入的校驗和限制。(1)對所有用戶產生的輸入進行校驗,提供數據格式和長度有效性校驗功能;(2)使用服務端代碼對輸入數據進行最終校驗;(3)上傳文檔前進行身份鑒別;(4)驗證文件類型,僅允許上傳滿足業(yè)務需要的相關文件類型;(5)除驗證文件類型擴展名外,還需至少檢查文件報頭中的類型信息;(6)訪問上傳的文件之前,進行惡意代碼的掃描,校驗文件完整性。
2.1.2.4 信息輸出
應用軟件對輸出內容的過濾和檢查。(1)不輸出內部信息,不在出錯消息中暴露包括函數名及調試信息等應用軟件內部的敏感信息;(2)禁止返回與業(yè)務無關的信息;(3)涉及文件下載時不通過路徑遍歷方法下載敏感文件。
2.1.2.5 數據加密
(1)對敏感數據進行加密;(2)在服務器端加密存儲敏感數據。
2.1.2.6 數據保護
(1)不在代碼中存儲敏感數據;(2)不在日志中記錄明文的敏感數據;(3)保證業(yè)務重要數據和敏感數據在文件系統(tǒng)、數據庫中存儲的保密性;(4)保證業(yè)務重要數據和敏感數據在傳輸過程中的完整性及保密性。
2.1.2.7 數據備份和恢復
提供對新增數據進行備份的功能,并提供備份數據恢復的功能。
2.1.2.8 安全審計
(1)對應用軟件系統(tǒng)重要事件提供安全審計機制;(2)嚴格限制對安全日志的訪問;(3)安全日志設置有備份及清理機制。
2.1.2.9 抗抵賴
業(yè)務操作的不可抵賴性。(1)采用技術手段實現(xiàn)業(yè)務操作的不可抵賴性;(2)證據信息應存儲在安全和信任的環(huán)境。
2.1.2.10 資源控制
(1)設定服務和資源的優(yōu)先級;(2)提供服務或用戶優(yōu)先級設定功能,設定請求進程或訪問賬號的優(yōu)先級,根據優(yōu)先級分配系統(tǒng)資源;(3)對資源的訪問設定時間限制、非法訪問者檢測和關閉的時間間隔。
2.1.3 資源使用設計
2.1.3.1 會話管理
規(guī)定會話的存儲、超時、清除、連接數等。(1)在用戶登錄后應創(chuàng)建新的會話,會話數據應存儲在服務器端;(2)會話設置超時時間,當空閑時間超過設定時間服務端應自動終止會話;(3)當用戶注銷或退出客戶端時,必須清除該用戶的會話信息;(4)對最大并發(fā)會話連接數進行限制。
2.1.3.2 資源管理
(1)確保系統(tǒng)中的資源都有唯一標識符;(2)使用重要資源前進行初始化,初始化失敗后安全退出程序;(3)及時釋放系統(tǒng)資源;確保釋放資源前完全清除敏感信息;(4)對分配的資源數量、使用權限、有效時間做限制,防止消耗過多資源;(5)執(zhí)行迭代或循環(huán)時限制循環(huán)執(zhí)行的次數。
2.1.3.3 內存管理
規(guī)范內存的分配、釋放、緩沖區(qū)。(1)保持一致的內存管理原則,使用相同模式分配和釋放內存;(2)對緩沖區(qū)的讀寫操作進行邊界檢查,避免向指定的緩沖區(qū)外讀取或者寫入數據;(3)字符串操作時,檢查字符串長度和終止符,保證字符串的存儲具有足夠的空間容納字符數據和終止符。
2.1.3.4 數據庫管理
(1)當訪問數據庫時,禁止使用默認的角色、賬號與默認數據庫口令訪問數據庫,數據庫賬號權限應遵循最小權限原則;(2)數據庫連接字符串或密碼應加密存儲;(3)規(guī)定不同信任級別用戶連接數據庫的角色;(4)及時釋放數據庫資源。
2.1.3.5 文件管理
規(guī)范對文件操作進行身份識別、對目錄進行安全限制、及時釋放等。(1)采用最小權限原則進行文件訪問授權;(2)禁止暴露目錄或絕對文件路徑;(3)禁止用戶修改應用程序文件和資源,權限僅限于可讀。
2.1.4 通信安全設計
應用軟件采用安全通信協(xié)議對數據進行安全傳輸:WWW 服務建議使用HTTPS 協(xié)議;FTP 服務建議使用SFTP 協(xié)議;Telnet 建議使用SSH 協(xié)議;使用加密傳輸確保通信安全。應用軟件對通信過程中的整個報文或會話過程加密;對信道中傳輸的消息進行完整性驗證。
2.2.1 基本安全要求
2.2.1.1 代碼安全
(1)規(guī)范變量、函數命名及代碼格式;(2)使用第三方代碼,對代碼安全性進行評估和測試;(3)對代碼進行版本控制;(4)對代碼的訪問權限進行控制。
2.2.1.2 代碼注釋
(1)注釋代碼中無用的語句;(2)注釋信息中不包含物理路徑信息、數據庫連接信息、SQL 語句;(3)靜態(tài)頁面的注釋信息禁止包含源代碼信息;(4)動態(tài)頁面使用隱藏注釋。
2.2.1.3 并發(fā)安全
(1)確保全局變量、線程間的共享數據線程安全;(2)處于阻塞狀態(tài)的任務和線程確保能夠終止;(3)使用線程池來處理請求;(4)確保提交至線程池的任務可被中斷;(5)及時釋放線程專有對象。
2.2.1.4 函數調用
(1)代碼應對函數入口參數的合法性和準確性進行檢查;(2)避免在API 或與外部交互的接口暴露僅限內部或部分用戶訪問的方法或函數[7]。
2.2.1.5 異常處理
(1)異常出現(xiàn)返回一般性錯誤提示;(2)異常處理時及時回收并釋放系統(tǒng)資源;(3)捕獲異常應在日志中詳細記錄。
2.2.1.6 指針安全
(1)指針使用過程中確保指針的有效性;(2)指針使用過程中檢查內存分配大小,避免產生溢出;(3)檢查數組索引避免產生溢出;(4)循環(huán)中調用函數時檢查緩存大小;(5)當方法結束清空所分配內存。
2.2.1.7 配置管理
(1)配置管理由授權人員進行,禁止使用遠程配置管理,對操作進行審計;(2)服務器、框架、系統(tǒng)部件采用最新版本,安裝更新補??;(3)配置文件不得明文存儲;(4)關閉服務器目錄列表功能。
2.2.1.8 代碼生成安全
(1)檢查編譯過程中依賴庫的版本,檢查編譯命令的宏定義沖突;(2)編譯生成的結果文件保存在獨立于源代碼的路徑中。
2.2.2 防惡意攻擊
2.2.2.1 防SQL 注入
(1)不直接通過用戶輸入字符串構造可執(zhí)行SQL 語句;(2)使用參數化查詢或參數綁定來構造SQL 語句[8];(3)不在存儲過程內使用字符串連接構造SQL 語句,執(zhí)行不可信的參數。
2.2.2.2 防跨站腳本代碼(XSS)
(1)對輸入的危險特殊字符數據進行過濾和轉義;(2)對所有基于頁面的輸入進行驗證,未經驗證不對輸入進行回顯;(3)對于其他業(yè)務系統(tǒng)生成的未經本應用軟件驗證的表數據或文件數據, 輸出到客戶端前進行HTML 編碼[9]。
2.2.2.3 防跨站請求偽造(CSRF)
(1)應用軟件對客戶端提交的表單請求進行合法性校驗;(2)對HTTP 請求頭Referer 做驗證。
2.3.1 第三方軟件使用安全
(1)從官方渠道獲取第三方軟件,所有組件及時升級到不存在已知高危漏洞的版本;(2)對第三方軟件進行完整性驗證測試,確保未被篡改;(3)定期對第三方軟件進行安全性檢測,避免使用已知存在高危漏洞的組件版本[10]。
2.3.2 開發(fā)環(huán)境安全
(1)構建安全的編譯環(huán)境,從官方渠道獲取編譯器,確保安裝了所有補??;(2)安全存儲源代碼,權限控制保護源代碼不被非法用戶訪問;(3)確保開發(fā)環(huán)境與實際運行環(huán)境的物理隔離。
2.3.3 運行環(huán)境安全
(1)應用軟件發(fā)布前刪除所有與調試和測試相關的代碼、配置、文件等;(2)及時刪除服務器上不需要的應用程序和系統(tǒng)文檔;(3)關閉服務器上不需要的服務;(4)軟件運行服務器的系統(tǒng)組件避免使用存在已知漏洞的組件版本。
2.3.4 歸檔管理
(1)版本歸檔時,刪除開發(fā)過程中的臨時文件、備份文件、無用目錄等;(2)歸檔的程序文件中不保留調試用的代碼。
通過本研究建立了一個比較完善的企業(yè)應用軟件安全體系,滿足應用軟件設計、開發(fā)過程中的安全保障要求,能夠為企業(yè)及員工信息提供安全屏障。隨著黑客技術的發(fā)展,針對企業(yè)應用軟件的攻擊手段不斷升級,今后需繼續(xù)研究和完善企業(yè)應用軟件安全體系,及時發(fā)現(xiàn)安全問題,提供安全手段。此外,企業(yè)中應用軟件根據涉及的業(yè)務或所涉及數據的重要性的不同,參照安全要求也應有不同針對性,如涉及轉賬付款、支付收款業(yè)務邏輯的應用應重點關注未授權訪問、越權訪問;涉及用戶命令執(zhí)行、用戶上傳代碼執(zhí)行功能應關注命令注入;涉及短信、電話、郵件通知功能應關注應用軟件設計邏輯錯誤。針對重要、特定的應用,就需要制定更嚴格的技術手段要求。