基礎架構程式碼:資安風險與如何防範

基礎架構程式碼 (IaC) 是 DevOps 實務中實現軟體開發靈活性很重要的一環,在這份報告當中,我們點出了 IaC 實務上的一些資安風險以及對應的最佳資安實務原則。

由於 IT 基礎架構所承受的要求以及持續整合/持續交付 (CI/CD) 流程的風險不斷升高,因此,一致而可擴充的自動化顯得日形重要。這就是「基礎架構程式碼」(Infrastructure as Code,簡稱 IaC) 所扮演的角色。IaC 是一種利用機器可解讀的檔案格式來配置、設定與管理基礎架構的實務方法。有別於手動設定企業內及雲端環境的作法,系統管理員和系統架構師可透過 IaC 來將上述工作 自動化。IaC 與基礎架構服務  (Infrastructure as as Service,簡稱 IaaS) 兩者絕配,而且也廣獲眾多企業採用,不僅可 加速開發及擴充雲端環境,又能降低成本。

IaC 在概念上類似撰寫腳本來將 IT 流程自動化,不過 IaC 採用描述性語言來實現更彈性的資源配置與部署 (也就是由軟體本身來負責啟動基礎架構變更),而且 IaC 對雲端運算與 DevOps 尤其重要。

IaC 工具大致可分成兩類:一種是協調工具,用來配置、組織與管理基礎架構元件 (如 CloudFormationTerraform);另一種是組態管理工具,用來安裝、更新、管理基礎架構元件內所執行的軟體 (如 AnsibleChefPuppetSaltStack)。這類工具可讓開發人員和雲端架構師消除一些容易出錯的手動流程,讓大規模的組態設定與管理作業得以簡化。

IaC 實務上的資安風險


然而,採用 IaC 來加快 CI/CD 週期的循環,卻也帶來了一些挑戰。譬如,IaC 工具若存在尚未修補的漏洞,很可能將成為威脅入侵基礎架構的破口。這些漏洞會讓駭客避開一些程序、在已遭駭入的伺服器上執行程式碼,甚至植入一些虛擬加密貨幣挖礦程式。IaC 範本若組態設定不當,也可能造成一些敏感資料外洩,或造成資安缺口讓駭客入侵。

機密資料的儲存


IaC 一般的作法是使用一個應用程式來管理多個環境,並使用組態設定檔案來描述如何管理這些環境,組態設定檔案的內容採用程式碼的型態 (所以才有惡意程式碼的問題),IaC應用程式會在目標環境中執行這些程式碼。IaC 應用程式描述目標環境的方式各有不同,通常包括:組態設定本身、儲存,以及一些機密資料 (Secrets),這些是連上託管基礎架構的必要資訊。

機密資料的儲存方式,與其所保管的敏感資料同樣重要,如應用程式認證金鑰、SSH 金鑰、密碼等等。將這些資料儲存在原始程式碼管理 (SCM) 系統 (如 Git) 或儲存在純文字檔案內,都是危險的作法,而且從資安的角度來看更是不負責任的作法,因為很容易發生外洩。有些殭屍網路專門在網路上搜尋公開的 SCM 網站,尋找可以立即使用的機密資料,進而駭入基礎架構 (例如植入挖礦程式)。所以我們建議採用一套金庫系統來儲存這些機密資料,然後在組態設定中參照這些資料就好。

主節點 (Master) 通訊管道


有些 IaC 組態設定管理工具 (如 SaltStack) 的設計架構當中包含了所謂的主節點 (master node),負責管理所有其他節點。一般而言,當您從單一節點 (也就是主節點) 存取被管理的整個基礎架構時,保護這個單一節點就非常重要,因為它包含了基礎架構與部署環境的所有細節,一有任何閃失,整個基礎架構都會遭殃。

所以,雲端內若能採用一些預先準備好的環境,就能降低因為組態設定錯誤或者每次都從頭設定組態而導致的風險。

