DevOps 環境安全性態勢

已完成

隨著對原始程式碼管理系統和持續整合/持續傳遞管線的網路攻擊增加,保護 DevOps 平台免於 DevOps 威脅矩陣中所識別的各種威脅至關重要。 這類網路攻擊可能造成程式碼插入、權限提升和資料外流,影響可能極為廣泛。

DevOps 態勢管理是適用於雲端的 Microsoft Defender 中的一項功能:

  • 提供整個軟體供應鏈生命週期安全性態勢的深入解析。
  • 使用進階掃描程式進行深入評量。
  • 涵蓋組織、管道和存放庫的各種資源。
  • 讓客戶發現並根據所提供的建議採取行動來減少其受攻擊面。

DevOps 掃描程式

為了提供結果,DevOps 態勢管理針對安全性設定和存取控制項執行檢查,使用 DevOps 掃描程式識別原始程式碼管理和持續整合/持續傳遞管道中的弱點。

Microsoft 內部會使用 Azure DevOps 和 GitHub 掃描器來識別與 DevOps 資源相關聯的風險、減少受攻擊面並強化公司 DevOps 系統。

在 DevOps 環境連線之後,適用於雲端的 Defender 會自動設定這些掃描器,以在多個 DevOps 資源之間每隔 24 小時執行一次週期性掃描,包括:

  • 組建
  • 安全檔案
  • 變數群組
  • 服務連線
  • 組織
  • 儲存機制

DevOps 威脅矩陣風險降低

DevOps 態勢管理可協助組織探索及補救 DevOps 平台有害的錯誤設定。 這樣一來,具備復原性的零信任 DevOps 環境便隨之誕生,並針對 DevOps 威脅矩陣定義的一系列威脅進行強化。 主要態勢管理控制項包括:

  • 範圍秘密存取:儘量減少敏感資訊外洩,並藉由確保每個管道只能存取其功能所需的秘密,降低未經授權存取、資料外洩及橫向移動的風險。
  • 自我裝載執行器和高權限的限制:透過避免自我裝載的執行器,並確保管道權限預設為唯讀,防止未經授權的執行和潛在升級。
  • 增強的分支保護:強制執行分支保護規則並防止惡意程式碼插入,維護程式碼的完整性。
  • 最佳化的權限和安全存放庫:追蹤最低基礎權限,並針對存放庫啟用秘密推送保護,以降低未經授權的存取、修改的風險。

DevOps 威脅矩陣

開發 DevOps 威脅矩陣的目標是建置完整的知識庫,可供 Defender 用於追蹤和建置防禦相關攻擊的技術。 我們使用 MITRE ATT&CK 架構作為基礎,收集了與 DevOps 環境相關聯的技術和攻擊媒介,並建立了專用於 DevOps 攻擊方法的矩陣。

值得注意的是,必須從 DevOps 的觀點來研究此矩陣中的策略。 例如,執行 Windows 或 Linux OS 的虛擬機器中的執行技術與 DevOps 管線中的執行不同。 在 Linux 案例中,執行表示在 OS 中執行程式碼。 當我們談論 DevOps 環境時,這表示在管線或 DevOps 資源中執行程式碼。 除了使用此威脅矩陣將攻擊和對應的防禦方法進行分類之外,Defender 還可以與紅色小組合作,以持續測試假設,並尋找新的潛在攻擊技術。

MITRE ATT&CK 已定義

MITRE ATT&CK 矩陣是可公開存取的知識庫,可了解攻擊者在網路攻擊期間所使用的各種策略和技術。

知識庫分組為數種類別:預先攻擊、初始存取、執行、持續性、權限提升、防禦規避、認證存取、探索、橫向動作、集合、外流和命令及控制。

策略 (T) 代表 ATT&CK 技術或子技術的「原因」。 它是敵人的策略性目標:執行動作的原因。 例如,敵人可能會想要達到認證存取。

