【摘 要】本文結(jié)合對(duì)應(yīng)用系統(tǒng)設(shè)計(jì)、開發(fā)、測(cè)試、測(cè)評(píng)等建設(shè)過程的分析,總結(jié)了外包應(yīng)用系統(tǒng)開發(fā)中存在的安全保密風(fēng)險(xiǎn),并根據(jù)應(yīng)用系統(tǒng)安全建設(shè)和測(cè)評(píng)經(jīng)驗(yàn),結(jié)合安全開發(fā)生命周期等安全開發(fā)管理理念,研究了應(yīng)用系統(tǒng)外包開發(fā)中源代碼安全風(fēng)險(xiǎn)管控技術(shù)和策略,以期從源頭減少應(yīng)用系統(tǒng)自身安全漏洞和風(fēng)險(xiǎn),提升信息系統(tǒng)安全防御水平。
【關(guān)鍵詞】應(yīng)用系統(tǒng) 外包開發(fā) 安全保密風(fēng)險(xiǎn)
1 引言
應(yīng)用系統(tǒng)是信息系統(tǒng)中信息分發(fā)、傳遞、共享的主要工具,同時(shí)是業(yè)務(wù)管理的數(shù)字化基本設(shè)施,在信息網(wǎng)絡(luò)中處于信息傳遞的核心。隨著企業(yè)數(shù)字化轉(zhuǎn)型的不斷推進(jìn),各單位為滿足各種業(yè)務(wù)需要建設(shè)了各類業(yè)務(wù)應(yīng)用系統(tǒng),如財(cái)務(wù)系統(tǒng)、人力管理系統(tǒng)、項(xiàng)目管理系統(tǒng)等。但由于應(yīng)用系統(tǒng)開發(fā)建設(shè)具有專業(yè)性、復(fù)雜性,一般需要專業(yè)的軟件開發(fā)團(tuán)隊(duì)進(jìn)行建設(shè),而大部分單位不具備自行開發(fā)應(yīng)用系統(tǒng)的能力,應(yīng)用系統(tǒng)外包開發(fā)成為主流的建設(shè)方式。隨著網(wǎng)絡(luò)攻防技術(shù)的發(fā)展,越來越多的安全漏洞在各類應(yīng)用系統(tǒng)中被發(fā)現(xiàn),根據(jù)Forrester調(diào)研,僅Web類安全漏洞就占2021年發(fā)現(xiàn)安全漏洞的39%,由此可見應(yīng)用系統(tǒng)已成為網(wǎng)絡(luò)攻防雙方的主戰(zhàn)場(chǎng)之一。因此,如何管控外包開發(fā)應(yīng)用系統(tǒng)源代碼安全漏洞,從根本上有效減少安全漏洞,保障應(yīng)用系統(tǒng)安全成為各單位信息化和網(wǎng)絡(luò)安全管理部門面臨的重要議題。
2 外包開發(fā)中的源代碼安全風(fēng)險(xiǎn)分析
在對(duì)外包應(yīng)用系統(tǒng)進(jìn)行測(cè)評(píng)的過程中,存在以下風(fēng)險(xiǎn)。
(1)現(xiàn)行相關(guān)標(biāo)準(zhǔn)對(duì)安全要求較高,但對(duì)開發(fā)廠商的安全開發(fā)能力、開發(fā)質(zhì)量缺少直觀的考核和選擇指標(biāo),導(dǎo)致部分開發(fā)廠商不注重安全開發(fā)能力的建設(shè)和開發(fā)質(zhì)量的提升,一些應(yīng)用系統(tǒng)的開發(fā)過程管理混亂,缺少源代碼安全的管理與技術(shù)措施,甚至在互聯(lián)網(wǎng)中開展代碼管理,極易引入安全風(fēng)險(xiǎn),部分應(yīng)用系統(tǒng)安全質(zhì)量沒有保障。
(2)在編程實(shí)現(xiàn)階段,隨著開發(fā)技術(shù)的迅猛發(fā)展,部分中小廠商或建設(shè)使用單位為追求新技術(shù)應(yīng)用,開發(fā)中大量采用未經(jīng)安全檢測(cè)的開源框架、開源組件等第三方代碼進(jìn)行快速迭代開發(fā),對(duì)使用了哪些開源組件或開源組件的哪個(gè)版本并不了解。建設(shè)使用單位對(duì)使用開源組件、開源代碼的情況缺少要求和限制,給應(yīng)用系統(tǒng)帶來不可控的安全風(fēng)險(xiǎn)。
(3)在驗(yàn)收和上線運(yùn)行階段,建設(shè)使用單位主要對(duì)應(yīng)用系統(tǒng)業(yè)務(wù)功能進(jìn)行測(cè)試驗(yàn)收,缺少對(duì)源代碼安全漏洞、業(yè)務(wù)邏輯漏洞等的安全性測(cè)試,缺少開發(fā)人員參與的安全加固,往往不知道是否存在安全漏洞,對(duì)已發(fā)現(xiàn)的安全漏洞不知如何修復(fù),導(dǎo)致應(yīng)用系統(tǒng)“帶病上線”“帶病運(yùn)行”。
3 對(duì)外包開發(fā)的安全風(fēng)險(xiǎn)管控措施實(shí)踐
為保障應(yīng)用系統(tǒng)源代碼安全質(zhì)量,微軟提出從安全管理角度指導(dǎo)應(yīng)用系統(tǒng)開發(fā)過程的安全開發(fā)生命周期(Security Development Lifecycle,SDL)理念,經(jīng)過世界主流廠商多年實(shí)踐和不斷改進(jìn),發(fā)展成為安全—軟件開發(fā)生命周期(Secure Software Development Lifecycle,S-SDLC)等方法論,其理念是將安全與軟件開發(fā)全過程融合,通過在軟件開發(fā)生命周期中每個(gè)階段執(zhí)行必要的安全實(shí)踐,使安全風(fēng)險(xiǎn)最小化、安全威脅最少化。SDL的實(shí)施在一定程度上降低了發(fā)布運(yùn)行后安全漏洞的數(shù)量,被各大軟件廠商廣泛采用。
但是,SDL、開發(fā)安全運(yùn)維一體化(DevSecOps)等安全開發(fā)理念都主要是針對(duì)開發(fā)廠商的實(shí)施或?qū)嵺`方法,對(duì)應(yīng)用系統(tǒng)建設(shè)使用的甲方單位,特別是在外包開發(fā)的場(chǎng)景下,甲方單位也迫切需要介入整個(gè)安全開發(fā)過程中。本文利用SDL安全開發(fā)理念,從建設(shè)使用單位的角度,針對(duì)外包開發(fā)全流程進(jìn)行代碼安全管控策略設(shè)計(jì)和技術(shù)保障措施研究,通過參與關(guān)鍵流程活動(dòng),協(xié)助開發(fā)出既符合安全要求又盡可能減少網(wǎng)絡(luò)安全漏洞的應(yīng)用系統(tǒng)。本文設(shè)計(jì)的建設(shè)使用單位針對(duì)外包開發(fā)過程中的安全實(shí)踐措施和策略架構(gòu)如圖1所示。
圖1 外包開發(fā)過程中的安全實(shí)踐措施和策略架構(gòu)
3.1 加強(qiáng)開發(fā)廠商的選擇與安全培訓(xùn)
外包應(yīng)用系統(tǒng)開發(fā)時(shí),在廠商具有相應(yīng)資質(zhì)的基礎(chǔ)上,建議應(yīng)用系統(tǒng)開發(fā)管理的業(yè)務(wù)部門優(yōu)先選擇軟件開發(fā)質(zhì)量保障能力等級(jí)較高的企業(yè),利用其更為規(guī)范的過程管理、版本管控、漏洞管理等制度和技術(shù)措施提高應(yīng)用系統(tǒng)開發(fā)質(zhì)量。
建設(shè)使用單位組織或參與開發(fā)廠商統(tǒng)一舉行的安全防范意識(shí)培訓(xùn),對(duì)系統(tǒng)設(shè)計(jì)、開發(fā)、部署、售后、運(yùn)維和業(yè)務(wù)使用等各類人員進(jìn)行必要的安全培訓(xùn)或再培訓(xùn),宣傳法律法規(guī)和標(biāo)準(zhǔn)知識(shí)、網(wǎng)絡(luò)安全防范技能,建立常見安全漏洞的源代碼防范措施、范例、框架,幫助相關(guān)人員特別是設(shè)計(jì)、開發(fā)人員提升安全開發(fā)能力。
3.2 開展安全保密風(fēng)險(xiǎn)分析
建設(shè)使用單位的業(yè)務(wù)使用人員、安全保密人員介入業(yè)務(wù)安全需求分析,和開發(fā)人員結(jié)合安全標(biāo)準(zhǔn)規(guī)范,從安全標(biāo)準(zhǔn)和最佳實(shí)踐2個(gè)方面分析得出業(yè)務(wù)功能所需安全防護(hù)要求。安全需求分析工作的主要目的是為應(yīng)用程序設(shè)計(jì)在計(jì)劃運(yùn)行環(huán)境中的運(yùn)行確定最低安全要求。同時(shí),在需求分析文檔中包括安全保密協(xié)議相關(guān)內(nèi)容:加強(qiáng)源代碼安全管理,防止因源代碼泄露、安全防范意識(shí)不足可能造成的安全風(fēng)險(xiǎn),預(yù)防安全漏洞、后門;禁止應(yīng)用系統(tǒng)開發(fā)相關(guān)文檔、源代碼等傳輸?shù)交ヂ?lián)網(wǎng);禁止預(yù)置和保留隱藏的管理員賬號(hào)、開發(fā)者賬號(hào)、測(cè)試賬號(hào);禁止預(yù)置遠(yuǎn)程管理后門、遠(yuǎn)程升級(jí)后門、廣告推廣、漏洞和非授權(quán)的數(shù)據(jù)收集、傳輸?shù)葠阂夤δ堋?/p>
3.3 強(qiáng)化安全防護(hù)功能設(shè)計(jì)與編碼
建設(shè)使用單位的安全保密人員介入系統(tǒng)的安全設(shè)計(jì)階段,與開發(fā)人員一起,根據(jù)業(yè)務(wù)安全需求分析,制定安全控制和防護(hù)措施,減小攻擊面,防范常見安全漏洞、安全攻擊方式,抵御或降低安全威脅。安全設(shè)計(jì)實(shí)踐包括特權(quán)分離、數(shù)據(jù)驗(yàn)證、認(rèn)證管理、會(huì)話管理、授權(quán)管理、日志審計(jì)、異常處理、配置管理、數(shù)據(jù)保護(hù)等安全功能設(shè)計(jì),也包括對(duì)結(jié)構(gòu)化查詢語言(SQL)注入、反序列化、權(quán)限提升、文件上傳、任意文件下載等安全漏洞的防范功能設(shè)計(jì)。編碼實(shí)現(xiàn)時(shí),需要考慮將要使用的開源代碼、組件、模塊、庫(kù)和框架的安全性,禁止使用存在安全風(fēng)險(xiǎn)的軟件成分。
存量應(yīng)用系統(tǒng)新增功能、系統(tǒng)升級(jí)也需要編制新增功能部分的安全設(shè)計(jì)方案,對(duì)新增功能的安全威脅、安全功能設(shè)計(jì)和對(duì)原應(yīng)用系統(tǒng)安全功能的影響進(jìn)行深入分析。
3.4 完善代碼安全測(cè)試與驗(yàn)收
建設(shè)使用單位在對(duì)應(yīng)用系統(tǒng)業(yè)務(wù)功能進(jìn)行驗(yàn)收測(cè)試時(shí),先由業(yè)務(wù)使用團(tuán)隊(duì)和安全保密團(tuán)隊(duì)開展安全功能合規(guī)性測(cè)試,根據(jù)業(yè)務(wù)功能、安全要求設(shè)計(jì)安全測(cè)試用例進(jìn)行測(cè)試,測(cè)試用例需要涵蓋安全需求、安全設(shè)計(jì)中各項(xiàng)功能。
在安全功能測(cè)試基礎(chǔ)上,建設(shè)使用單位安全團(tuán)隊(duì)?wèi)?yīng)開展源代碼安全性測(cè)試,從源頭把控應(yīng)用系統(tǒng)安全風(fēng)險(xiǎn)。源代碼安全性測(cè)試一般采用自動(dòng)化工具來降低人工檢測(cè)的時(shí)間消耗和成本投入,提高檢測(cè)效率,常見工具包括靜態(tài)安全測(cè)試(SAST)、動(dòng)態(tài)安全測(cè)試(DAST)、交互式安全測(cè)試(IAST)、模糊測(cè)試(FUZZ)和軟件成分分析(SCA)幾類技術(shù)。根據(jù)經(jīng)驗(yàn),建議配備交互式安全測(cè)試IAST工具和軟件成分分析SCA工具。IAST技術(shù)融合了SAST技術(shù)和DAST技術(shù)的特征,通過在應(yīng)用系統(tǒng)中部署測(cè)試插樁,分析應(yīng)用系統(tǒng)運(yùn)行時(shí)的源代碼,檢查業(yè)務(wù)數(shù)據(jù)傳播路徑,分析數(shù)據(jù)傳播過程中的各功能代碼的處理措施,根據(jù)已知安全漏洞發(fā)生的數(shù)據(jù)處理模式、發(fā)生場(chǎng)景分析可能存在的安全風(fēng)險(xiǎn),在完成功能測(cè)試的同時(shí)自動(dòng)開展并完成源代碼層的安全性分析測(cè)試。相較于SAST、DAST和FUZZ,IAST測(cè)試工具具有對(duì)測(cè)試人員安全技能要求低、測(cè)試結(jié)果準(zhǔn)確性高、測(cè)試過程速度快的優(yōu)勢(shì),特別適合建設(shè)使用單位業(yè)務(wù)使用團(tuán)隊(duì)和安全團(tuán)隊(duì)等非專業(yè)開發(fā)人員用于開展源代碼安全性測(cè)試。
為應(yīng)對(duì)開源組件、開源代碼引入的安全風(fēng)險(xiǎn),SCA工具掃描分析應(yīng)用系統(tǒng)的源代碼和使用的模塊、庫(kù)、框架、程序包等代碼文件,提取代碼指令、代碼結(jié)構(gòu)、控制流圖、函數(shù)調(diào)用關(guān)系等特征,再對(duì)特征進(jìn)行識(shí)別和分析,獲得各個(gè)部分的關(guān)系,然后根據(jù)已知的安全漏洞特征庫(kù)、威脅情報(bào)庫(kù),識(shí)別可能潛藏的、存在的安全風(fēng)險(xiǎn),避免開源代碼、庫(kù)、模塊的使用引入安全漏洞。
3.5 開展安全上線
應(yīng)用系統(tǒng)上線試運(yùn)行時(shí),安全保密團(tuán)隊(duì)?wèi)?yīng)會(huì)同開發(fā)團(tuán)隊(duì)開展安全配置加固,先梳理業(yè)務(wù)應(yīng)用系統(tǒng)使用的運(yùn)行環(huán)境、語言環(huán)境、開源組件等,并建立系統(tǒng)成分清單,清單包括但不限于操作系統(tǒng)、數(shù)據(jù)庫(kù)、運(yùn)行中間件、運(yùn)行容器及編排管理與調(diào)度組件、大數(shù)據(jù)組件、人工智能組件、開發(fā)框架、消息系統(tǒng)組件、數(shù)據(jù)庫(kù)連接和管理組件、語言運(yùn)行庫(kù)、外部函數(shù)庫(kù)/組件、開源組件等代碼運(yùn)行組件清單,詳細(xì)記錄各項(xiàng)名稱、版本號(hào),便于開展零日(0Day)漏洞預(yù)警排查和漏洞檢測(cè)與應(yīng)急響應(yīng)。
應(yīng)用系統(tǒng)完成部署后,建設(shè)單位定期利用漏洞掃描工具進(jìn)行安全漏洞檢測(cè),或開展人工滲透測(cè)試發(fā)掘潛在漏洞,對(duì)發(fā)現(xiàn)的源代碼缺陷導(dǎo)致的安全漏洞通知開發(fā)人員核實(shí)整改漏洞。加強(qiáng)應(yīng)用系統(tǒng)升級(jí)管理,在大版本、小版本升級(jí)和應(yīng)用系統(tǒng)間集成、漏洞修復(fù)等工作后,按照以上安全需求分析、安全設(shè)計(jì)與編碼、安全測(cè)試的過程對(duì)變更部分源代碼進(jìn)行安全分析和測(cè)試,必要時(shí)對(duì)應(yīng)用系統(tǒng)整體重新進(jìn)行安全測(cè)試。
4 結(jié)語
應(yīng)用系統(tǒng)在供應(yīng)鏈、安全設(shè)計(jì)、代碼編程實(shí)現(xiàn)、上線運(yùn)行等全生命周期中面臨各種各樣的風(fēng)險(xiǎn),只有加強(qiáng)應(yīng)用系統(tǒng)源代碼安全管控,才能從源頭解決應(yīng)用系統(tǒng)自身面臨的安全風(fēng)險(xiǎn)。本文從建設(shè)使用單位的角度,研究應(yīng)用系統(tǒng)外包開發(fā)建設(shè)中的源代碼安全防護(hù)技術(shù),針對(duì)安全需求分析、安全設(shè)計(jì)與實(shí)現(xiàn)、安全測(cè)試、升級(jí)管控等各階段設(shè)計(jì)源代碼管控策略和措施,有助于減少應(yīng)用系統(tǒng)建設(shè)過程中源代碼引入的安全風(fēng)險(xiǎn),提升應(yīng)用系統(tǒng)的安全防護(hù)水平。同時(shí),該實(shí)踐經(jīng)驗(yàn)對(duì)應(yīng)用系統(tǒng)自行開發(fā)、開源產(chǎn)品自行部署、商業(yè)產(chǎn)品購(gòu)置實(shí)施等情形具有一定借鑒意義。
(原載于《保密科學(xué)技術(shù)》雜志2023年2月刊)