摘要:近年來,隨著各種新技術新理念在各行各業的廣泛應用,各類軟件安全問題也正在影響軟件的使用。尤其在金融領域,軟件安全不僅關系到客戶的個人信息安全,而且還直接影響到人身和財產安全。源代碼是軟件的根本,對軟件的源代碼安全檢測是保證軟件安全最有效的措施之一。只有源代碼中的安全缺陷盡早在開發生命周期中消除,應用安全風險才能得到更好的控制,從而最終的軟件產品具備更好的安全性。文章結合源代碼安全測試工具對軟件安全測試開展研究,基于微服務架構自主研發源代碼安全檢測平臺,提供了一個方便、直觀、易用的軟件安全檢測平臺。
關鍵詞:微服務;源代碼安全檢測;信息安全
中圖分類號:TP393.08" 文獻標志碼:A
0 引言
隨著數字化、信息化和智能化的發展以及在監管合規趨嚴的形勢下,軟件安全性越來越受到重視。金融機構的產品迭代更新頻繁,產品安全性面臨更大的挑戰。為了更好地分析和識別外在、內在和潛在的安全風險,金融機構應及時在軟件開發生命周期中及時識別、登記、采取應對措施,以期在軟件上線前解決絕大部分安全風險。由于絕大部分的軟件安全風險是軟件的源代碼缺陷引起的,因此在軟件開發階段發現和識別源代碼缺陷越發重要。一旦軟件源代碼的缺陷被攻擊者利用,就會導致客戶財產信息被竊、重要信息數據丟失、應用服務器性能下降等,更有可能危及個人信息數據的安全。保證軟件的安全可靠性就是保障軟件源代碼。通過軟件源代碼安全檢測是提高軟件安全性、保證軟件質量的重要途徑之一[1]。目前,各類商業、開源的源代碼安全檢測工具眾多,如何高效、合理地開展實施代碼檢測具有重要意義。
1 源代碼安全檢測現狀和探索
近年來,隨著互聯網技術的不斷發展和快速迭代更新,軟件安全越來越受到重視。一方面各監管機構加強信息安全檢測,一旦發現軟件安全漏洞立即通知相關方進行整改。另一方面,在軟件開發生命周期階段,開展源代碼檢測可以節約后期安全投入成本。由于產品迭代更新快、業務情況復雜多變,在項目開發過程中采用多種編程語言、開發框架,不僅增加代碼掃描分析和檢測的成本,而且耗時高、效率低。正是基于上述一些因素,江蘇省農村信用社聯合社(以下簡稱“江蘇省聯社”)定制研發應用軟件源代碼檢測平臺,通過江蘇省聯社專用網絡面向各轄區內農商銀行用戶提供自助的靜態源代碼檢測服務。平臺的目標是面向基層農商行用戶提供自助式、Web形式的在線源代碼檢測功能,其特點如下。
(1)以Web平臺方式提供在線自助式的源代碼安全檢測服務,便于用戶在應用開發過程中靈活地進行源代碼文件檢測、分析缺陷信息、查看報告等。
(2)平臺以私有化云的部署方式,多用戶并發訪問,后期根據自身需要增加用戶數量,無需增加任何軟硬件資源擴展成本。用戶可以實時查看哪些掃描引擎被調度,從而選擇有空閑的掃描引擎開展工作。平臺中所使用的掃描引擎支持現有主流源代碼檢測工具,可實現不同類型功能的源代碼安全性檢測。一般有基于源代碼質量的檢測引擎,也有檢測源代碼安全方面的檢測引擎,還有兩者兼有的引擎。源碼質量的檢測引擎偏向于檢測源代碼中的錯誤處理、注釋質量、性能問題、代碼規范等。源碼的安全檢測引擎偏向于檢測源代碼中的安全問題,如SQL注入、命令注入、弱口令、XML注入等。
(3)平臺采用微服務組件化設計方式,將系統按照核心功能劃分為一個個微服務。各服務之間采用輕量級的通信機制,構建獨立的自動化運行機制,從而減少功能迭代中的重復設計,降低后期開發和維護成本,提升了一致性的用戶體驗[2]。
(4)平臺集成SVN、Git等版本控制工具,通過安全方式提交源碼,構建代碼存儲、流轉、使用、銷毀全生命周期安全管控,有效避免各個轄內農商行代碼等數據泄漏以及防止第三方窺探。
2 微服務架構原理
微服務是一些協同工作的小而自治的服務[3],且具有高內聚低耦合。微服務架構主要將傳統單體架構下各個模塊的業務功能轉變為微服務架構中的各個業務功能微服務。同時,微服務架構中各模塊之間的調用轉變為微服務之間的調用[4]。微服務在開發、測試、部署、維護等方面降低了應用系統的耦合度,提高了系統的擴展性和靈活性,使得各個服務之間相對獨立、互不影響。微服務不僅降低了應用系統的耦合度,而且又能提高各模塊之間的效率。一旦有業務功能需要改變時,只需要改變對應的服務即可,不僅提升了平臺檢測的可擴展性,而且也提升了平臺的穩定性。在本文中,將平臺根據業務功能劃分成多個微服務,每個微服務只關注單一的業務功能。
平臺采用微服務包括Eureka服務、頁面前端服務、后臺轉發服務、Minio文件服務、系統管理服務、業務處理服務、Redis緩存服務、隊列處理服務、構建掃描服務。平臺關鍵的2個微服務有業務處理服務和構建掃描服務。業務處理服務主要包括項目管理、缺陷管理。構建掃描服務是管理自動構建掃描平臺,多個設備注冊,由頁面請求分發處理并可指定某一個微服務執行任務。
3 源代碼安全檢測引擎
目前,市場上源代碼安全檢測工具有Fortify SCA、CheckMarx CxSuite、Coverity Preven、Klocwork、FindBugs等,各工具各有其優缺點。Fortify SCA是全球前十大軟件公司Micro Focus旗下產品。Fortify已經連續十年,在全球最具權威的IT研究咨詢機構Gartner研究報告中位于領導者(leaders)地位。Fortify SCA以最大和最全面的安全編碼規則為基礎。該規則中的漏洞類別達到800+種,且支持27種開發語言以及所有主流操作系統。為了發現更多源代碼中存在的安全問題,本文優先考慮該軟件。
Fortify SCA是國外一款產品,標準化基準庫龐大。該軟件主要基于靜態分析的源代碼安全測試工具,它從數據流、語義、結構、控制流、配置流等對應用軟件的源代碼進行靜態分析,靜態分析的過程中與它特有的軟件規則庫進行全面的匹配、查找,從而發現源代碼中存在的安全缺陷。源代碼安全檢測的結果分為4個安全等級,包括嚴重、高危、中危、低危。每個檢測的問題不但包含詳細的安全漏洞信息,還有相關的安全說明并提供修復意見[5]。
4 設計與實現
源代碼安全檢測是對軟件源代碼中的安全缺陷進行檢測,提前發現并識別可能導致安全問題的編碼缺陷或者漏洞,讓開發人員在項目上線前消除軟件漏洞[6]。源代碼檢測工具雖然能夠快速找出代碼中存在的漏洞、危險函數等內容,但是它只能作為輔助工具來使用。一是源代碼檢測工具在執行過程全都是半自動方式,需要人工介入執行和分析。二是源代碼檢測工具可以檢測到許多問題,但有的時候會產生誤報或漏報,后期需要人工參與復核來確保檢測結果的準確性。一般人工需要對平臺檢測到的危險列表逐一確認、分析、排除誤報、驗證等,還需要用戶將再次修復的源代碼提交檢測,如此反復,直至滿足出口標準。這些關鍵的環節不僅耗時多,效率低,而且在一定程度上無法達到預期效果。
為了提升源代碼掃描的準確率和掃描效率,減輕掃描人員在項目實施過程中的負擔,優化測試實施流程,江蘇省聯社積極探索適合自身實際的源代碼安全檢測方案,將代碼掃描流程融到研發流程體系中,借助微服務架構和源代碼安全檢測工具相結合,實現源代碼安全流程自主檢測,簡化源代碼檢測過程,提升檢測效率,從根源上提升源代碼質量。
4.1 設計原則
4.1.1 系統化原則
一是平臺從總體規劃設計、規范管理制度、強化管理工作,為項目組提供管理決策支持。二是從系統整體看待源代碼安全檢測工作,要求各個模塊既相互獨立性,又有機結合。平臺要堅持從整體考慮,功能結構化,設計最優化,復雜度最小化。
4.1.2 易用原則
平臺提供統一Web入口,直觀展示掃描信息,便于項目組快速、準確定位源代碼中的安全漏洞、業務邏輯缺陷等問題,并依據提供的專業修復建議,快速修復。
4.2 功能模塊
在軟件開發的過程中,使用檢測平臺既可以幫助開發團隊快速查找、定位、修復和管理軟件代碼安全問題,又可以節約代碼安全分析成本。源代碼檢測平臺主要包含項目管理、權限管理、代碼掃描、缺陷管理4個主要功能。
4.2.1 項目管理
平臺展示和維護項目相關的基礎信息等內容,包括項目類型、需求類型、項目狀態、子系統等。該平臺可支持對接項目管理平臺,通過項目立項時即可同步相關信息,避免重復維護數據。
4.2.2 權限管理
為了更好地控制各個角色權限,平臺加入對應角色的訪問控制策略。各個角色分類、分組設置以及對不同角色設置通用配置項。多法人相互隔離,相互安全可控。同時,平臺管理員根據用戶情況設置適當的菜單選項,如項目經理可分配、轉移、審計缺陷情況,而項目組員只可以分析、確認修復缺陷。通過合理策略配置和代碼掃描權限的管理,可以有效保護源代碼的安全性和完整性。
4.2.3 代碼掃描
代碼掃描模塊包括自動構建管理、增量掃描管理、計劃任務、內存使用情況。一是通過源代碼掃描引擎后臺執行代碼掃描任務。二是用戶根據代碼改動情況,若是第一次檢測可以采用在前端通過SVN、GIT、ZIP壓縮包上傳等方式,掃描檢測系統自動解壓后臺進行代碼掃描。若是檢測過多次,用戶可選擇增量代碼檢測,上傳增量class文件即可完成增量代碼檢測。三是用戶在計劃任務欄中既可以查看正在執行的進度以及失敗原因,又可以按需定制執行代碼檢測任務。四是平臺引入非缺陷庫比對功能,主要過程包括信息收集、預處理和標準化、特征提取、結果對比與分類、結果分析和修正。以上步驟可以大幅度減輕開發人員識別源代碼缺陷的難度,更準確地識別真正缺陷,降低誤報,更好幫助開發人員理解代碼質量和潛在的風險。
4.2.4 缺陷管理
所有源碼掃描檢測結果在缺陷信息管理中詳細展示,包括問題描述、問題數量、缺陷等級、代碼塊、文件路徑、修復建議等。各個項目組只能查看本項目組下相關項目代碼檢測信息。在缺陷信息中,用戶可選擇多種方式將缺陷信息導出,如一鍵導出、一鍵轉移、缺陷轉移。用戶通過Excel文檔方式導入分析確認的結果并提交項目組確認,最終形成源代碼安全檢測報告。
5 結語
未來江蘇省聯社將持續夯實軟件源碼安全能力。(1)將持續提升源碼檢測質量,基于自定義檢測規則的發現能力,構建全方位源碼風險防范能力。(2)推動以源碼檢測為核心的安全風險閉環管理,將源碼安全和信息安全結合起來,用已有的網絡安全能力為源碼安全提供有力的支撐和保障。(3)建立源碼安全風險特征庫,推動開發人員深入了解并解決源碼安全問題,真正實現安全管理左移。
由于所有軟件安全風險絕大多數歸根于源碼問題,本文結合行業實踐案例,借鑒微服務架構實現源代碼自助檢測,其檢測意義在于修復缺陷,提升開發人員的安全開發意識并使其在軟件開發過程中更重視安全因素。在軟件開發生命周期階段,平臺化的工具發現源碼中的安全風險,進一步降低缺陷密度,提升代碼質量,讓代碼更安全。
參考文獻
[1]李舟軍,張俊賢,廖湘科,等.軟件安全漏洞檢測技術[J].計算機學報,2015(4):717-732.
[2]楊宇,焦麗琴.基于微服務的企業應用設計與實現[J].電子科學技術,2016(5):623-625.
[3]紐曼.微服務設計[M].北京:人民郵電出版社,2016.
[4]熊益益.基于微服務架構的電商平臺的研究與實現[D].北京:北京郵電大學,2019.
[5]張超永,張玉中,浮明軍,等.基于Fortify的源代碼安全測試規則自定義研究[J].電腦編程技巧與維護,2019(2):168-171.
[6]王躍.源代碼安全漏洞檢測方法研究[D].武漢:華中科技大學,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