🐯虎嗅•最新收集於 14m
Windows 為何不用指標,而要多繞一層
💡AI 基礎設施的實用課:以間接層隔離資源,同時維持安全性與相容性。
⚡ 30-Second TL;DR
有什麼變化
直接提供使用者態指標會暴露核心配置,使未來的核心重構變得不安全。
為什麼重要
這項設計展示了如何以少量查表成本,換取安全性、相容性與長期可演進性。對建構沙箱化工作程序、排程器與資源管理層的 AI 基礎設施開發者而言,這些原則尤其重要。
下一步行動
在 AI 服務中使用不透明的資源 ID 與每個工作程序的權限檢查,不要暴露原始記憶體指標或後端物件位址。
誰應關注:Developers & AI Engineers
關鍵要點
- •直接提供使用者態指標會暴露核心配置,使未來的核心重構變得不安全。
- •HANDLE 會索引每個程序專屬的句柄表,並透過存取遮罩實現類似能力權杖的授權機制。
- •核心在解參照物件前,會驗證句柄是否存在、物件類型是否正確,以及是否具備所需權限。
- •共用的 Dispatcher Header 讓程序、執行緒、事件、計時器與互斥鎖能使用統一的等待原語。
🧠 深度解析
AI-generated analysis for this event.
🔑 增強重點摘要
- •Windows 句柄表(Handle Table)採用多層級結構(如三層表),以在記憶體消耗與查找效率之間取得平衡,支援大規模物件管理。
- •句柄值本身包含索引資訊,低三位元(Low 3 bits)通常用於標記或作為存取檢查的輔助位元,這使得句柄並非單純的隨機數。
- •核心物件管理器(Object Manager)透過引用計數(Reference Counting)機制,確保即使句柄被關閉,若物件仍被其他程序引用,記憶體也不會被過早釋放。
- •Windows 核心物件名稱空間(Object Namespace)允許透過路徑名稱(如 \BaseNamedObjects\)存取具名物件,這與句柄的程序私有性形成互補,實現跨程序通訊。
- •句柄繼承機制(Handle Inheritance)允許父程序在建立子程序時,選擇性地將特定句柄傳遞給子程序,這是 Windows 安全模型中控制資源存取權限的關鍵手段。
🛠️ 技術深入
- 句柄表結構:核心使用 HandleTable 結構,透過 HandleTableListHead 進行追蹤,並利用多層級索引(類似分頁表)來定位物件指標。
- 物件標頭(Object Header):每個核心物件前置一個 OBJECT_HEADER,包含類型索引(TypeIndex)、引用計數(PointerCount/HandleCount)及安全描述符(SecurityDescriptor)。
- 存取檢查流程:當呼叫 ObReferenceObjectByHandle 時,核心會比對句柄表中的 AccessMask 與請求的存取權限,並檢查物件的 SecurityDescriptor 是否允許該存取。
- 統一等待機制:Dispatcher Header 位於物件結構的開頭,使得 KeWaitForSingleObject 等核心函數能透過統一的偏移量存取等待狀態,無需知道具體物件類型。
🔮 前景展望AI analysis grounded in cited sources
Windows 核心將進一步強化句柄隔離以防禦側通道攻擊。
隨著對記憶體安全要求的提高,微軟正持續優化句柄表的隨機化與隔離技術,以減少透過句柄洩漏核心記憶體佈局的風險。
物件管理器將整合更多基於 eBPF 的監控機制。
微軟在 Windows 中引入 eBPF 支援,未來可能允許開發者在不修改核心的情況下,對句柄操作進行更細粒度的安全審計與效能監控。
⏳ 時間線
1993-07
Windows NT 3.1 發布,正式引入基於物件管理器與句柄的架構。
2001-10
Windows XP 發布,強化了句柄表在多使用者環境下的隔離與安全性。
2006-11
Windows Vista 發布,引入核心物件名稱空間的嚴格隔離與完整性層級(Integrity Levels)。
2015-07
Windows 10 發布,進一步優化了物件管理器的效能,以支援更複雜的容器化與虛擬化場景。
📰
AI 週報
閱讀本週精選 AI 大事摘要 →
👉相關動態
AI 策展新聞聚合。所有內容版權歸原始發布者所有。
原始來源: 虎嗅 ↗
