工商銀行軟件開發(fā)中心應(yīng)用安全支撐體系建設(shè)
原創(chuàng)作者 | 中國工商銀行軟件開發(fā)中心
一、工行軟件開發(fā)中心應(yīng)用安全支撐體系概述
隨著安全成為數(shù)字時(shí)代最重要的問題之一,越來越多的企業(yè)已經(jīng)整合了 DevSecOps (DevSecOps 是“開發(fā)、安全和運(yùn)營”的縮寫,它可在軟件開發(fā)生命周期的各個(gè)階段自動(dòng)集成安全性-從最初的設(shè)計(jì)到集成、測試、部署,一直到軟件交付)生命周期,從而進(jìn)一步強(qiáng)化安全,同時(shí) DevSecOps 也被用于簡化治理和提高可見性。
DevSecOps 的主要思想是安全應(yīng)該遵循的“左移”方法,而不是事后修復(fù)和彌補(bǔ)。根據(jù)最新的 DevSecOps 趨勢,大約 40% 的企業(yè)有在使用 DAST (Dynamic Application Security Testing:動(dòng)態(tài)應(yīng)用程序安全測試,模擬黑客行為對(duì)應(yīng)用程序進(jìn)行動(dòng)態(tài)攻擊,分析應(yīng)用程序的反應(yīng),從而確定該Web應(yīng)用是否易受攻擊)測試,50% 在使用 SAST(Static Application Security Testing:靜態(tài)應(yīng)用程序安全測試,通常在編碼階段分析應(yīng)用程序的源代碼或二進(jìn)制文件的語法、結(jié)構(gòu)、過程、接口等來發(fā)現(xiàn)程序代碼存在的安全漏洞),其余的企業(yè)通過掃描依賴項(xiàng)和容器來確保軟件安全。
工行軟件開發(fā)中心應(yīng)用安全支撐體系建設(shè)圍繞安全左移、過程管控和安全右移三個(gè)方面開展。在安全左移方面,通過自研ide插件提前發(fā)現(xiàn)安全風(fēng)險(xiǎn);在過程管控方面,通過持續(xù)集成流水線識(shí)別并阻斷安全風(fēng)險(xiǎn),并通過 DAST 和 IAST 持續(xù)檢測安全問題;在安全右移方面,通過安全監(jiān)控,完善可疑流量報(bào)警和攻擊行為阻斷,通過安全右移來反哺過程管控。安全團(tuán)隊(duì)通過這些措施,將安全流程和工具更早的納入軟件開發(fā)生命周期(SDLC)中,在研發(fā)測試階段將安全問題檢出率提高到 99.22%。
圖片
二、當(dāng)前主要問題及挑戰(zhàn)
從企業(yè)內(nèi)部信息安全團(tuán)隊(duì)的視角看來,企業(yè)內(nèi)部在整個(gè)研發(fā)流程中遇到的風(fēng)險(xiǎn)點(diǎn)較多,通過對(duì)各種攻擊面的梳理和分析之后,我們發(fā)現(xiàn)在研發(fā)流程中經(jīng)常提及的風(fēng)險(xiǎn)主要包含代碼安全風(fēng)險(xiǎn)、供應(yīng)鏈相關(guān)的風(fēng)險(xiǎn)以及服務(wù)器安全三大類,下文將逐一展開。
安全問題的引入-構(gòu)建-發(fā)布過程,往往和企業(yè)內(nèi)部的持續(xù)集成流水線是高度一致的,簡單來說可以抽象成下圖形式:
圖片
開發(fā)人員在編寫完代碼后提交到源代碼管理平臺(tái),然后觸發(fā) CI/CD 的構(gòu)建編譯打包流程,在這個(gè)過程中,構(gòu)建平臺(tái)的服務(wù)器會(huì)從依賴倉庫(大型企業(yè)往往會(huì)自己建立 nexus 的私服)拉取所需的依賴包,完成構(gòu)建編譯之后,做成鏡像推送到鏡像倉庫,通過項(xiàng)目分發(fā)平臺(tái)分發(fā)到生產(chǎn)環(huán)境上,完成系統(tǒng)的上線。開發(fā)視角看習(xí)以為常,但安全視角看危機(jī)四伏。
1.供應(yīng)鏈安全
在依賴引入的過程中,如果引入了有問題的組件,則相當(dāng)于引入了風(fēng)險(xiǎn),這也是目前最典型的供應(yīng)鏈攻擊手段,通過我們對(duì)各個(gè)源的安全調(diào)查和分析后發(fā)現(xiàn),“投毒”的重災(zāi)區(qū)在 Python 和 NodeJS 技術(shù)棧,投毒的主要目的是控制設(shè)備進(jìn)行“挖礦。(一個(gè)原因是因?yàn)榍岸说摹巴诘V”已經(jīng)很成熟,容易被黑產(chǎn)濫用,另外一個(gè)原因是 Python 的機(jī)器學(xué)習(xí)庫相當(dāng)豐富,加上機(jī)器學(xué)習(xí)配套的計(jì)算環(huán)境性能強(qiáng)悍,導(dǎo)致“挖礦”的收益會(huì)比入侵普通 IDC 主機(jī)更高)。由于例子較多,這里就不一一列舉了。
2.服務(wù)器安全
研發(fā)前期,在完成了代碼完整性檢測的前提下,如果流程沒有被篡改或者構(gòu)建平臺(tái)都運(yùn)行正常,一般情況下,出現(xiàn)問題的幾率很低。但如果 CI/CD 平臺(tái)和前面的 Git 一樣被惡意篡改或是破壞,也會(huì)出現(xiàn)安全隱患,SolarWind 事件就是由于這一原因?qū)е碌?,攻擊者?CI/CD 過程中嵌入了“后門”,通過了簽名校驗(yàn),再通過 OTA 分發(fā)補(bǔ)丁之后,出現(xiàn)了讓人震驚的攻擊事件。
3.代碼安全
在軟件開發(fā)環(huán)節(jié),開發(fā)人員因?yàn)樗?、安全意識(shí)的諸多原因,往往會(huì)在開發(fā)過程中引入漏洞,這本身是一件十分正常的事情。但對(duì)于開源軟件而言,因?yàn)閹缀跛腥硕伎梢韵蜷_源項(xiàng)目提交代碼,并且通過審核后就可以 Merge 進(jìn)項(xiàng)目,所以可能有不懷好意的人故意引入有問題的代碼,這種風(fēng)險(xiǎn)實(shí)際上有可能因?yàn)閷徍说氖韬鰧?dǎo)致風(fēng)險(xiǎn)直接被引入。
三、應(yīng)用安全支撐體系建設(shè)
工行軟件開發(fā)中心應(yīng)用安全支撐體系建設(shè)主要圍繞應(yīng)用編寫、應(yīng)用構(gòu)建、應(yīng)用發(fā)布和持續(xù)運(yùn)營這幾個(gè)環(huán)節(jié)來開展,通過在各個(gè)階段提供完善的工具鏈支持,實(shí)現(xiàn)對(duì)各階段的安全賦能。
1.應(yīng)用編寫環(huán)節(jié)
工行通過自研 IDE 插件,在開發(fā)人員的編碼階段對(duì)代碼及引入的依賴進(jìn)行準(zhǔn)實(shí)時(shí)檢測,根據(jù)風(fēng)險(xiǎn)特征匹配,提示開發(fā)人員在編碼早期就完成對(duì)安全問題的修復(fù),減少后期修復(fù)成本。這其實(shí)也是“安全左移”的最佳實(shí)踐之一, 即將安全程序(代碼審查、分析、測試等等)移動(dòng)到軟件開發(fā)生命周期(SDLC)早期階段,從而防止缺陷產(chǎn)生和盡早找出漏洞。通過在早期階段修復(fù)問題,防止其演變?yōu)樾杌ㄙM(fèi)巨資加以修復(fù)的災(zāi)難性漏洞,進(jìn)而達(dá)到節(jié)省時(shí)間和金錢的目的。
2.應(yīng)用構(gòu)建和發(fā)布環(huán)節(jié)
工行軟件開發(fā)中心通過在應(yīng)用構(gòu)建和發(fā)布階段建立軟件物料清單(SBOM)來實(shí)現(xiàn)對(duì)軟件資產(chǎn)的透視,實(shí)現(xiàn)安全威脅的快速發(fā)現(xiàn)和清除。應(yīng)用軟件通常由大量的開源代碼、自研代碼和第三方庫組成。由于除了直接引用的開源代碼、第三方庫之外,在構(gòu)建階段開源代碼常常會(huì)引入額外的依賴項(xiàng),因此在軟件開發(fā)階段生成 SBOM,對(duì)于提高軟件的透明度、提升安全事件處理效率有著重要意義。工行軟件開發(fā)中心在DevSecOps 流程上集成軟件物料清單,通過在 CI/CD 的標(biāo)準(zhǔn)實(shí)踐,盡量覆蓋絕大多數(shù)的場景(業(yè)務(wù)應(yīng)用系統(tǒng)、Hadoop 作業(yè)等數(shù)據(jù)服務(wù)、Puppet 等運(yùn)維服務(wù)等)。SBOM 包含的信息會(huì)隨流水線的推進(jìn)不斷更新,SBOM 將作為軟件產(chǎn)品的一部分,在統(tǒng)一的存儲(chǔ)庫中存儲(chǔ)和管理。SBOM 作為軟件信息數(shù)據(jù)源為安全運(yùn)營體系中各應(yīng)用提供軟件信息數(shù)據(jù)支撐,包括但不限于安全資產(chǎn)管理、安全信息與事件管理(SIEM)、威脅情報(bào)管理等。SBOM 與安全運(yùn)營平臺(tái)上各項(xiàng)業(yè)務(wù)功能集成后,在提高對(duì)組件漏洞的可見性的同時(shí),也大幅提升對(duì)風(fēng)險(xiǎn)的主動(dòng)響應(yīng)和風(fēng)險(xiǎn)預(yù)防能力。
3.持續(xù)運(yùn)營環(huán)節(jié)
工行軟件開發(fā)中心通過建設(shè)安全運(yùn)營平臺(tái),實(shí)現(xiàn)對(duì)安全風(fēng)險(xiǎn)的可視化及全生命周期管理。企業(yè)組織不能以犧牲運(yùn)行時(shí)安全為代價(jià)整體左移。開發(fā)人員永遠(yuǎn)無法編寫出完美的代碼,也無法在發(fā)布窗口期內(nèi)足夠廣泛地掃描代碼,掃描器的設(shè)計(jì)目的是為了找出遵循明確模式的已知漏洞或弱點(diǎn)。因此,安全團(tuán)隊(duì)通過對(duì)生產(chǎn)運(yùn)行流量的監(jiān)控,識(shí)別出威脅與攻擊流量并告警,通過建設(shè)風(fēng)險(xiǎn)告警與資產(chǎn)關(guān)聯(lián)的基礎(chǔ)設(shè)施,實(shí)現(xiàn)對(duì)被攻擊資產(chǎn)的快速定位與及時(shí)修復(fù),通過安全右移來反哺過程管控。
四、結(jié)語
羅馬不是一日建成的,即使確定了整體應(yīng)用安全支撐平臺(tái)建設(shè)需求和建設(shè)的方向,但落地仍然需要分階段完成。正如建設(shè)其他的安全子系統(tǒng)一樣,后續(xù)工行將持續(xù)從智能化、合規(guī)性和多層次防御等方面加強(qiáng)應(yīng)用安全支撐體系建設(shè),并在高度變化的威脅環(huán)境中保持戰(zhàn)略優(yōu)勢。