2023 年 12 月,奧義智慧資安研究員蘇俊銘 (Jimmy Su) 與資安研究助理施乃心 (Maxim Shih) 在日本 SECCON 以「BloodHound 的新路徑:結合可擴展性權限阻擋演算法以優化 AD 防禦」(BloodHound’s New Trail: Incorporating Scalable Edge Blocking Algorithms for Refined AD Defense)為題發表演說。
在這場演講中,兩位講師帶領聽眾深入探討 Active Directory 上 Identity Snowball Attack 的成因及資安研究人員在使用開源工具 BloodHound 分析 Identity Snowball Attack 時會遇到的痛點,並介紹如何將分析時的方法論及痛點轉換成可計算的演算法並且推薦使用者該如何阻擋 Identity Snowball Attack。
本文將統整該篇演講的研究內容,並向讀者說明其中所利用的各項技術。此外,此篇文章內容部分參考自 Mingyu Guo 的 Scalable Edge Blocking Algorithms for Defending Active Directory Style Attack Graphs 一文,非常感謝作者 Mingyu Guo 同意我們使用他的論文內容。
Active Directory (AD) 是由微軟所開發的集中化驗證服務,主要用於管理網路中的資源和使用者資訊。AD 在網路中扮演的角色,類似於一個巨大的電話簿或地圖,能幫助公司內的電腦、伺服器和使用者們找到彼此,同時也控制著哪些使用者可以訪問、存取哪些資源,例如允許員工 A 可以訪問文件夾 X 等。
除此之外,AD 有另一個強大功能的工具:「群組管理原則」(Group Policy Object, GPO)。GPO 是用於管理使用者和電腦設定的一種機制,系統管理員可以經由 GPO,一次性地完成多台電腦的配置設定,諸如軟體安裝、安全性措施或者網路設定等。這意味著,企業的 IT 人員不需要逐一為每台電腦設定防火牆或更新軟體,只需要在 AD 中設定一次 GPO,便能一併派送應用到組織中的多台機器上。
正因為 AD 和 GPO 能集中管理如此多的設定和權限,在資訊安全方面便也舉足輕重,一旦 AD 或 GPO 設定不當導致弱點產生,攻擊者便可獲取他們理應無法擁有的訪問權限、或利用弱點展開攻擊和惡意行為。因此,妥善地配置和維護 AD 與 GPO 不僅能讓企業營運更有效,也是確保網路安全的基礎。
AD 的許多功能都和 DACL 息息相關,DACL 是許多權限 (permission) 的組合,透過 DACL 的設置可以讓兩個 AD 物件產生關係。AD 物件關係的類型可分為以下兩種:
Maxim (Read/Write) -> Jimmy
Maxim 和 Jimmy 之間是直接 (Direct) 關係,此種關係可以在 Jimmy 的 DACL 上觀察到(圖1)。
在連續的直接關係下,物件間會產生間接 (Indirect) 關係(圖2):
Maxim (Read/Write) -> Jimmy (Read/Write) -> John
Maxim 與 Jimmy 的直接關係,導致 Maxim 與 John 之間產生了間接關係:
Maxim (Read/Write) -> John
間接權限不會以任何方式被記錄在 John 的 DACL 中(圖3),只能藉由關聯分析此種連續的直接關係,才有機會觀察到間接關係的存在。
因此,繼續推演此類連續的直接關係,最終可能會產生以下間接關係:
Maxim (Read/Write) -> Admin
此間接關係讓 Maxim 可以提升權限 (privilege escalation) 成為 Admin(圖4)。
這種連續、會被惡意使用者濫用的 40 種直接關係,所導致非預期的間接關係,便被稱為 Identity Snowball Attack,意味著權限如雪球一般,越滾越大造成管理困難的潛在風險。
Identity Snowball Attack 是在 2009 年時由 Microsoft Research 論文 Heat-ray: Combating Identity Snowball Attacks Using Machine Learning, Combinatorial Optimization and Attack Graphs 中所定義。
根據 Microsoft Research 論文,利用 Identity Snowball Attack 的攻擊者會登入第一個受駭主機的使用者帳號,並濫用這些帳號在其他主機上的權限,執行後續攻擊。由於 AD 管理機制十分複雜,因此 Identity Snowball Attack 非常容易出現在 AD 中。
為了方便觀察這類型的問題,在 2016 年,SpectorOps 在 DEF CON 24 上發佈了 BloodHound,一套透過圖論的方式來表達 Identity Snowball Attack 以及 間接關係的開源工具。
在本文開頭我們將 AD 比擬為電話簿,BloodHound 則是透過還原電話簿,將電話簿間各個地址進行關聯、並找出地址間的關係。
BloodHound 透過關聯 AD 物件的內容,可以找到間接關係,並畫出物件之間的關聯圖(圖5),讓管理者直觀地看到是否有非預期的關係出現。
然而,BloodHound 很難分析涵蓋多種權限設定的 AD 物件關係圖(圖6),除了圖表本身過於複雜外,分析過程也會產生更多的不確定因素,例如移除掉某些關係是否會對公司營運造成影響等。
因此,前述論文作者 Mingyu Guo 研發了能量化權限關係的邊緣阻擋 (Edge Blocking) 演算法,可以幫資安團隊快速篩選,找到通常認為危險程度較高的關係,專注分析推薦的關係即可,避免在複雜的圖表上耗費太多時間。
接下來我們將一步步拆解 Edge Blocking 演算法的操作邏輯與如何藉以緩解 Identity Snowball Attack。
首先,身為防禦者,我們的目標是什麼?
我們的目標是「預測攻擊者將做什麼並提前阻止」,但是該怎麼做呢?當有了描述 AD 環境的 Bloodhound 圖,我們可以更具體、精確地將目標定義為 : 「找到最有可能遭攻擊的高風險路徑,並先發制人地進行防守」。
參考 Bloodhound 的圖形結構,我們希望將目標轉換為圖形問題(圖7)。
具體的轉換步驟包括:
1. 將 BloodHound 中的實體轉換為圖的節點。
2. 利用可解釋被攻擊機率的數字代表每條邊緣風險值,我們選擇了 GoodHound 的攻擊成本 ( Exploit Cost ) 作為每條邊緣代表的風險評分,用以表示攻擊者攻擊該權限關係的難易程度(圖8)。攻擊越容易,攻擊成本就越低,攻擊者就越有可能對這條邊緣發動攻擊,意味著此關係受到攻擊的風險更大。因此,我們將最低的攻擊成本設定為最高的風險分數。
3. 我們也在圖中定義了一些特殊的節點:
有了以上兩個節點,現在我們可以將攻擊者的攻擊路徑 (Attack Path) 描繪成圖中入口節點和 DA 之間的連線(圖9)。
至此,我們成功地將 AD 環境轉換成相對應的圖形,並定義了一些基本要素。接下來,我們將在這個圖上新增更多防守者在防禦與阻擋邊緣時需要考量的要素。
防守者的首要目標是防禦最具風險的攻擊路徑,圖10 包含了四個顏色的攻擊路徑:
為了計算攻擊路徑的風險評分,我們將攻擊路徑中所有邊緣的風險分數相乘(圖11),發現第一條淺紅色攻擊路徑的風險分數最高,因此是最須關注、最危險的攻擊路徑。
2. 考量防禦
除了風險分數之外,防守者還需要考慮可採取的防禦行為。防守者在評估邊緣被成功阻擋的可能性時,可以為每條邊緣設定一個成功防守的機率 B(e) ,1-B(e) 就表示該邊緣沒有阻檔的可能性。
因此,我們將分數與沒有阻擋的機率相乘 r(e) *(1-B(e)),表示攻擊者在此邊緣上發起攻擊且未被阻擋的風險。換句話說,這也代表了攻擊者成功濫用此邊緣的機率。
3. 考量預算
由於防禦的人力和資源有限,我們還需考慮預算配置。在此階段,防守者的目標變成在預算範圍內找到最佳的阻擋策略,以最小化攻擊路徑的最大風險得分。
例如,在預算範圍內,我選擇了五條邊緣來進行阻擋(圖13)。
在這個阻擋策略下,我重新計算了所有攻擊路徑的風險得分(圖14):
結果顯示,第一條淺紅色攻擊路徑 (0.9 * 0.4 … = 0.04) 在此阻擋策略下是最危險的路徑。我們的目標是通過不同的阻擋策略來最小化這個最大風險得分。不幸的是,如果將這個問題轉化為最短路徑問題,這個路徑問題被證明是 NP-Hard 的問題。我們需要考慮的邊緣數量太多,且圖形太過複雜,有什麼簡化的方法呢?
在決策過程中,我們發現遇到分岔路徑時,情況會變得特別複雜。分岔路徑是指路徑中有一個分岔節點 (split node),且這個節點會延伸出不止一條路徑(圖15)。
分岔路徑的問題是,當我在預算範圍內阻擋了紫色路徑,攻擊者仍舊可以選擇紅色攻擊路徑,導致防禦無效。
非分岔路徑則是相對容易防守的單一路徑,無論攻擊者在哪裡,只要阻擋了最靠近 DA 的邊緣,防禦將始終有效,此種邊緣便是值得阻擋的選項。
因此,我們認為比起分岔路徑,更應將注意力放在非分岔路徑上,因為只需要防守一條值得阻擋的邊緣就能阻止任何攻擊企圖。如何將分岔路徑轉變成非分岔路徑呢?
1. 將分岔路徑切割成非分岔路徑
我們將分岔節點當作斷點,藉此把分岔路徑切割成非分岔路徑,圖 15 的分岔路徑就可拆分為三個不同顏色的非分岔路徑(圖16)。
2. 將 AD 圖拆解為非分岔路徑
透過上述方法,我們可以將 AD 圖拆解成多組非分岔路徑,並標示出每條路徑中值得阻擋的邊緣(圖17)。
3. 計算非分岔路徑的風險得分
在成功減少了需要阻擋的邊緣選項後,我們可以計算非分岔路徑的風險分數(圖18)。
計算後,每條非分岔路徑的風險得分如下圖 19:
4. 簡化 AD 圖
經過上述步驟,切割了分岔路徑、保留分岔節點與所有非分岔路徑的風險得分後,我們將原先複雜的 AD 圖簡化成從入口節點連結到 DA 的非分岔路徑圖(圖20)。
在有了核心化的圖後,我們使用線性規劃來尋找要阻擋的邊緣。
1. 設定線性規劃目標
此優化問題的目標為「在有限預算下找出能讓攻擊 DA 成功機率最低的阻擋策略」。
2. 為線性規劃添加限制
限制 1 :
(父節點得分) ≥
(所有到子節點並考慮阻擋的非分岔路徑得分)*(子節點得分)
我們先添加限制 1 並在其中同時考慮防守預算。由此一來,我們便能確保在每一個節點都儲存從此節點到 DA 的最高攻擊機率的路徑機率。
限制 2 :
(最佳入口節點數值) ≥( 所有入口節點數值)
限制 2 目的是在特定阻擋策略中找到最高風險得分的入口節點。
限制 3 :
(預算限制) ≥( 阻擋策略使用的預算總和)
限制 3 考慮阻擋預算。
3. 計算線性規劃結果
最後我們透過線性規劃的計算與輸出,找到有限預算下最值得阻擋的邊緣以及在最佳阻擋策略下相對應最高的攻擊路徑風險得分。
在真實場域中常常發現 Identity Snowball Attack,且此攻擊難以偵測,我們認為需格外注意此議題與相關攻擊手法。本篇文章深入拆解 AD 環境中的兩種路徑類型,運用 Edge Blocking 演算法和線性規劃技巧,計算不同節點與每條邊緣的風險分數。
透過簡化 AD 物件權限圖,我們演示了演算法在真實環境中的運作,協助資安團隊迅速且正確地做出防守決策,以梳理盤根錯節的 AD 權限關係,提升 AD 管理效能與準確度。
Writer: Jimmy Su
奧義智慧科技(CyCraft Technology)是一家專注於 AI 自動化技術的資安科技公司,成立於2017年。總部設於台灣,在日本和新加坡均設有子公司。為亞太地區的政府機關、警政國防、銀行和高科技製造產業提供專業資安服務。獲得華威國際集團(The CID Group)和淡馬錫控股旗下蘭亭投資(Pavilion Capital)的強力支持,並獲得國際頂尖研究機構 Gartner、IDC、Frost & Sullivan 的多項認可,以及海內外大獎的多次肯定。同時也是多個跨國資安組織和台灣資安社群的成員和合作夥伴,長年致力於資安產業的發展。