技術 (T) 代表敵人藉由執行動作來達成策略性目標的「方式」。 例如,敵人可能會傾印認證以達到認證存取。

ATT&CK 中的一般知識 (CK) 則代表一般知識,基本上是敵人所執行之策略和技術的記載模數操作法。

初始存取

初始存取策略指攻擊者可用於存取 DevOps 資源 (存放庫、管線和相依性) 的技術。 下列技術可能是後續步驟的先決條件:

原始程式碼管理 (SCM) 驗證 – 存取需透過組織針對原始程式碼管理制定的驗證方法。 這可能是個人存取權杖 (PAT)、SSH 金鑰或任何其他允許的驗證認證。 攻擊者可用於實現這項技術的方法範例是針對組織使用網路釣魚攻擊。

持續整合 (CI) 和持續傳遞 (CD) 服務驗證 – 類似於 SCM 驗證,攻擊者可以利用 CI/CD 服務的驗證來攻擊組織的 DevOps。

組織的公用存放庫 – 存取使用 CI/CD 功能設定的組織公用存放庫。 根據組織的設定,這些存放庫可能能夠在建立提取要求 (PR) 之後觸發管線執行。

端點入侵 – 使用現有的入侵,攻擊者可利用已遭入侵的開發人員工作站,進而存取組織的 SCM、登錄,或開發人員可存取的任何其他資源。

已設定的 Webhook – 當組織已設定 Webhook 時,攻擊者即可能使用 SCM 本身來觸發對組織網路的要求,將 Webhook 利用為對該網路的初始存取方法。 這可能會授與攻擊者存取權,使其可存取不打算公開的服務,或是在私人網路內執行舊版和易受攻擊的軟體版本。

執行

執行策略指惡意的敵人可能用於取得管線資源 (也就是管線本身或部署資源) 的執行存取權的技術。 本區段中的一些技術包含不同執行方式的說明,或我們稱之為子技術的說明:

有害的管線執行 (PPE) - 指攻擊者可將程式碼插入組織存放庫的技術,會導致存放庫 CI/CD 系統中的程式碼執行。 有不同的子技術可用於實現程式碼執行:

  • 直接 PPE (d-PPE) – 在此情況下攻擊者可以直接修改存放庫內設定檔。 由於管線是由新的 PR 觸發,並根據設定檔執行,因此攻擊者可以將惡意命令插入設定檔,而且這些命令會在管線中執行。
  • 間接 PPE (i-PPE) – 在此情況下攻擊者無法直接變更設定檔或觸發時不會將這些變更納入考量。 在上述情況下,攻擊者可以感染管線所使用的指令碼,以執行程式碼,例如 make-files、測試指令碼、建置指令碼等。
  • 公用 PPE – 在此情況下會由開放原始碼專案觸發管線。 在上述情況下,攻擊者可以在公用存放庫上使用 d-PPE 或 i-PPE,以感染管線。

相依性竄改 – 指攻擊者可以藉由將惡意程式碼插入存放庫相依性,在 DevOps 環境或實際執行環境中執行程式碼的技術。 因此,下載相依性時,會執行惡意程式碼。 可用於實現程式碼執行的一些子技術包括:

  • 公用相依性混淆 – 敵人發佈與私人套件相同名稱的公用惡意套件時所使用的技術。 在此情況下,因為套件控制機制中的套件搜尋通常會先在公用登錄中尋找,因此會下載惡意套件。
  • 公用套件劫持 (“repo-jacking”) – 藉由利用 GitHub 使用者重新命名功能來控制維護者帳戶,以劫持公用套件。
  • 錯字 – 發佈和已知公用套件名稱類似的惡意套件。 如此一來,攻擊者即可混淆使用者,使其下載惡意套件,而不是想要的套件。

DevOps 資源入侵 – 管線的核心是一組執行 CI/CD 代理程式的計算資源,以及其他軟體。 攻擊者可以利用 OS、代理程式的程式碼、VM 中安裝的其他軟體或網路其他裝置中的弱點來取得對管線的存取權,將這些資源設定為攻擊目標。

