王偉萌,劉承亮,朱韋橋,蘇 倫
(中國鐵道科學(xué)研究院集團(tuán)有限公司 電子計(jì)算技術(shù)研究所,北京 100081)
隨著軟件技術(shù)的發(fā)展及企業(yè)信息化的推進(jìn),企業(yè)內(nèi)應(yīng)用軟件業(yè)務(wù)不斷擴(kuò)展,軟件功能層出不窮,大幅度提高了企業(yè)的生產(chǎn)效率。同時(shí),企業(yè)應(yīng)用軟件所面臨的安全挑戰(zhàn)也日益嚴(yán)峻,除了軟件在設(shè)計(jì)開發(fā)過程中產(chǎn)生的自身程序缺陷外,外部黑客的攻擊和破壞不斷增加。企業(yè)應(yīng)用軟件安全漏洞一旦被利用,將導(dǎo)致嚴(yán)重甚至是災(zāi)難性的后果。因此,需要構(gòu)建、完善應(yīng)用軟件開發(fā)安全體系,應(yīng)對企業(yè)應(yīng)用軟件的安全問題。目前,應(yīng)用軟件開發(fā)安全體系不夠全面,而且構(gòu)筑的體系多針對特定平臺。本文針對相關(guān)問題,為企業(yè)應(yīng)用軟件構(gòu)建安全體系框架并在框架下提出安全技術(shù)要求,旨在從內(nèi)容全面性、平臺普適性兩方面完善當(dāng)前應(yīng)用軟件開發(fā)安全體系。
1.1.1 漏洞檢測技術(shù)
Sajjad R[1]等人分析2002~2015 年研發(fā)出的應(yīng)用軟件漏洞檢測工具對于應(yīng)用軟件安全性防護(hù)的實(shí)際有效性,有些工具和檢測機(jī)制延用至今都是主流技術(shù),包括輸入?yún)?shù)分析、漏洞掃描、靜態(tài)分析、運(yùn)行檢查、入侵檢測、Sec-SIP 框架、SQL Injection Gen、Safer XSS 等。在移動(dòng)應(yīng)用中也通過滲透測試技術(shù)[2]檢測應(yīng)用軟件漏洞。通過漏洞檢測技術(shù)可以梳理出用于面對惡意攻擊的防范風(fēng)險(xiǎn)點(diǎn),為制定有效防范人為攻擊的安全技術(shù)要求提供框架基礎(chǔ)。
1.1.2 漏洞防御技術(shù)
研究漏洞防御技術(shù)為防御惡意攻擊提供了具體的安全技術(shù)要求。防火墻技術(shù)、訪問控制技術(shù)、身份認(rèn)證技術(shù)、數(shù)據(jù)加密技術(shù)、規(guī)則過濾技術(shù)、安全審計(jì)技術(shù)等提供了保障應(yīng)用軟件安全的措施。Mitropoulos D[3]等人針對41 種防御技術(shù)的準(zhǔn)確性、性能進(jìn)行了分析,搭建試驗(yàn)?zāi)P停治觥⑴袛喑鲆恍┓烙鶛C(jī)制可以被攻擊繞過的技術(shù),幫助本文在安全技術(shù)要求選擇上排除防御機(jī)制效果差的方法。
GB/T 22239—2019《信息安全技術(shù) 網(wǎng)絡(luò)安全等級保護(hù)基本要求》[4]作為構(gòu)建應(yīng)用軟件開發(fā)安全體系的主要依據(jù),主要從技術(shù)要求和管理要求兩方面對應(yīng)用軟件安全保障體系進(jìn)行了規(guī)范。其中,技術(shù)要求包含物理環(huán)境、通信網(wǎng)絡(luò)、區(qū)域邊界、計(jì)算環(huán)境、管理中心,且通過計(jì)算環(huán)境提供了包括身份鑒別、訪問控制、安全審計(jì)、入侵防范、惡意代碼防范、數(shù)據(jù)完整性保密性、信息保護(hù)等安全要求,為應(yīng)用軟件開發(fā)安全體系中應(yīng)用安全、數(shù)據(jù)安全的安全風(fēng)險(xiǎn)和安全防護(hù)手段提供參考。
另外,標(biāo)準(zhǔn)中管理要求從制度管理、機(jī)構(gòu)管理、人員管理、建設(shè)管理、運(yùn)維管理進(jìn)行約束。建設(shè)管理與運(yùn)維管理包括軟件開發(fā)管理、漏洞和風(fēng)險(xiǎn)管理、網(wǎng)絡(luò)和系統(tǒng)安全管理、惡意代碼防范管理等,提供了應(yīng)用軟件開發(fā)安全體系中過程管理安全的內(nèi)容參考。
GB/T 28452—2012《信息安全技術(shù) 應(yīng)用軟件系統(tǒng)通用安全技術(shù)要求》[5]明確了應(yīng)用軟件在設(shè)計(jì)與實(shí)現(xiàn)過程中的安全技術(shù)要求,從應(yīng)用軟件生存周期管理要求及應(yīng)用軟件系統(tǒng)安全技術(shù)要求兩方面構(gòu)建應(yīng)用軟件的安全框架,如圖1 所示。

