摘要:近年來(lái),隨著各種新技術(shù)新理念在各行各業(yè)的廣泛應(yīng)用,各類軟件安全問(wèn)題也正在影響軟件的使用。尤其在金融領(lǐng)域,軟件安全不僅關(guān)系到客戶的個(gè)人信息安全,而且還直接影響到人身和財(cái)產(chǎn)安全。源代碼是軟件的根本,對(duì)軟件的源代碼安全檢測(cè)是保證軟件安全最有效的措施之一。只有源代碼中的安全缺陷盡早在開(kāi)發(fā)生命周期中消除,應(yīng)用安全風(fēng)險(xiǎn)才能得到更好的控制,從而最終的軟件產(chǎn)品具備更好的安全性。文章結(jié)合源代碼安全測(cè)試工具對(duì)軟件安全測(cè)試開(kāi)展研究,基于微服務(wù)架構(gòu)自主研發(fā)源代碼安全檢測(cè)平臺(tái),提供了一個(gè)方便、直觀、易用的軟件安全檢測(cè)平臺(tái)。
關(guān)鍵詞:微服務(wù);源代碼安全檢測(cè);信息安全
中圖分類號(hào):TP393.08" 文獻(xiàn)標(biāo)志碼:A
0 引言
隨著數(shù)字化、信息化和智能化的發(fā)展以及在監(jiān)管合規(guī)趨嚴(yán)的形勢(shì)下,軟件安全性越來(lái)越受到重視。金融機(jī)構(gòu)的產(chǎn)品迭代更新頻繁,產(chǎn)品安全性面臨更大的挑戰(zhàn)。為了更好地分析和識(shí)別外在、內(nèi)在和潛在的安全風(fēng)險(xiǎn),金融機(jī)構(gòu)應(yīng)及時(shí)在軟件開(kāi)發(fā)生命周期中及時(shí)識(shí)別、登記、采取應(yīng)對(duì)措施,以期在軟件上線前解決絕大部分安全風(fēng)險(xiǎn)。由于絕大部分的軟件安全風(fēng)險(xiǎn)是軟件的源代碼缺陷引起的,因此在軟件開(kāi)發(fā)階段發(fā)現(xiàn)和識(shí)別源代碼缺陷越發(fā)重要。一旦軟件源代碼的缺陷被攻擊者利用,就會(huì)導(dǎo)致客戶財(cái)產(chǎn)信息被竊、重要信息數(shù)據(jù)丟失、應(yīng)用服務(wù)器性能下降等,更有可能危及個(gè)人信息數(shù)據(jù)的安全。保證軟件的安全可靠性就是保障軟件源代碼。通過(guò)軟件源代碼安全檢測(cè)是提高軟件安全性、保證軟件質(zhì)量的重要途徑之一[1]。目前,各類商業(yè)、開(kāi)源的源代碼安全檢測(cè)工具眾多,如何高效、合理地開(kāi)展實(shí)施代碼檢測(cè)具有重要意義。
1 源代碼安全檢測(cè)現(xiàn)狀和探索
近年來(lái),隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展和快速迭代更新,軟件安全越來(lái)越受到重視。一方面各監(jiān)管機(jī)構(gòu)加強(qiáng)信息安全檢測(cè),一旦發(fā)現(xiàn)軟件安全漏洞立即通知相關(guān)方進(jìn)行整改。另一方面,在軟件開(kāi)發(fā)生命周期階段,開(kāi)展源代碼檢測(cè)可以節(jié)約后期安全投入成本。由于產(chǎn)品迭代更新快、業(yè)務(wù)情況復(fù)雜多變,在項(xiàng)目開(kāi)發(fā)過(guò)程中采用多種編程語(yǔ)言、開(kāi)發(fā)框架,不僅增加代碼掃描分析和檢測(cè)的成本,而且耗時(shí)高、效率低。正是基于上述一些因素,江蘇省農(nóng)村信用社聯(lián)合社(以下簡(jiǎn)稱“江蘇省聯(lián)社”)定制研發(fā)應(yīng)用軟件源代碼檢測(cè)平臺(tái),通過(guò)江蘇省聯(lián)社專用網(wǎng)絡(luò)面向各轄區(qū)內(nèi)農(nóng)商銀行用戶提供自助的靜態(tài)源代碼檢測(cè)服務(wù)。平臺(tái)的目標(biāo)是面向基層農(nóng)商行用戶提供自助式、Web形式的在線源代碼檢測(cè)功能,其特點(diǎn)如下。
(1)以Web平臺(tái)方式提供在線自助式的源代碼安全檢測(cè)服務(wù),便于用戶在應(yīng)用開(kāi)發(fā)過(guò)程中靈活地進(jìn)行源代碼文件檢測(cè)、分析缺陷信息、查看報(bào)告等。
(2)平臺(tái)以私有化云的部署方式,多用戶并發(fā)訪問(wèn),后期根據(jù)自身需要增加用戶數(shù)量,無(wú)需增加任何軟硬件資源擴(kuò)展成本。用戶可以實(shí)時(shí)查看哪些掃描引擎被調(diào)度,從而選擇有空閑的掃描引擎開(kāi)展工作。平臺(tái)中所使用的掃描引擎支持現(xiàn)有主流源代碼檢測(cè)工具,可實(shí)現(xiàn)不同類型功能的源代碼安全性檢測(cè)。一般有基于源代碼質(zhì)量的檢測(cè)引擎,也有檢測(cè)源代碼安全方面的檢測(cè)引擎,還有兩者兼有的引擎。源碼質(zhì)量的檢測(cè)引擎偏向于檢測(cè)源代碼中的錯(cuò)誤處理、注釋質(zhì)量、性能問(wèn)題、代碼規(guī)范等。源碼的安全檢測(cè)引擎偏向于檢測(cè)源代碼中的安全問(wèn)題,如SQL注入、命令注入、弱口令、XML注入等。
(3)平臺(tái)采用微服務(wù)組件化設(shè)計(jì)方式,將系統(tǒng)按照核心功能劃分為一個(gè)個(gè)微服務(wù)。各服務(wù)之間采用輕量級(jí)的通信機(jī)制,構(gòu)建獨(dú)立的自動(dòng)化運(yùn)行機(jī)制,從而減少功能迭代中的重復(fù)設(shè)計(jì),降低后期開(kāi)發(fā)和維護(hù)成本,提升了一致性的用戶體驗(yàn)[2]。
(4)平臺(tái)集成SVN、Git等版本控制工具,通過(guò)安全方式提交源碼,構(gòu)建代碼存儲(chǔ)、流轉(zhuǎn)、使用、銷毀全生命周期安全管控,有效避免各個(gè)轄內(nèi)農(nóng)商行代碼等數(shù)據(jù)泄漏以及防止第三方窺探。
2 微服務(wù)架構(gòu)原理
微服務(wù)是一些協(xié)同工作的小而自治的服務(wù)[3],且具有高內(nèi)聚低耦合。微服務(wù)架構(gòu)主要將傳統(tǒng)單體架構(gòu)下各個(gè)模塊的業(yè)務(wù)功能轉(zhuǎn)變?yōu)槲⒎?wù)架構(gòu)中的各個(gè)業(yè)務(wù)功能微服務(wù)。同時(shí),微服務(wù)架構(gòu)中各模塊之間的調(diào)用轉(zhuǎn)變?yōu)槲⒎?wù)之間的調(diào)用[4]。微服務(wù)在開(kāi)發(fā)、測(cè)試、部署、維護(hù)等方面降低了應(yīng)用系統(tǒng)的耦合度,提高了系統(tǒng)的擴(kuò)展性和靈活性,使得各個(gè)服務(wù)之間相對(duì)獨(dú)立、互不影響。微服務(wù)不僅降低了應(yīng)用系統(tǒng)的耦合度,而且又能提高各模塊之間的效率。一旦有業(yè)務(wù)功能需要改變時(shí),只需要改變對(duì)應(yīng)的服務(wù)即可,不僅提升了平臺(tái)檢測(cè)的可擴(kuò)展性,而且也提升了平臺(tái)的穩(wěn)定性。在本文中,將平臺(tái)根據(jù)業(yè)務(wù)功能劃分成多個(gè)微服務(wù),每個(gè)微服務(wù)只關(guān)注單一的業(yè)務(wù)功能。
平臺(tái)采用微服務(wù)包括Eureka服務(wù)、頁(yè)面前端服務(wù)、后臺(tái)轉(zhuǎn)發(fā)服務(wù)、Minio文件服務(wù)、系統(tǒng)管理服務(wù)、業(yè)務(wù)處理服務(wù)、Redis緩存服務(wù)、隊(duì)列處理服務(wù)、構(gòu)建掃描服務(wù)。平臺(tái)關(guān)鍵的2個(gè)微服務(wù)有業(yè)務(wù)處理服務(wù)和構(gòu)建掃描服務(wù)。業(yè)務(wù)處理服務(wù)主要包括項(xiàng)目管理、缺陷管理。構(gòu)建掃描服務(wù)是管理自動(dòng)構(gòu)建掃描平臺(tái),多個(gè)設(shè)備注冊(cè),由頁(yè)面請(qǐng)求分發(fā)處理并可指定某一個(gè)微服務(wù)執(zhí)行任務(wù)。
3 源代碼安全檢測(cè)引擎
目前,市場(chǎng)上源代碼安全檢測(cè)工具有Fortify SCA、CheckMarx CxSuite、Coverity Preven、Klocwork、FindBugs等,各工具各有其優(yōu)缺點(diǎn)。Fortify SCA是全球前十大軟件公司Micro Focus旗下產(chǎn)品。Fortify已經(jīng)連續(xù)十年,在全球最具權(quán)威的IT研究咨詢機(jī)構(gòu)Gartner研究報(bào)告中位于領(lǐng)導(dǎo)者(leaders)地位。Fortify SCA以最大和最全面的安全編碼規(guī)則為基礎(chǔ)。該規(guī)則中的漏洞類別達(dá)到800+種,且支持27種開(kāi)發(fā)語(yǔ)言以及所有主流操作系統(tǒng)。為了發(fā)現(xiàn)更多源代碼中存在的安全問(wèn)題,本文優(yōu)先考慮該軟件。
Fortify SCA是國(guó)外一款產(chǎn)品,標(biāo)準(zhǔn)化基準(zhǔn)庫(kù)龐大。該軟件主要基于靜態(tài)分析的源代碼安全測(cè)試工具,它從數(shù)據(jù)流、語(yǔ)義、結(jié)構(gòu)、控制流、配置流等對(duì)應(yīng)用軟件的源代碼進(jìn)行靜態(tài)分析,靜態(tài)分析的過(guò)程中與它特有的軟件規(guī)則庫(kù)進(jìn)行全面的匹配、查找,從而發(fā)現(xiàn)源代碼中存在的安全缺陷。源代碼安全檢測(cè)的結(jié)果分為4個(gè)安全等級(jí),包括嚴(yán)重、高危、中危、低危。每個(gè)檢測(cè)的問(wèn)題不但包含詳細(xì)的安全漏洞信息,還有相關(guān)的安全說(shuō)明并提供修復(fù)意見(jiàn)[5]。
4 設(shè)計(jì)與實(shí)現(xiàn)
源代碼安全檢測(cè)是對(duì)軟件源代碼中的安全缺陷進(jìn)行檢測(cè),提前發(fā)現(xiàn)并識(shí)別可能導(dǎo)致安全問(wèn)題的編碼缺陷或者漏洞,讓開(kāi)發(fā)人員在項(xiàng)目上線前消除軟件漏洞[6]。源代碼檢測(cè)工具雖然能夠快速找出代碼中存在的漏洞、危險(xiǎn)函數(shù)等內(nèi)容,但是它只能作為輔助工具來(lái)使用。一是源代碼檢測(cè)工具在執(zhí)行過(guò)程全都是半自動(dòng)方式,需要人工介入執(zhí)行和分析。二是源代碼檢測(cè)工具可以檢測(cè)到許多問(wèn)題,但有的時(shí)候會(huì)產(chǎn)生誤報(bào)或漏報(bào),后期需要人工參與復(fù)核來(lái)確保檢測(cè)結(jié)果的準(zhǔn)確性。一般人工需要對(duì)平臺(tái)檢測(cè)到的危險(xiǎn)列表逐一確認(rèn)、分析、排除誤報(bào)、驗(yàn)證等,還需要用戶將再次修復(fù)的源代碼提交檢測(cè),如此反復(fù),直至滿足出口標(biāo)準(zhǔn)。這些關(guān)鍵的環(huán)節(jié)不僅耗時(shí)多,效率低,而且在一定程度上無(wú)法達(dá)到預(yù)期效果。
為了提升源代碼掃描的準(zhǔn)確率和掃描效率,減輕掃描人員在項(xiàng)目實(shí)施過(guò)程中的負(fù)擔(dān),優(yōu)化測(cè)試實(shí)施流程,江蘇省聯(lián)社積極探索適合自身實(shí)際的源代碼安全檢測(cè)方案,將代碼掃描流程融到研發(fā)流程體系中,借助微服務(wù)架構(gòu)和源代碼安全檢測(cè)工具相結(jié)合,實(shí)現(xiàn)源代碼安全流程自主檢測(cè),簡(jiǎn)化源代碼檢測(cè)過(guò)程,提升檢測(cè)效率,從根源上提升源代碼質(zhì)量。
4.1 設(shè)計(jì)原則
4.1.1 系統(tǒng)化原則
一是平臺(tái)從總體規(guī)劃設(shè)計(jì)、規(guī)范管理制度、強(qiáng)化管理工作,為項(xiàng)目組提供管理決策支持。二是從系統(tǒng)整體看待源代碼安全檢測(cè)工作,要求各個(gè)模塊既相互獨(dú)立性,又有機(jī)結(jié)合。平臺(tái)要堅(jiān)持從整體考慮,功能結(jié)構(gòu)化,設(shè)計(jì)最優(yōu)化,復(fù)雜度最小化。
4.1.2 易用原則
平臺(tái)提供統(tǒng)一Web入口,直觀展示掃描信息,便于項(xiàng)目組快速、準(zhǔn)確定位源代碼中的安全漏洞、業(yè)務(wù)邏輯缺陷等問(wèn)題,并依據(jù)提供的專業(yè)修復(fù)建議,快速修復(fù)。
4.2 功能模塊
在軟件開(kāi)發(fā)的過(guò)程中,使用檢測(cè)平臺(tái)既可以幫助開(kāi)發(fā)團(tuán)隊(duì)快速查找、定位、修復(fù)和管理軟件代碼安全問(wèn)題,又可以節(jié)約代碼安全分析成本。源代碼檢測(cè)平臺(tái)主要包含項(xiàng)目管理、權(quán)限管理、代碼掃描、缺陷管理4個(gè)主要功能。
4.2.1 項(xiàng)目管理
平臺(tái)展示和維護(hù)項(xiàng)目相關(guān)的基礎(chǔ)信息等內(nèi)容,包括項(xiàng)目類型、需求類型、項(xiàng)目狀態(tài)、子系統(tǒng)等。該平臺(tái)可支持對(duì)接項(xiàng)目管理平臺(tái),通過(guò)項(xiàng)目立項(xiàng)時(shí)即可同步相關(guān)信息,避免重復(fù)維護(hù)數(shù)據(jù)。
4.2.2 權(quán)限管理
為了更好地控制各個(gè)角色權(quán)限,平臺(tái)加入對(duì)應(yīng)角色的訪問(wèn)控制策略。各個(gè)角色分類、分組設(shè)置以及對(duì)不同角色設(shè)置通用配置項(xiàng)。多法人相互隔離,相互安全可控。同時(shí),平臺(tái)管理員根據(jù)用戶情況設(shè)置適當(dāng)?shù)牟藛芜x項(xiàng),如項(xiàng)目經(jīng)理可分配、轉(zhuǎn)移、審計(jì)缺陷情況,而項(xiàng)目組員只可以分析、確認(rèn)修復(fù)缺陷。通過(guò)合理策略配置和代碼掃描權(quán)限的管理,可以有效保護(hù)源代碼的安全性和完整性。
4.2.3 代碼掃描
代碼掃描模塊包括自動(dòng)構(gòu)建管理、增量掃描管理、計(jì)劃任務(wù)、內(nèi)存使用情況。一是通過(guò)源代碼掃描引擎后臺(tái)執(zhí)行代碼掃描任務(wù)。二是用戶根據(jù)代碼改動(dòng)情況,若是第一次檢測(cè)可以采用在前端通過(guò)SVN、GIT、ZIP壓縮包上傳等方式,掃描檢測(cè)系統(tǒng)自動(dòng)解壓后臺(tái)進(jìn)行代碼掃描。若是檢測(cè)過(guò)多次,用戶可選擇增量代碼檢測(cè),上傳增量class文件即可完成增量代碼檢測(cè)。三是用戶在計(jì)劃任務(wù)欄中既可以查看正在執(zhí)行的進(jìn)度以及失敗原因,又可以按需定制執(zhí)行代碼檢測(cè)任務(wù)。四是平臺(tái)引入非缺陷庫(kù)比對(duì)功能,主要過(guò)程包括信息收集、預(yù)處理和標(biāo)準(zhǔn)化、特征提取、結(jié)果對(duì)比與分類、結(jié)果分析和修正。以上步驟可以大幅度減輕開(kāi)發(fā)人員識(shí)別源代碼缺陷的難度,更準(zhǔn)確地識(shí)別真正缺陷,降低誤報(bào),更好幫助開(kāi)發(fā)人員理解代碼質(zhì)量和潛在的風(fēng)險(xiǎn)。
4.2.4 缺陷管理
所有源碼掃描檢測(cè)結(jié)果在缺陷信息管理中詳細(xì)展示,包括問(wèn)題描述、問(wèn)題數(shù)量、缺陷等級(jí)、代碼塊、文件路徑、修復(fù)建議等。各個(gè)項(xiàng)目組只能查看本項(xiàng)目組下相關(guān)項(xiàng)目代碼檢測(cè)信息。在缺陷信息中,用戶可選擇多種方式將缺陷信息導(dǎo)出,如一鍵導(dǎo)出、一鍵轉(zhuǎn)移、缺陷轉(zhuǎn)移。用戶通過(guò)Excel文檔方式導(dǎo)入分析確認(rèn)的結(jié)果并提交項(xiàng)目組確認(rèn),最終形成源代碼安全檢測(cè)報(bào)告。
5 結(jié)語(yǔ)
未來(lái)江蘇省聯(lián)社將持續(xù)夯實(shí)軟件源碼安全能力。(1)將持續(xù)提升源碼檢測(cè)質(zhì)量,基于自定義檢測(cè)規(guī)則的發(fā)現(xiàn)能力,構(gòu)建全方位源碼風(fēng)險(xiǎn)防范能力。(2)推動(dòng)以源碼檢測(cè)為核心的安全風(fēng)險(xiǎn)閉環(huán)管理,將源碼安全和信息安全結(jié)合起來(lái),用已有的網(wǎng)絡(luò)安全能力為源碼安全提供有力的支撐和保障。(3)建立源碼安全風(fēng)險(xiǎn)特征庫(kù),推動(dòng)開(kāi)發(fā)人員深入了解并解決源碼安全問(wèn)題,真正實(shí)現(xiàn)安全管理左移。
由于所有軟件安全風(fēng)險(xiǎn)絕大多數(shù)歸根于源碼問(wèn)題,本文結(jié)合行業(yè)實(shí)踐案例,借鑒微服務(wù)架構(gòu)實(shí)現(xiàn)源代碼自助檢測(cè),其檢測(cè)意義在于修復(fù)缺陷,提升開(kāi)發(fā)人員的安全開(kāi)發(fā)意識(shí)并使其在軟件開(kāi)發(fā)過(guò)程中更重視安全因素。在軟件開(kāi)發(fā)生命周期階段,平臺(tái)化的工具發(fā)現(xiàn)源碼中的安全風(fēng)險(xiǎn),進(jìn)一步降低缺陷密度,提升代碼質(zhì)量,讓代碼更安全。
參考文獻(xiàn)
[1]李舟軍,張俊賢,廖湘科,等.軟件安全漏洞檢測(cè)技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2015(4):717-732.
[2]楊宇,焦麗琴.基于微服務(wù)的企業(yè)應(yīng)用設(shè)計(jì)與實(shí)現(xiàn)[J].電子科學(xué)技術(shù),2016(5):623-625.
[3]紐曼.微服務(wù)設(shè)計(jì)[M].北京:人民郵電出版社,2016.
[4]熊益益.基于微服務(wù)架構(gòu)的電商平臺(tái)的研究與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2019.
[5]張超永,張玉中,浮明軍,等.基于Fortify的源代碼安全測(cè)試規(guī)則自定義研究[J].電腦編程技巧與維護(hù),2019(2):168-171.
[6]王躍.源代碼安全漏洞檢測(cè)方法研究[D].武漢:華中科技大學(xué),2013.
Research on source code security detection technology based on microservices architecture
Abstract: In recent years, with the widespread application of various new technologies and concepts in various industries, various software security issues are also affecting the use of software. Especially in the financial field, software security is not only related to the personal information security of customers, but also directly affects personal and property security. Source code is the foundation of software, and source code security checks are one of the most effective measures to ensure software security. Only by eliminating security vulnerabilities in the source code as early as possible in the development lifecycle can application security risks be better controlled, resulting in better security for the final software product. This article combines source code security testing tools to conduct research on software security testing. Based on the microservices architecture, we independently developed a source code security testing platform, providing a convenient, intuitive, and easy-to-use software security testing platform.
Key words: microservices; source code security detection; information security