朱 典 楊 陽 余 達 宋劉結
1(安徽省大數(shù)據(jù)中心 合肥 230011) 2(科大訊飛股份有限公司 合肥 230088)
數(shù)字化發(fā)展的大潮推動著政府業(yè)務系統(tǒng)不斷更新迭代,越來越多的業(yè)務應用發(fā)布,往往因為需要推進相關應用的部署和項目建設周期,忽略了開發(fā)生命周期中的安全,一般僅在運行階段才開展安全活動,造成多種問題難以解決,如安全問題暴露時間長、整改成本較高、速度和風險難以平衡等.
為了解決該類問題,需要建設應用安全開發(fā)生命周期流程體系,將安全活動引入到開發(fā)工作流中,將安全能力賦能開發(fā)階段,能盡早地識別和彌補安全性缺陷和漏洞,以便能夠快速、高質量地交付安全的應用系統(tǒng).
DevSecOps作為一種全新的安全理念與模式,可以把安全前置到需求設計階段,將安全責任賦給從開發(fā)到運營整個業(yè)務生命周期中的每個人,使安全問題能夠盡早發(fā)現(xiàn)、盡快解決,從而避免可能出現(xiàn)的高昂修復成本.目前DevSecOps主要應用于企業(yè)等比較關注開發(fā)效率的場景,如金融行業(yè)、制造業(yè)、航空機載、互聯(lián)網(wǎng)企業(yè)等,但在政府領域鮮有應用.本文基于DevSecOps相關技術路線和方法,通過某省的實際項目實踐,探討DevSecOps如何賦能數(shù)字政府安全建設.
當前政府的業(yè)務系統(tǒng)建設以項目為依托,關注業(yè)務系統(tǒng)功能與交付,不關注開發(fā)過程,項目承建商提供開發(fā)好的軟件進行部署,建設方關注產品交付后的運行及功能成效,代碼和制品的質量得不到保障.
政府的業(yè)務系統(tǒng)都是在上線后才開始進行安全測試,主要關注系統(tǒng)運行過程的安全漏洞和風險,圍繞合規(guī)去滿足等級保護和密碼應用安全性評估要求.這樣就使得很多業(yè)務系統(tǒng)沒有得到充分檢測,帶有安全隱患就上線,后期暴露出很多問題.
因為開發(fā)階段缺乏安全檢測,隨著業(yè)務不斷發(fā)展,版本更新加快,當出現(xiàn)安全問題時,再排查問題和修復安全漏洞需要大量的返工時間和高昂的成本,在這種情況下,安全修復成本隨著研發(fā)流程的推進呈幾何級數(shù)增長,如圖1所示[1]:
圖1 各階段發(fā)現(xiàn)安全問題的修復成本
很多參與數(shù)字政府建設的人員(包括開發(fā)、測試、運營人員等)都很少關注安全,認為安全問題不是自己的職責,也不具備解決安全問題的能力,導致開發(fā)的系統(tǒng)可能產生較多的安全漏洞,同時也無法快速對相關漏洞進行修復.
鑒于目前數(shù)字政府業(yè)務系統(tǒng)面臨的問題,亟需相關技術手段將應用安全左移,在開發(fā)過程中保障業(yè)務系統(tǒng)安全.
在開發(fā)過程中為保障業(yè)務系統(tǒng)安全,需要成熟的安全檢測技術為依托,通過一套整體的技術框架賦能開發(fā)過程.以下簡單介紹實現(xiàn)安全開發(fā)需要用到的技術.
2.1.1 開發(fā)、安全和運營(DevSecOps)
DevSecOps是“開發(fā)、安全和運營”的縮寫.它是一種文化和理念,通過將軟件開發(fā)、安全和運營人員統(tǒng)一為一個團隊來實現(xiàn)[2].DevSecOps可以把安全能力嵌入現(xiàn)有開發(fā)流程體系,在開發(fā)過程早期識別安全問題,讓每個人參與信息安全.
2.1.2 安全軟件開發(fā)全生命周期
安全軟件開發(fā)全生命周期(security-software develop life cycle, S-SDLC)技術最早由微軟提出,包括需求、設計、開發(fā)、測試及維護各個階段的安全活動,其核心概念是讓安全活動融合到整個生命周期[3].
2.1.3 靜態(tài)應用程序安全測試
靜態(tài)應用程序安全測試(static application security testing, SAST)是一種靜態(tài)測試技術,通過對源代碼的掃描分析,發(fā)現(xiàn)其中潛在的安全弱點及不合規(guī)的代碼編寫方式.
2.1.4 軟件成分分析
軟件成分分析(software composition analysis, SCA)是一種靜態(tài)測試技術,對軟件的組成成分進行分析,發(fā)現(xiàn)其中潛在的安全風險和許可證授權風險.
2.1.5 交互式應用安全測試
交互式應用安全測試(interactive application security testing, IAST)是一種動態(tài)測試技術,通過插樁探針的方法檢測軟件運行過程中的數(shù)據(jù)流、控制流等業(yè)務邏輯層面的安全弱點.
2.1.6 動態(tài)應用程序安全測試
動態(tài)應用程序安全測試(dynamic application security testing, DAST)是一種動態(tài)測試技術,通過在運行時模擬攻擊測試應用程序的安全性,發(fā)現(xiàn)應用程序中存在的漏洞、弱點和攻擊面.
2.1.7 實時應用自我防護
實時應用自我防護(runtime application self-protection, RASP)是一種新型應用安全保護技術,它將保護程序像疫苗一樣注入到應用程序中,能實時檢測和阻斷安全攻擊行為,使應用程序具備自我保護能力.
實現(xiàn)DevSecOps在數(shù)字政府體系中的應用,要結合數(shù)字政府本身的特點,改變傳統(tǒng)應用系統(tǒng)交付模式.需要有數(shù)字化管理部門統(tǒng)籌集約建設,建立統(tǒng)一的DevOps開發(fā)流程,將各政府部門的業(yè)務開發(fā)工作納入項目管理范疇中,才能更好地利用相關安全檢測工具將安全左移.在此基礎上,政府實踐DevSecOps的關鍵點有3個:一是制定明確的制度流程對項目開發(fā)過程進行約束;二是統(tǒng)籌自動化的安全檢測技術保障開發(fā)部署流程通暢;三是提升人員安全意識與能力實現(xiàn)項目交付的協(xié)同共擔.
通過制度流程+技術工具+人員的高效結合,構建應用安全、敏捷、規(guī)范的全生命周期開發(fā)體系.從應用源頭治理,改善政府業(yè)務系統(tǒng)安全根基,為政府業(yè)務穩(wěn)定可靠運行提供有效保障,提升安全性,降低安全風險和修復成本.數(shù)字政府的應用安全開發(fā)體系架構如圖2所示:
圖2 數(shù)字政府的應用安全開發(fā)體系架構
在政府體系中,管理制度與流程是開展工作的先決條件.落實DevSecOps的工作流程,需要建立完善的統(tǒng)籌機制,制定相關的標準規(guī)范,才能更好地約束并指導相關政府單位開展應用安全開發(fā)工作,最大化提升政務業(yè)務系統(tǒng)的交付質量.
制度流程的制定是為了更好地使用安全檢測的相關技術工具,兩者相輔相成.因此制度和流程的制定一定是要結合已有的能力,從開發(fā)編碼的規(guī)范、上線前安全檢測技術規(guī)范到上線安全審核要求以及上線運行后的檢測規(guī)范等,建立全生命周期的管理規(guī)范與標準.
技術開發(fā)的規(guī)范區(qū)別于傳統(tǒng)的開發(fā)要求,本文主要闡述在安全方面如何加強代碼的構建.規(guī)定在代碼編碼的過程中,需遵循的安全要求與設計,同時也為后續(xù)上線安全審核提供了參考標準,可驗證各系統(tǒng)是否按照要求進行開發(fā).
安全測試的標準主要是明確對各安全檢測工具的檢測要求,為檢測工具量身打造適合其知識庫的檢測標準,同時也通過檢測標準的確立擴充檢測工具知識庫的內容,不斷確立符合政府軟件特色的測試標準.統(tǒng)一的測試標準可以拉齊各政府部門對開發(fā)安全的認知,可以更好地執(zhí)行上線安全審核的規(guī)范要求,發(fā)揮出檢測工具的合規(guī)價值.標準規(guī)范和制度流程的確立,是DevSecOps賦能數(shù)字政府應用開發(fā)安全體系的基礎.
為了在執(zhí)行過程中能夠更好地將制度與流程深入貫徹,必要的技術手段是不可缺少的.可通過打造一個軟件研發(fā)S-SDLC全流程業(yè)務支撐體系,利用技術手段將自動化、重復性的安全工作融入到研發(fā)體系內,讓安全屬性嵌入到整條DevOps流水線,提升應用內生安全能力.
S-SDLC提供包含需求、設計、開發(fā)、測試、部署等各個關鍵環(huán)節(jié)的安全任務設定及管理能力,同時還提供包括SAST,DAST,IAST,SCA等全面的工具鏈支撐,結合政務業(yè)務進行流程定制,與DevOps工具無縫銜接,保證DevSecOps在數(shù)字政府的應用實踐.以下從開發(fā)到運行的各個階段,闡述各類安全檢測技術在DevSecOps流程中的應用.
2.4.1 安全開發(fā)
安全開發(fā)主要是針對代碼的安全檢測,在對開發(fā)人員進行安全編碼規(guī)范要求后,通過靜態(tài)代碼安全測試(SAST)工具對源代碼進行掃描,開展軟件代碼安全審核和質量分析,提升軟件代碼安全質量.
SAST通常在編碼階段分析應用程序的源代碼或二進制文件的語法、結構、過程、接口等來發(fā)現(xiàn)程序代碼存在的安全漏洞.SAST首先通過調用語言的編譯器或者解釋器把前端的語言代碼(如Java,C/C++源代碼)轉換成一種中間代碼,將其源代碼之間的調用關系、執(zhí)行環(huán)境、上下文等分析清楚.通過語義分析程序中不安全的函數(shù)獲取數(shù)據(jù)流,跟蹤、記錄并分析程序中的數(shù)據(jù)傳遞過程所產生的安全問題.獲取控制流,分析程序特定時間狀態(tài)下執(zhí)行操作指令的安全問題.獲取配置和結構信息,分析程序上下文環(huán)境、結構中的安全問題和項目配置文件中的敏感信息以及配置缺失的安全問題.匹配規(guī)則庫中漏洞特征,最后形成包含詳細漏洞信息的漏洞檢測報告,包括漏洞的具體代碼行數(shù)以及漏洞修復的建議.
SAST在編譯代碼之前掃描代碼,可以自動化并透明地集成到項目的工作流程中,幫助開發(fā)人員在軟件開發(fā)早期階段發(fā)現(xiàn)代碼安全漏洞.
2.4.2 安全編譯
除了源代碼存在的缺陷漏洞外,軟件開發(fā)過程中,開發(fā)者為了壓縮工期,加快開發(fā)效率,引入了大量第三方開源軟件,開源組件一旦有新漏洞發(fā)布,漏洞影響范圍和危害性依賴大量人工排查,工作量巨大且缺乏準確性.因此,當全量代碼通過DevOps流水線自動編譯后,需要對編譯后的制品包進行安全檢測,分析其中可能存在風險的第三方開源組件,規(guī)避漏洞與許可風險.
軟件成分分析(SCA)工具可對軟件中的開源組件進行分析,發(fā)現(xiàn)其中潛在的安全風險和許可證授權風險.SCA的技術實現(xiàn)是通過對目標檢測對象的配置文件及應用包中存在的二進制引入包進行掃描,獲取其相關直接及間接引入的組件信息,通過與知識庫內容的匹配標識獲取相關的組件完整信息,從而識別出在用的開源組件資產和漏洞清單.
通過開源組件的資產梳理和漏洞修復,可逐步建立屬于政務業(yè)務專用的開源組件資產庫.政府各單位新開發(fā)的項目在技術選型階段可以優(yōu)先從開源組件資產庫中選取沒有漏洞的最新版本,對于需要新引入的開源組件(不在開源組件資產庫中的版本)可以進行掃描后確認沒有漏洞再加入資產庫中.同時,對開源組件的資產庫進行長期監(jiān)控和跟蹤,一旦有新的漏洞發(fā)布時,及時更新開源組件資產庫,并進行漏洞告警和標記,通知受影響的政府部門項目進行漏洞修復.開源組件資產庫的共享,從源頭杜絕各開發(fā)商使用不被政府認可的開源組件,有效縮短安全修復時間,節(jié)省修復成本.
2.4.3 安全測試
系統(tǒng)的源代碼和制品通過安全檢測后,根據(jù)制度規(guī)范流程的要求及業(yè)務需求,對于即將發(fā)布上線的業(yè)務系統(tǒng),必須經(jīng)過安全檢測通過后才能發(fā)布上線.在軟件的功能測試階段同步開展安全測試,提高安全漏洞的發(fā)現(xiàn)效率和準確性,使交付更安全的產品成為可能[4].
傳統(tǒng)的上線前安全檢測是使用漏洞掃描工具對部署的系統(tǒng)開展安全掃描,漏洞掃描屬于動態(tài)應用安全測試(DAST),采用攻擊特征庫進行漏洞發(fā)現(xiàn)與驗證,其可以更好地發(fā)現(xiàn)操作系統(tǒng)、主機等環(huán)境風險,在上線前對Web掃描比較適用.對于更高要求的系統(tǒng),可能會通過專業(yè)安全人員開展?jié)B透測試,這種檢測方式無疑增大了資源投入.因此可以采用交互式應用安全測試(IAST),結合工具與人工的灰盒測試,與Web掃描共同實現(xiàn)自動化的上線前的安全檢測.IAST的安全融合可充分利用DevSecOps的自動化特性,在構建測試環(huán)境的同時引入IAST插樁[5].
IAST是通過在應用程序的字節(jié)碼中動態(tài)插樁檢測“探針”,獲取應用程序各種運行時的上下文信息.在應用程序運行的同時,實時分析程序的安全弱點.其優(yōu)勢是漏洞檢測高精度、高深度、高覆蓋度、無感知,其檢測漏洞可以定位到代碼行級別,并且可以獲取完整的請求響應信息、數(shù)據(jù)流和堆棧信息等,非常適合幫助不懂安全的研發(fā)人員.
IAST的技術核心即是插樁技術,是IAST獲取被測應用程序上下文信息的基礎.以Java為例,Java字節(jié)碼插樁是Java提供的一個來自JVM(Java 虛擬機)的接口,該接口提供了一系列查看和操作Java類定義的方法.例如修改類的字節(jié)碼、向classLoader的classpath下加入jar文件等,使得開發(fā)者可以通過Java語言操作和監(jiān)控JVM內部的一些狀態(tài),進而實現(xiàn)Java程序的監(jiān)控分析,甚至實現(xiàn)一些特殊功能(如AOP、熱部署),如圖3所示:
圖3 Java插樁檢測示意圖
當有研發(fā)流程中的功能測試被觸發(fā)時,IAST同時自動啟動并開始檢測.這種方式在功能性能測試的同時自動檢測并分析,不需人工干預.其檢測效果通過權威靶機進行驗證,達到了極高的檢測率和極低的誤報率.
2.4.4 安全運行
當所有上線前的安全活動都開展完成后,可通過DevOps工具將應用快速發(fā)布至生產環(huán)境,此時需要對發(fā)布的應用開展運行態(tài)的防護與監(jiān)測.這主要依托外部的各類安全設備進行保障.除了傳統(tǒng)的防火墻、WAF、主機安全防護軟件等,還可以結合實時應用自我防護(RASP),RASP技術可以快速地將安全防御功能整合到正在運行的應用程序中,攔截從應用程序到系統(tǒng)的所有調用,確保它們是安全的,并直接在應用程序內驗證數(shù)據(jù)請求.Web和非Web應用程序都可以通過RASP進行保護.
在安全運行階段,可通過漏洞掃描定期開展安全掃描工作,識別應用和系統(tǒng)的安全風險,通過RASP可實時監(jiān)測應用的安全狀態(tài),當發(fā)現(xiàn)安全事件后第一時間響應處置,同時回歸代碼階段進行相關整改,實現(xiàn)應用全生命周期的安全閉環(huán).
以上各階段使用的技術能力都通過S-SDLC整合到DevOps流水線,實現(xiàn)開發(fā)過程中的自動化安全檢測,是DevSecOps賦能數(shù)字政府應用開發(fā)安全體系的必要手段.
制度流程和技術工具這2個關鍵點的實現(xiàn),離不開人員之間的協(xié)同共擔,參與數(shù)字政府建設的人員需要認識到安全問題不僅僅是系統(tǒng)運行階段的問題,也不僅僅是軟硬件廠商的問題,而是應用從需求設計到開發(fā)測試再到上線運行的全生命周期的每位參與人員的事情[6].應用安全體系中的每一個環(huán)節(jié)都要關注安全,環(huán)節(jié)中的每一個人都要為安全負責,最終才能更好地保障數(shù)字政府的業(yè)務安全.
DevSecOps的落地并不只是體現(xiàn)在對原有 DevOps 流程上的改進,還要求組織在內部建立一種安全文化,使得開發(fā)、運維和安全團隊能夠高效地協(xié)同工作,實現(xiàn)快速、安全的產品交付[7].
鑒于此,可以通過培訓來普及安全開發(fā)理論,樹立安全開發(fā)理念.如圖4所示.培訓應面向管理、研發(fā)、測試、安全等所有參與者,提升每個人的應用開發(fā)安全意識和能力,實現(xiàn)“安全不僅僅是安全測試專家的事,而是所有人的事”,打通溝通壁壘和降低合作難度,構建真正DevSecOps文化,是DevSecOps賦能數(shù)字政府應用開發(fā)安全體系的關鍵.
圖4 數(shù)字政府的DevSecOps安全培訓體系
某省政府順應數(shù)字化發(fā)展,積極謀劃數(shù)字政府建設,基于業(yè)界DevOps理念,建設了面向政務系統(tǒng)開發(fā)領域的應用生產全生命周期管控體系,提供從迭代規(guī)劃、任務分配、開發(fā)、測試、安全、質量、發(fā)布直到運維的一站式研發(fā)協(xié)作.這也將傳統(tǒng)的政府軟件交付模式進行了左移,可以更好地將安全活動貫徹到開發(fā)生命周期中,充分利用DevSecOps,提升數(shù)字政府業(yè)務的內生安全.本文通過該項目的實踐,從執(zhí)行和監(jiān)管2個視角,闡述DevSecOps在數(shù)字政府的實踐應用成效.
該項目建設前,開發(fā)商承接政府部門的開發(fā)項目后,通過企業(yè)內部的開發(fā)流程與體系,結合項目需要,開展相關研發(fā)工作,按照項目交付期限,將開發(fā)好的軟件部署到用戶的生產環(huán)境.一方面,信息壁壘導致開發(fā)商無法有效使用政府現(xiàn)有資源,開發(fā)效率得不到提升;另一方面,沒有明確的開發(fā)技術規(guī)范,軟件可能存在一些安全風險,導致上線周期拉長或不安全的上線.
因此,對于開發(fā)企業(yè)或者團隊來說,在數(shù)字政府的具體項目中執(zhí)行應用安全開發(fā)體系和DevSecOps技術,優(yōu)化傳統(tǒng)的開發(fā)工作流程,降低安全風險提高工作效率,是數(shù)字政府的應用安全開發(fā)體系的核心價值所在.
該項目建設后,提供了一套面向政務系統(tǒng)開發(fā)領域的應用生產全生命周期的管控系統(tǒng),提供了全省統(tǒng)一的低代碼聚合系統(tǒng)和低代碼工具,建設了統(tǒng)一的公共組件庫,將政府的應用資源最大化利用,以適應快速響應、快速開發(fā)、快速迭代的需求.并建立相關標準規(guī)范和制度,要求各政府部門的開發(fā)工作都在這套體系運行.
開發(fā)商在接到政府的項目需求后,在所建設的應用管控系統(tǒng)中啟動開發(fā)任務,可通過相關開發(fā)工具進行開發(fā)工作.在開發(fā)之前,開發(fā)人員可通過SCA工具對系統(tǒng)進行安全框架設計和選型,提前避免使用有安全漏洞的開源框架、開源組件,避免引用一些被篡改的非法組件或不符合知識產權許可證授權的組件.進入開發(fā)編程后,開發(fā)人員使用SAST開展代碼掃描,不斷對開發(fā)的代碼進行安全檢測,通過IAST檢測工具進行自動化的安全性測試,各類安全檢測工具的集成,使得安全檢測變得高效透明,特別適合數(shù)字政府業(yè)務系統(tǒng)開發(fā)人員多、分支多、迭代快的特點,對傳統(tǒng)的開發(fā)模式幾乎無影響,極大地提高了檢測效率,非常有利于持續(xù)提高業(yè)務系統(tǒng)的安全性.
對于開發(fā)企業(yè)和團隊來說,如何在保證安全的情況下提升效率是關鍵,而對于政府單位,原有的建設模式其開發(fā)過程不可見,安全對于管理者來說都是黑匣子,因此開發(fā)測試過程的監(jiān)測管理是關鍵.從立項、開發(fā)到最終上線的整個過程中,管理人員均可以通過DevSecOps將安全統(tǒng)一地管理起來.
該項目建設后,建設管理單位首先從管理制度上進行約束,同時對管理規(guī)范的執(zhí)行情況進行定期審查.配置安全基線,設定基本的軟件安全要求,這些基線和要求都集成到DevSecOps流程中,并設置安全質量控制門,這樣該業(yè)務系統(tǒng)的所有相關人員均在受控的流程中執(zhí)行統(tǒng)一的安全規(guī)范,杜絕了因管理缺失導致的安全隱患.
開發(fā)人員在系統(tǒng)中所做的相關安全檢測,其數(shù)據(jù)都可以呈現(xiàn)到政府單位管理員進行查看,保證整個開發(fā)過程的安全透明.
在系統(tǒng)開發(fā)完成后,管理單位結合上線安全審核流程規(guī)范的要求,通過DevSecOps對業(yè)務系統(tǒng)、相關人員、源代碼等進行多緯度的量化評估,獲得客觀真實的數(shù)據(jù).如果發(fā)現(xiàn)不符合安全要求即可以有針對地讓相關人員進行整改,直到符合安全要求后才允許系統(tǒng)上線.
系統(tǒng)上線后,管理單位使用部署在業(yè)務系統(tǒng)應用服務器上的RASP工具,記錄和查看業(yè)務系統(tǒng)的安全運行日志,分析可能面臨的安全威脅,形成安全簡報,指導運維人員做好日常的安全運維保障工作.最終實現(xiàn)從開發(fā)、測試、上線到運行的全流程應用安全監(jiān)管.
持續(xù)且專注的自動化安全對DevSecOps的實現(xiàn)至關重要.將安全自動化融入到軟件開發(fā)的生命周期中,通過自動化的方式減少安全漏洞檢測和響應的時間,降低成本的同時也提高了應用程序的安全性,從而加速產品的安全交付[8].在政府的信息化項目交付中,建立人人對安全負責的DevSecOps流程將是大勢所趨,具備更好的優(yōu)化流程、提前落地安全措施才能從根本上收斂安全問題,真正實現(xiàn)快速交付的應用開發(fā)安全體系.
技術賦能數(shù)字政府業(yè)務應用的快速安全開發(fā),而好的監(jiān)管才能保障政府應用開發(fā)的長久有效運行.因此,數(shù)字政府的重大項目可引入第三方測評,在規(guī)劃階段評估項目建設方案,在交付階段檢測項目建設內容,在運營階段評估項目運行情況.可以委托第三方測評機構結合已建的DevSecOps方法流程對業(yè)務系統(tǒng)開展充分的軟件安全性檢測,響應國家法律法規(guī)和政策要求,切實提高軟件安全水平.