控制一般登錄 – 攻擊者可以取得組織所使用登錄的控制權,進而產生管線 VM 或生產 VM 所執行的惡意映像或套件。

持續性

持續性策略由攻擊者可能用於維護對受害者環境存取權的不同技術所組成:

存放庫中的變更 – 敵人可以使用管線內的自動權杖來存取和推送程式碼至存放庫 (假設自動權杖具有進行此動作的足夠權限)。 他們可以使用數種子技術,以這種方式實現持續性:

  • 變更/新增程式碼中的指令碼 – 我們可能會變更一些初始化指令碼/新增指令碼,這些指令碼會從而下載攻擊者的後門/啟動程式,因此每次管線執行這些指令碼時,也會執行攻擊者的程式碼。
  • 變更管線設定 – 我們可能會在管線中新增步驟,在繼續進行建置流程前,將攻擊者控制的指令碼下載到了管線。
  • 變更相依性位置的設定 – 會使用攻擊者控制的套件。

插入成品 – 某些 CI 環境具有可在不同管線執行之間共用成品的功能。 例如,在 GitHub 中,我們可以從管線設定儲存成品,並使用 GitHub 動作進行下載。

在登錄中修改映像 – 如果管線具有存取映像登錄的權限 (例如,在建置完成後將映像寫回登錄),攻擊者即可能在登錄中修改和植入惡意映像,這會繼續由使用者的容器執行。

建立服務認證 – 惡意的敵人可以利用他們對環境已具有的存取權,在發生初始存取方法遺失時建立新的認證以供使用。 這可以透過建立對 SCM、應用程式本身、雲端資源等的存取權杖來完成。

權限提升

攻擊者會使用權限提升技術升高在受害者環境中的權限,對已遭入侵的資源取得更高的權限:

私人存放庫中的秘密 – 利用已取得的初始存取方法,攻擊者即可掃描私人存放庫以尋找隱藏的秘密。 在私人存放庫中找到隱藏秘密的機會高於在公用存放庫中,因為從開發人員的觀點而言,這是無法從組織外部存取的。

認可/推送至受保護的分支 – 管線可以存取可能以寬鬆存取方式設定的存放庫,這可允許將程式碼直接推送至受保護的分支,讓敵人可直接將程式碼插入重要分支,而不需要小組介入。

中繼資料服務的憑證和身分識別 – 一旦攻擊者在雲端裝載的管線上執行,該攻擊者即可從管線內部存取中繼資料服務,並從這些服務擷取憑證 (需要高權限) 和身分識別。

認證存取

攻擊者會使用認證存取技術來竊取認證:

使用者認證 – 如果客戶需要從 CI 管線 (例如外部資料庫) 存取外部服務,這些認證位於管線內 (可由 CI 秘密、環境變數等設定),因此可能遭敵人存取。

服務認證 – 在某些情況下,攻擊者可以找到服務認證,例如服務主體名稱 (SPN)、共用存取簽章 (SAS) 權杖等等,因此可直接從管線存取其他服務。

橫向移動

橫向行動策略指攻擊者用於在不同資源之間移動的技術。 在 CI/CD 環境中,這可能指移至部署資源、組建成品和登錄,或移至新的目標。

入侵組建成品 – 如同其他供應鏈中的攻擊,一旦攻擊者控制 CI 管線,他們即可干擾組建成品。 如此一來,惡意程式碼即可能在建置完成之前插入建置材料中,從而將惡意功能插入組建成品中。

登錄插入 – 如果管線已設定組建成品的登錄,攻擊者可能會使用惡意映像感染登錄,稍後再由使用此登錄的容器來下載並執行。

散佈至部署資源 – 如果管線已設定為可存取部署資源,則攻擊者對這些資源具有相同的存取權,讓攻擊者可進行散佈。 這可能會導致程式碼執行、資料外流等等,實際情況依授與管線的權限而定。