圖 1:主節點架構示意圖。

主節點需要一個安全的通訊管道來與被管理的節點溝通,其管理的方式大致分成兩種:

  • 在被管理的節點上安裝一個客製化代理程式來執行管理工作。
  • 使用一般常見的軟體與通訊協定來管理節點 (也就是「無代理程式」的作法),例如透過 SSH 通訊協定來執行 bash 腳本。

從資安的角度而言,使用客製化網路通訊協定會多增加一個受攻擊面,甚至帶來更多漏洞,例如有些資料中心與雲端伺服器上使用的 SaltStack 軟體,其 Salt 管理架構中就被發現了 CVE-2020-11651CVE-2020-11652 兩個漏洞。

CVE-2020-11651 是其客製化網路通訊協定處理上的漏洞,可能讓未經認證的使用者在整個基礎架構內執行遠端程式碼 (RCE)。至於 CVE-2020-11652 則是一個路徑瀏覽漏洞,可讓不特定的第三者讀取任意檔案。這兩個漏洞都能讓歹徒取得系統管理金鑰 (root key) 來進入主節點,進而存取整個基礎架構。由於 SaltStack 的漏洞太過敏感,使得發現這些漏洞的研究人員決定不對外公開任何概念驗證程式碼。

圖 2:CVE-2020-11651 修補程式碼片段 (限制對外公開的功能函式)。

網路犯罪集團的腳步很快,早已鎖定這類基礎架構管理平台,例如有許多雲端伺服器感染了虛擬加密貨幣挖礦程式,造成一些 Salt 運算實體的 CPU 用量飆高,使得系統超載。此外,駭客也曾經處心積慮試圖透過某個重大漏洞來取得某憑證透明化 (CT) 伺服器的簽署金鑰。

如需有關  CVE-2020-11651 與 CVE-2020-11652 的詳細分析,請參閱這篇 Trend Micro Research 文章

使用者權限


使用者權限是另一項資安問題,如果 IaC 應用程式只是用來管理應用程式的部署,那麼它應該不太需要目標系統的管理員 (root) 權限。採用最低授權原則雖然有一定的麻煩,但卻能降低遭駭客入侵的風險。

同樣原則也適用於部署在 Amazon Web Services (AWS) 公有雲內的環境,專為特定用途 (例如啟動預先準備好的虛擬機器) 而設立的帳號或角色,其權限應該受到限制。使用具備系統管理權限的雲端帳號登入憑證來執行一些權限較低的工作,是一項危險的作法。

IaC 範本


IaC 範本的作用是用來配置與管理雲端基礎架構,進而達成部署的靈活性。IaC 範本是機器可閱讀的定義檔,用來建立環境並從外部執行程式碼。然而這些範本並非毫無風險,由於它們是 IaC 流程的一環,而且可能不小心用到來自非信賴來源的作業系統與容器映像,因而招來一些後門程式與挖礦程式之類的威脅。

此外,IaC 範本也可能含有一些漏洞和不安全的預設組態而使得資料發生外洩。這些漏洞又進一步對 IaC 部署的雲端基礎架構與所儲存的資料造成更大風險,尤其是非必要地公開暴露在網際網路上。所以,企業應在開發流程的早期就預先檢查 IaC 範本是否有不安全的組態設定或其他的潛在弱點。此外,更應透過某種雲端資安狀態管理服務來定期掃描,以發掘並矯正組態設定錯誤。

主要重點與最佳實務原則  


IaC 的作用是用來部署及管理基礎架構,包括:資料庫、網路伺服器、服務以及虛擬機器,這是 DevOps 實務中實現軟體開發靈活性很重要的一環。IaC 有助於加快開發速度,提升基礎架構的管理效率。在沒有 IaC 時,開發人員和 IT 團隊必須手動維護每個部署環境的組態設定,而手動作業很容易造成部署上的不一致與資安問題。

