雲原生之軟體安全韌性

潘育群/華碩雲端數位專型事業處

應用服務的「微服務化」及「容器化」

Covid-19讓IT流程自動化加速進行,防疫政策導致企業必需分地、分流工作,在過去自動化能力不足的公司,更面臨了停工、缺料的風險,嚴重一點甚至會導致公司倒閉。IT產業在這樣的變局之下,製造業系統和服務業上雲都是勢在必行。遠距視訊會議、同儕共同協作機制、產線自動化機制、IT程序遠端監控與除錯等等,這些機制都讓「數位轉型」的策略,由過去謹慎的評估,搖身一變成為企業永續經營的關鍵抉擇。如果僅靠企業內部有限的IT人力資源,通常無法即時滿足企業營運需求,這時候仰賴可靠與穩定的雲端服務,就是一個最佳選擇,在過去幾年,企業其實已經加速上雲的進度,同時仰賴雲端服務協助監控效能與維護架構。

但是否僅將在地端機房的服務直接搬遷到公有雲就足夠呢?原本的程式碼架構,是否能隨著工作負載增加,提升基礎架構即服務(Infrastructure as a Service,IaaS)的資源,當尖峰負載降低時,減少IaaS資源的使用,達到用多少付多少(pay-as-you-go)、兼顧成本與服務最佳化的目的呢?很顯然地這些問題,都因為傳統穩態式的程式碼架構相對的巨大而不可切割,導致服務不具敏捷擴充性,在資訊安全更新或者功能迭代上都面臨了實際上的困難,為了克服此一挑戰,目前在積極發展中趨勢是將應用服務「微服務化」以及「容器化」。

雲原生(Cloud Native)

由於為雲而生的基礎環境設計逐漸地受到重視,雲原生(Cloud Native)就在這樣的環境中蓬勃的發展,過去的十年是雲端運算發展起飛的黃金十年。專注在傳統基礎架構(IaaS)雲服務上,未來十年的重點是雲原生基礎架構、微服務(Micro Service)、人工智慧(Artificial Intelligence,AI)以及因為高速5G網路串聯IoT設備讓行動邊緣計算(Mobile Edge Computing,MEC)茁壯的時代。雲原生是爲雲而生的新一代應用和資源架構模式,進一步減少企業研發成本的同時,也可以避免因為業務擴容需求,導致應用服務中斷的副作用。另一方面,隨着企業持續因為數位轉型,需要收集大量數據分析,也必須提供應用程式開發者更好、更敏捷的開發方式。在雲原生快速發展的趨勢下,未來數年將是業務領銜,直接要求應用的雲端計算資源,運用無伺服器的觀念(serverless),將IT、AI算力直接提供至客戶端,隨著萬物互連成爲可能,提供更即時與智能的IT服務給客戶,這將導致新的IT數據處理架構不斷的演變,引領雲原生時代的來臨。

過去穩態式的IT,強調安全、穩定與性能,如資訊系統管理(Enterprise Resource Planning,ERP)、製造執行系統(Manufacturing Execution System,MES)、業務流程管理(Business Process Management,BPM)、E-Flow、管理監控(Business Activity Monitoring,BAM)、商業智慧(Business Intelligent,BI),到協作平台的OA、CRM;但是在許多企業面臨數位轉型的浪潮下,敏捷式IT開發方式,強調敏捷、彈性與靈活的數據化營運(Search Engine Marketing,SEM)、線上線下整合(online to offline,O2O)與AI、物連網(Internet of Things,IoT)則必須利用雲原生的特性來提供開發與營運環境。

如果提供業務服務的系統要升級,要如何平滑的調升硬體資源?如果升級失敗,或者負載處於離峰狀態,要如何調降硬體資源呢?同時兼顧線上業務持續運行不中斷。最理想的工作型態,是要能夠讓工作負載配合資源的提供,也就是供給與需求的曲線綿密的貼合在一起(如圖1)。

圖1、工作負載與資源配置關係

雲原生的實際架構為「為雲而生、以應用為中心」,所以能夠適應業務量的變化。我們定義的雲原生平台組成有3部分:一為應用服務微服務架構設計,二為DevOps(Development and Operation),三為能夠隨著技術發展環境變化的底層平台,例如容器(Container),三者缺一不可。

眾所周知的DevOps與CI/CD循環圖,因為資安因素或者功能變更式不斷迭代與累加的,這個時候就是雲原生平台要夠提供管理的功能。

圖2、DevOps循環圖

圖3、雲原生應用與傳統應用的比較

雲原生的優勢

雲原生的好處引人注目,但是雲原生的架構在強調敏捷性的開發也引入了各種新型安全風險,現在的趨勢是參考NIST 800-160 SSDLC(Secure Software Development Life Cycle)[1] [2],將安全性左移的觀念導入DevOps的開發部屬循環中。如圖4中所示,在軟體開發生命週期的前期如開發概念(Concept)與開發(Development)階段就導入大比例的安全程序,我們稱為安全性左移;另一方面,考慮軟體的商業價值,對需要完成的安全檢測需求,則以最小可行性商品(Minimum Viable Product,MVP)的概念導入相關必要的資安程序,兼顧資安開發成本與軟體功能上的需求。

