🐯最新收集於 14m

Windows 為何不用指標,而要多繞一層

PostLinkedIn
🐯閱讀原文: 虎嗅

💡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 策展新聞聚合。所有內容版權歸原始發布者所有。
原始來源: 虎嗅