圖1 應(yīng)用軟件系統(tǒng)通用安全技術(shù)要求框架
標(biāo)準(zhǔn)中的生存周期安全管理要求包括應(yīng)用軟件設(shè)計(jì)(開始階段)、開發(fā)過程(獲得或開發(fā)階段)、測試(實(shí)現(xiàn)和評估階段)、運(yùn)行維護(hù)(運(yùn)行和維護(hù)階段)等階段的管理要求,提供了過程管理安全的內(nèi)容參考。
系統(tǒng)安全技術(shù)要求包括安全功能技術(shù)要求(安全功能)及安全保證技術(shù)要求(安全保證),其中,安全功能提供了用戶身份鑒別、抗抵賴、訪問控制、安全審計(jì)、數(shù)據(jù)完整性保護(hù)、數(shù)據(jù)保密性保護(hù)、備份與恢復(fù)等技術(shù)要求。
企業(yè)應(yīng)用軟件開發(fā)安全體系建立在專家學(xué)者對應(yīng)用軟件開發(fā)安全研究的基礎(chǔ)上,同時(shí)參考國家標(biāo)準(zhǔn)中涉及應(yīng)用軟件安全功能設(shè)計(jì)及安全管理的要求,結(jié)合企業(yè)應(yīng)用軟件開發(fā)流程,按照開發(fā)生命周期過程,豐富體系內(nèi)容。企業(yè)應(yīng)用軟件開發(fā)安全體系結(jié)構(gòu),如圖2 所示。
2.1.1 架構(gòu)安全設(shè)計(jì)
2.1.1.1 架構(gòu)安全
對應(yīng)用軟件架構(gòu)及其傳輸協(xié)議、服務(wù)端口、組件等的安全規(guī)范描述。(1)傳輸命令和數(shù)據(jù)所采用通信協(xié)議根據(jù)組件之間通信內(nèi)容安全性程度選擇不同安全性要求協(xié)議;(2)建立對于組件資源的訪問控制機(jī)制;(3)不使用常見的不安全服務(wù)端口;(4)對組件內(nèi)部的配置文件、用戶數(shù)據(jù)進(jìn)行加密存儲。
2.1.1.2 與外接口安全