圖4、ISO 15288:2015

在SSDLC的流程中,另外可以參考NIST CSWP 04232020[3]所定義的平台安全指引SSDF(Secure Software Development Framework),如圖5中所規範之工具,與安全軟體開發程序整合。

圖5、SSDF平台架構圖

圖6、SSDLC相關程序之對應及引用時機

在圖6中,可以看到SSDLC在軟體開發的生命週期每個階段中,都會有需多資安程序需要考慮,但是導入這些安全程序將會產生許多高昂的資安成本,因此可以依據軟體資安等級,動態選擇這些程序之進行的廣度與深度。

在 NIST 2022的目標中,SSDF將會考慮往以下四個方向

  1. 產出一個對應互動的線上儲存體,可以更容易使用提供主機之間讀取互通的格式
  2. 說明SSDF可以對應到SDLC 開發流程, 即可將DevOps延伸至 DevSecOps[4],確保開發風險是可控的,包含了IT、OT、IoT的軟體、應用服務環境、韌體與硬體
  3. 特別是將SSDF的基礎套用在開源軟體上,提供軟體供應鏈安全
  4. 開發一個真實可以被展現SSDF與SDLC整合的平台、安全軟體的開發模式、使用的程式語言與安全檢測的技術

圖7、軟體供應鏈管理

軟體供應鏈安全SSCSP(Software Supply Chain Security Paper)的資訊是不間斷更新的,可以參考[5]。從軟體供應鏈管理的角度,要定期稽核軟體提供者(trust by verify),我們必須隨時謹記下面四個原則

  1. 確保所有的程序是一致且有受到品質管控
  2. 確認所有的資源都在流程(pipeline)的管理中,包含了人員、程式碼、流程的相依性與IT基礎建設
  3. 確保運作中的程式碼安全,不僅是在儲存設備中的程式碼,也包含在傳輸過程中的程式碼
  4. 確保最後運作中的軟體是充分完成資安檢查,依照規劃進行提供佈署

我們在CI/CD的流程中,如圖7依據軟體資安等級,參考SSDF所定義的安全軟體開發平台架構,在開發流程中(Pipeline)加入了許多的資安檢核點,其中可以包含靜態應用程式安全測試(Static Application Security Testing,SAST)、動態應用程式安全測試(Dynamic Security Testing,DAST)、軟體物料清單管理(Software Bill of Material,SBOM)、交互式應用程式安全測試(Interactive Application Testing,IAST)等。因此實施安全性左移,做到原生的安全Secure by Design,是將軟體安全因素DNA深植於軟體之中,由DevOps演變為DevSecOps。

圖8、CI/CD整合SSDLC

參考圖8中一個典型的CI/CD流程範例,我們在流程中整合了SSDLC中所規範的幾個資安檢核點,包括交付程式碼、在容器中執行時、將程式碼儲存到載體這些流程中,都需要資安檢核。

在本文中,過去軟體的安全作業與開發軟體的程序是分開考慮與執行的,軟體人員僅負責撰寫程式碼,軟體佈署至生產環境之後,才由資安工程師檢查程式碼,或在運作的環境中建立高牆式的服務,這樣的軟體安全是沒有效率的。因應雲原生世代興起,應用快速佈署在雲端環境中,如果在運作環境(production)才偵測到安全問題,必須更新已經撰寫與佈署的程式碼,將造成嚴重的成本增加,也讓服務面臨了如零時差攻擊、持續性攻擊與勒索軟體此類的資安威脅之下。

結語

最後,我們要強調的是,DevSecOps依據軟體商業價值,可能採用的流程與工具可以有許多彈性調整的空間[6],所以這是一個安全的觀念與文化,其中包含了軟體的開發人員、基礎架構的IT團隊、安全專家以及參與軟體交付佈署的人員都要進行教育訓練、團隊溝通,建立安全事件的處理流程劇本、並在流程中考慮資安稽核方式與產業合規性,導入雲原生架構中特別需要處理的 API 安全管理,這樣才能真正實現雲原生之軟體安全韌性。

[1] NIST 800-64 Rev. 2 Security Considerations in the System Development Life Cycle

[2] NIST 800-160 Vol. 1 Systems Security Engineering

[3] NIST CSWP 04232020 Mitigating the Risk of Software Vulnerabilities by Adopting a Secure Software Development Framework (SSDF)

[4] https://blog.convisoappsec.com/en/is-your-software-supply-chain-secure

[5] https://github.com/cncf/tag-security/blob/main/supply-chain-security/supply-chain-security-paper/CNCF_SSCP_v1.pdf

[6] https://csrc.nist.gov/projects/devsecops

本文內容純屬筆者個人意見,並不代表TWNIC立場

 

Scroll to Top