防禦規避

攻擊者可以使用防禦規避技術來略過 DevOps 環境中所使用的防禦,並讓攻擊在雷達監控下仍可繼續:

服務記錄操作 – 服務記錄讓 Defender 可偵測其環境中的攻擊。 在環境內 (例如,在組建管線中) 執行的攻擊者可能會變更記錄,以防止 Defender 觀察攻擊。 這類似於攻擊者變更 Linux 電腦上的歷程記錄,以防止任何觀察者查看攻擊者執行的命令。

編譯操作 – 如果攻擊者希望在 SCM 服務中不留下任何追蹤,該攻擊者可能會變更編譯流程,以插入惡意程式碼。 這可以透過數種方式來完成:

  • 即時變更程式碼 – 在建置流程開始之前即變更程式碼,而不在存放庫中變更,並將追蹤留在其中。
  • 竄改的編譯器 – 在該流程開始之前即在建置環境中變更編譯器來引進惡意程式碼,而不留下任何追蹤。

重新設定分支保護 – 分支保護工具可讓組織在 PR/認可核准至分支之前設定步驟。 一旦攻擊者取得系統管理員權限,他們即可變更這些設定,並在不需任何使用者介入的情況下將程式碼引進分支。

影響

影響策略指攻擊者可用於惡意探索 CI/CD 資源存取權以達到惡意目的的技術,而不是作為另一個攻擊步驟,因為這些技術可能會造成很多干擾且易於偵測:

分散式拒絕服務的攻擊 (DDoS) - 敵人可能會使用他們取得存取權的計算資源,以對外部目標執行分散式拒絕服務 (DDoS) 攻擊。

加密採礦 – 此計算資源可能會用於敵人所控制的加密採礦。

本機拒絕服務的攻擊 (DoS) – 一旦攻擊者在 CI 管線上執行,該攻擊者即可藉由關閉代理程式、重新啟動或多載 VM,對客戶執行來自上述管線的拒絕服務攻擊。

資源刪除 – 具有資源 (雲端資源、存放庫等) 存取權的攻擊者可能會將資源永久性刪除,以遂行拒絕服務。

外流

外流策略指攻擊者可用於從受害者環境洩漏敏感性資料的不同技術:

複製私人存放庫 – 一旦攻擊者可以存取 CI 管線,他們也會取得私人存放庫 (例如,GITHUB_TOKEN 可用於 GitHub) 的存取權,因此可複製和存取程式碼,從而取得私人 IP 的存取權。

管線記錄 – 敵人可能會存取管線執行記錄、檢視存取歷程記錄、建置步驟等。這些記錄可能包含有關組建、部署的敏感性資訊,在某些情況下,甚至包括對服務、使用者帳戶等等的認證。

從生產資源洩漏資料 – 如果管線可以存取生產資源,攻擊者也能存取這些資源。 因此,他們可能會濫用此存取權來洩漏生產資料。

DevOps 態勢管理建議

DevOps 掃描程式發現,原始程式碼管理系統與持續整合/持續傳遞管道中的安全性最佳做法出現偏差時,適用於雲端的 Defender 會輸出精確且可採取動作的建議。 這些建議具備下列優點:

  • 可見度增強:取得 DevOps 環境安全性態勢的完整深入解析,確保全面了解任何現有的弱點。 識別遺漏的分支保護規則、權限提升風險,以及不安全的連線,預防攻擊。
  • 優先順序型動作:先解決最重要的弱點,依嚴重性篩選結果,以更有效的方式耗用資源與精力。
  • 受攻擊面縮小:解決醒目提示的安全漏洞,大幅減少易受攻擊的攻擊面,強化抵禦潛在威脅。
  • 即時通知:能夠與工作流程自動化整合,以在安全設定改變時接收立即警示,從而能夠迅速採取動作並確保安全性通訊協定的持續合規性。