圖2 企業(yè)應(yīng)用軟件開發(fā)安全體系
應(yīng)用軟件對外開放的接口進(jìn)行應(yīng)用范圍、身份驗(yàn)證、訪問控制等。(1)限制對外開放接口的應(yīng)用范圍;(2)對允許接入的系統(tǒng)進(jìn)行唯一性標(biāo)識;(3)對請求連接的系統(tǒng)進(jìn)行身份驗(yàn)證;(4)采用校驗(yàn)技術(shù)對對外接口傳輸?shù)臄?shù)據(jù)進(jìn)行合法性檢驗(yàn);(5)建立系統(tǒng)之間資源的訪問控制機(jī)制;(6)限制同一時(shí)間內(nèi)并發(fā)訪問的接口數(shù)[6]。
2.1.2 功能安全設(shè)計(jì)
2.1.2.1 身份鑒別
對應(yīng)用軟件身份鑒別中的標(biāo)識、口令、失敗處理、二次鑒別等內(nèi)容進(jìn)行安全規(guī)范描述。(1)用戶登錄、后臺管理系統(tǒng)登錄應(yīng)進(jìn)行身份鑒別;(2)保證用戶身份標(biāo)識的唯一性;(3)提供一定的口令復(fù)雜度校驗(yàn)功能;(4)為用戶創(chuàng)建獨(dú)立且滿足復(fù)雜度要求的初始口令,要求新建用戶首次登錄系統(tǒng)修改初始口令;(5)提供身份驗(yàn)證失敗處理功能,連續(xù)登錄失敗應(yīng)鎖定賬號;(6)認(rèn)證失敗后,應(yīng)提供一般性的提示。
同時(shí),對于涉及重要業(yè)務(wù)或涉及企業(yè)重要數(shù)據(jù)的應(yīng)用軟件。(1)登錄時(shí)采用2 種或2 種以上的鑒別技術(shù)對用戶進(jìn)行身份鑒別;(2)要求用戶定期修改口令。
2.1.2.2 訪問控制
應(yīng)用軟件具備業(yè)務(wù)、功能、數(shù)據(jù)的安全訪問策略。(1)制定業(yè)務(wù)、功能、數(shù)據(jù)等對象的訪問權(quán)限策略,遵循最小權(quán)限原則;(2)授權(quán)和用戶角色數(shù)據(jù)存放在服務(wù)器端,鑒權(quán)處理應(yīng)在服務(wù)器端完成。
2.1.2.3 數(shù)據(jù)輸入
應(yīng)用軟件針對數(shù)據(jù)輸入的校驗(yàn)和限制。(1)對所有用戶產(chǎn)生的輸入進(jìn)行校驗(yàn),提供數(shù)據(jù)格式和長度有效性校驗(yàn)功能;(2)使用服務(wù)端代碼對輸入數(shù)據(jù)進(jìn)行最終校驗(yàn);(3)上傳文檔前進(jìn)行身份鑒別;(4)驗(yàn)證文件類型,僅允許上傳滿足業(yè)務(wù)需要的相關(guān)文件類型;(5)除驗(yàn)證文件類型擴(kuò)展名外,還需至少檢查文件報(bào)頭中的類型信息;(6)訪問上傳的文件之前,進(jìn)行惡意代碼的掃描,校驗(yàn)文件完整性。
2.1.2.4 信息輸出
應(yīng)用軟件對輸出內(nèi)容的過濾和檢查。(1)不輸出內(nèi)部信息,不在出錯(cuò)消息中暴露包括函數(shù)名及調(diào)試信息等應(yīng)用軟件內(nèi)部的敏感信息;(2)禁止返回與業(yè)務(wù)無關(guān)的信息;(3)涉及文件下載時(shí)不通過路徑遍歷方法下載敏感文件。
2.1.2.5 數(shù)據(jù)加密
(1)對敏感數(shù)據(jù)進(jìn)行加密;(2)在服務(wù)器端加密存儲敏感數(shù)據(jù)。
2.1.2.6 數(shù)據(jù)保護(hù)
(1)不在代碼中存儲敏感數(shù)據(jù);(2)不在日志中記錄明文的敏感數(shù)據(jù);(3)保證業(yè)務(wù)重要數(shù)據(jù)和敏感數(shù)據(jù)在文件系統(tǒng)、數(shù)據(jù)庫中存儲的保密性;(4)保證業(yè)務(wù)重要數(shù)據(jù)和敏感數(shù)據(jù)在傳輸過程中的完整性及保密性。
2.1.2.7 數(shù)據(jù)備份和恢復(fù)
提供對新增數(shù)據(jù)進(jìn)行備份的功能,并提供備份數(shù)據(jù)恢復(fù)的功能。
2.1.2.8 安全審計(jì)
(1)對應(yīng)用軟件系統(tǒng)重要事件提供安全審計(jì)機(jī)制;(2)嚴(yán)格限制對安全日志的訪問;(3)安全日志設(shè)置有備份及清理機(jī)制。
2.1.2.9 抗抵賴
業(yè)務(wù)操作的不可抵賴性。(1)采用技術(shù)手段實(shí)現(xiàn)業(yè)務(wù)操作的不可抵賴性;(2)證據(jù)信息應(yīng)存儲在安全和信任的環(huán)境。
2.1.2.10 資源控制
(1)設(shè)定服務(wù)和資源的優(yōu)先級;(2)提供服務(wù)或用戶優(yōu)先級設(shè)定功能,設(shè)定請求進(jìn)程或訪問賬號的優(yōu)先級,根據(jù)優(yōu)先級分配系統(tǒng)資源;(3)對資源的訪問設(shè)定時(shí)間限制、非法訪問者檢測和關(guān)閉的時(shí)間間隔。
2.1.3 資源使用設(shè)計(jì)
2.1.3.1 會(huì)話管理
規(guī)定會(huì)話的存儲、超時(shí)、清除、連接數(shù)等。(1)在用戶登錄后應(yīng)創(chuàng)建新的會(huì)話,會(huì)話數(shù)據(jù)應(yīng)存儲在服務(wù)器端;(2)會(huì)話設(shè)置超時(shí)時(shí)間,當(dāng)空閑時(shí)間超過設(shè)定時(shí)間服務(wù)端應(yīng)自動(dòng)終止會(huì)話;(3)當(dāng)用戶注銷或退出客戶端時(shí),必須清除該用戶的會(huì)話信息;(4)對最大并發(fā)會(huì)話連接數(shù)進(jìn)行限制。
2.1.3.2 資源管理
(1)確保系統(tǒng)中的資源都有唯一標(biāo)識符;(2)使用重要資源前進(jìn)行初始化,初始化失敗后安全退出程序;(3)及時(shí)釋放系統(tǒng)資源;確保釋放資源前完全清除敏感信息;(4)對分配的資源數(shù)量、使用權(quán)限、有效時(shí)間做限制,防止消耗過多資源;(5)執(zhí)行迭代或循環(huán)時(shí)限制循環(huán)執(zhí)行的次數(shù)。
2.1.3.3 內(nèi)存管理
規(guī)范內(nèi)存的分配、釋放、緩沖區(qū)。(1)保持一致的內(nèi)存管理原則,使用相同模式分配和釋放內(nèi)存;(2)對緩沖區(qū)的讀寫操作進(jìn)行邊界檢查,避免向指定的緩沖區(qū)外讀取或者寫入數(shù)據(jù);(3)字符串操作時(shí),檢查字符串長度和終止符,保證字符串的存儲具有足夠的空間容納字符數(shù)據(jù)和終止符。
2.1.3.4 數(shù)據(jù)庫管理
(1)當(dāng)訪問數(shù)據(jù)庫時(shí),禁止使用默認(rèn)的角色、賬號與默認(rèn)數(shù)據(jù)庫口令訪問數(shù)據(jù)庫,數(shù)據(jù)庫賬號權(quán)限應(yīng)遵循最小權(quán)限原則;(2)數(shù)據(jù)庫連接字符串或密碼應(yīng)加密存儲;(3)規(guī)定不同信任級別用戶連接數(shù)據(jù)庫的角色;(4)及時(shí)釋放數(shù)據(jù)庫資源。
2.1.3.5 文件管理
規(guī)范對文件操作進(jìn)行身份識別、對目錄進(jìn)行安全限制、及時(shí)釋放等。(1)采用最小權(quán)限原則進(jìn)行文件訪問授權(quán);(2)禁止暴露目錄或絕對文件路徑;(3)禁止用戶修改應(yīng)用程序文件和資源,權(quán)限僅限于可讀。
2.1.4 通信安全設(shè)計(jì)
應(yīng)用軟件采用安全通信協(xié)議對數(shù)據(jù)進(jìn)行安全傳輸:WWW 服務(wù)建議使用HTTPS 協(xié)議;FTP 服務(wù)建議使用SFTP 協(xié)議;Telnet 建議使用SSH 協(xié)議;使用加密傳輸確保通信安全。應(yīng)用軟件對通信過程中的整個(gè)報(bào)文或會(huì)話過程加密;對信道中傳輸?shù)南⑦M(jìn)行完整性驗(yàn)證。
2.2.1 基本安全要求
2.2.1.1 代碼安全
(1)規(guī)范變量、函數(shù)命名及代碼格式;(2)使用第三方代碼,對代碼安全性進(jìn)行評估和測試;(3)對代碼進(jìn)行版本控制;(4)對代碼的訪問權(quán)限進(jìn)行控制。
2.2.1.2 代碼注釋
(1)注釋代碼中無用的語句;(2)注釋信息中不包含物理路徑信息、數(shù)據(jù)庫連接信息、SQL 語句;(3)靜態(tài)頁面的注釋信息禁止包含源代碼信息;(4)動(dòng)態(tài)頁面使用隱藏注釋。
2.2.1.3 并發(fā)安全
(1)確保全局變量、線程間的共享數(shù)據(jù)線程安全;(2)處于阻塞狀態(tài)的任務(wù)和線程確保能夠終止;(3)使用線程池來處理請求;(4)確保提交至線程池的任務(wù)可被中斷;(5)及時(shí)釋放線程專有對象。
2.2.1.4 函數(shù)調(diào)用
(1)代碼應(yīng)對函數(shù)入口參數(shù)的合法性和準(zhǔn)確性進(jìn)行檢查;(2)避免在API 或與外部交互的接口暴露僅限內(nèi)部或部分用戶訪問的方法或函數(shù)[7]。
2.2.1.5 異常處理
(1)異常出現(xiàn)返回一般性錯(cuò)誤提示;(2)異常處理時(shí)及時(shí)回收并釋放系統(tǒng)資源;(3)捕獲異常應(yīng)在日志中詳細(xì)記錄。
2.2.1.6 指針安全
(1)指針使用過程中確保指針的有效性;(2)指針使用過程中檢查內(nèi)存分配大小,避免產(chǎn)生溢出;(3)檢查數(shù)組索引避免產(chǎn)生溢出;(4)循環(huán)中調(diào)用函數(shù)時(shí)檢查緩存大小;(5)當(dāng)方法結(jié)束清空所分配內(nèi)存。
2.2.1.7 配置管理
(1)配置管理由授權(quán)人員進(jìn)行,禁止使用遠(yuǎn)程配置管理,對操作進(jìn)行審計(jì);(2)服務(wù)器、框架、系統(tǒng)部件采用最新版本,安裝更新補(bǔ)丁;(3)配置文件不得明文存儲;(4)關(guān)閉服務(wù)器目錄列表功能。
2.2.1.8 代碼生成安全
(1)檢查編譯過程中依賴庫的版本,檢查編譯命令的宏定義沖突;(2)編譯生成的結(jié)果文件保存在獨(dú)立于源代碼的路徑中。
2.2.2 防惡意攻擊
2.2.2.1 防SQL 注入
(1)不直接通過用戶輸入字符串構(gòu)造可執(zhí)行SQL 語句;(2)使用參數(shù)化查詢或參數(shù)綁定來構(gòu)造SQL 語句[8];(3)不在存儲過程內(nèi)使用字符串連接構(gòu)造SQL 語句,執(zhí)行不可信的參數(shù)。
2.2.2.2 防跨站腳本代碼(XSS)
(1)對輸入的危險(xiǎn)特殊字符數(shù)據(jù)進(jìn)行過濾和轉(zhuǎn)義;(2)對所有基于頁面的輸入進(jìn)行驗(yàn)證,未經(jīng)驗(yàn)證不對輸入進(jìn)行回顯;(3)對于其他業(yè)務(wù)系統(tǒng)生成的未經(jīng)本應(yīng)用軟件驗(yàn)證的表數(shù)據(jù)或文件數(shù)據(jù), 輸出到客戶端前進(jìn)行HTML 編碼[9]。
2.2.2.3 防跨站請求偽造(CSRF)
(1)應(yīng)用軟件對客戶端提交的表單請求進(jìn)行合法性校驗(yàn);(2)對HTTP 請求頭Referer 做驗(yàn)證。
2.3.1 第三方軟件使用安全
(1)從官方渠道獲取第三方軟件,所有組件及時(shí)升級到不存在已知高危漏洞的版本;(2)對第三方軟件進(jìn)行完整性驗(yàn)證測試,確保未被篡改;(3)定期對第三方軟件進(jìn)行安全性檢測,避免使用已知存在高危漏洞的組件版本[10]。
2.3.2 開發(fā)環(huán)境安全
(1)構(gòu)建安全的編譯環(huán)境,從官方渠道獲取編譯器,確保安裝了所有補(bǔ)丁;(2)安全存儲源代碼,權(quán)限控制保護(hù)源代碼不被非法用戶訪問;(3)確保開發(fā)環(huán)境與實(shí)際運(yùn)行環(huán)境的物理隔離。
2.3.3 運(yùn)行環(huán)境安全
(1)應(yīng)用軟件發(fā)布前刪除所有與調(diào)試和測試相關(guān)的代碼、配置、文件等;(2)及時(shí)刪除服務(wù)器上不需要的應(yīng)用程序和系統(tǒng)文檔;(3)關(guān)閉服務(wù)器上不需要的服務(wù);(4)軟件運(yùn)行服務(wù)器的系統(tǒng)組件避免使用存在已知漏洞的組件版本。
2.3.4 歸檔管理
(1)版本歸檔時(shí),刪除開發(fā)過程中的臨時(shí)文件、備份文件、無用目錄等;(2)歸檔的程序文件中不保留調(diào)試用的代碼。
通過本研究建立了一個(gè)比較完善的企業(yè)應(yīng)用軟件安全體系,滿足應(yīng)用軟件設(shè)計(jì)、開發(fā)過程中的安全保障要求,能夠?yàn)槠髽I(yè)及員工信息提供安全屏障。隨著黑客技術(shù)的發(fā)展,針對企業(yè)應(yīng)用軟件的攻擊手段不斷升級,今后需繼續(xù)研究和完善企業(yè)應(yīng)用軟件安全體系,及時(shí)發(fā)現(xiàn)安全問題,提供安全手段。此外,企業(yè)中應(yīng)用軟件根據(jù)涉及的業(yè)務(wù)或所涉及數(shù)據(jù)的重要性的不同,參照安全要求也應(yīng)有不同針對性,如涉及轉(zhuǎn)賬付款、支付收款業(yè)務(wù)邏輯的應(yīng)用應(yīng)重點(diǎn)關(guān)注未授權(quán)訪問、越權(quán)訪問;涉及用戶命令執(zhí)行、用戶上傳代碼執(zhí)行功能應(yīng)關(guān)注命令注入;涉及短信、電話、郵件通知功能應(yīng)關(guān)注應(yīng)用軟件設(shè)計(jì)邏輯錯(cuò)誤。針對重要、特定的應(yīng)用,就需要制定更嚴(yán)格的技術(shù)手段要求。