有了 IaC 之後,基礎架構的詳細內容會定義在文字檔內 (其形態是程式碼)。雖然這樣可以讓使用者指定詳細的屬性內容,但若處理不當,卻可能造成安全問題。組態設定錯誤是雲端環境的一大資安問題,同樣情況也發生在 IaC 工具。企業若對 IaC 流程的資安意識不足,將導致整個基礎架構遭駭客入侵。

為了確保混合雲與公有雲環境的安全,我們建議採取以下措施:

  • 可能的話,盡量採取最低授權原則,能不開放的權限就不要開放。雲端服務的帳號權限必須受到限制,尤其是公有雲供應商的帳號,必須限制帳號與工具的存取權限以防止駭客入侵各個節點。如此就能安全地儲存 IaC 組態設定,並防止資料外洩。
  • 使用 IaC 資安附加元件。整合式開發環境 (IDE) 的資安附加元件可在 IaC 範本部署之前預先防範潛在問題。
  • 將基礎架構軟體更新到最新版本。企業應該在廠商釋出安全更新時就立即套用 (前文提到的 Salt 漏洞目前已經釋出安全更新。)
  • 請勿讓中央系統暴露在外。中央伺服器不應暴露在網際網路上,這樣才能避免萬一遭到駭客入侵的時會擴散到下游單元。
  • 提升安全與法規遵循狀況。企業應建置能夠偵測雲端服務供應商組態設定錯誤的即時防護,以確保流程安全。此外,具備自動矯正功能的解決方案也有助於修正問題。

趨勢科技解決方案架構師 Fernando Cardoso 針對如何提升 IaC 流程防護的議題提供了一些額外的建議。

趨勢科技的雲端防護解決方案


趨勢科技也提供了一些解決方案來協助 DevOps 團隊建構安全、快速交付、隨處執行。趨勢科技  Hybrid Cloud Security(混合雲防護)方案可提供強大、簡化、自動化的防護 ,讓企業將防護融入   DevOps 流程,並藉由多重的 趨勢科技 XGen™ 威脅防禦技巧來保障運算時期的實體、虛擬及雲端工作負載安全。更透過 Cloud One™ 服務平台讓企業從單一介面保護整個混合雲環境,擁有即時的資安防護,包含以下服務:Network SecurityWorkload SecurityContainer SecurityApplication SecurityFile Storage Security 以及 Conformity

Trend Micro™ Cloud One™ – Conformity  雲端資安與法規遵循狀態管理服務,可讓企業實現雲端基礎架構的即時防護。它可提供自動化的資安與法規遵循檢查、完整的狀況掌握與簡化的報表,並與工作流程無縫整合。 

對於正在尋找執行時期工作負載、容器映像以及檔案與物件儲存防護軟體的企業,Deep SecurityDeep Security Smart Check 的搭配,可讓您在開發流程當中隨時掃描工作負載與容器映像是否含有惡意程式及漏洞,在部署之前預先防範威脅。

趨勢科技 Deep SecurityVulnerability Protection 的使用者可利用以下規則來防範 SaltStack 漏洞相關的攻擊:

  • 1010265 – SaltStack Salt Authorization Weakness Vulnerability (CVE-2020-11651)
  • 1010267 – SaltStack Salt Directory Traversal Vulnerability (CVE-2020-11652)
  • 1010266 – SaltStack Vulnerabilities Exploitation Detected

 趨勢科技 TippingPoint® 解決方案可透過以下規則來保護客戶:

  • 37750:TCP:SaltStack Salt Authentication Bypass Vulnerability (CVE-2020-11651)
  • 37782:TCP:SaltStack Salt Directory Traversal Vulnerability (CVE-2020-11652)
  • 37032:HTTP:Backdoor.Linux.Kinsackor.A Runtime Detection

原文出處:Infrastructure as Code: Security Risks and How to Avoid Them