小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Windows的訪問控制模型

 糖伯虎點秋香 2011-02-14

經過12月份的奮斗,OJ的判題程序已經初具雛形了,不過安全性仍然是一個令我非常頭疼的問題,在這個問題上幾乎耗了半個月的時間。雖然還沒有找到完美的解決方法,但總算了解了Windows的安全性是如何工作的。下面分享一下在這方面的心得。

首先說一下Windows中的訪問控制模型(Access Control Model),它是Windows安全性的基礎構件。訪問控制模型有兩個主要的組成部分,訪問令牌(Access Token)和安全描述符(Security Descriptor),它們分別是訪問者和被訪問者擁有的東西。通過訪問令牌和安全描述符的內容,Windows可以確定持有令牌的訪問者能否訪問持有安全描述符的對象。

訪問令牌是與特定的Windows賬戶關聯(lián)的。當一個Windows賬戶登錄的時候,系統(tǒng)會從內部數(shù)據(jù)庫里讀取該賬戶的信息,然后使用這些信息生成一個訪問令牌。在該賬戶環(huán)境下啟動的進程,都會獲得這個令牌的一個副本,進程中的線程默認持有這個令牌。線程要想去訪問某個對象,或者執(zhí)行某些系統(tǒng)管理相關的操作時,Windows就會使用這個線程持有的令牌進行訪問檢查。

安全描述符是與被訪問對象關聯(lián)的,它含有這個對象所有者的SID,以及一個訪問控制列表(ACL,Access Control List),訪問控制列表又包括了DACL(Discretionary Access Control List)和SACL(System Access Control List)——目前還不知道這兩個東西的確切翻譯——其中,DACL是安全描述符中最重要的,它里面包含零個或多個訪問控制項(ACE,Access Control Entry),每個訪問控制項的內容描述了允許或拒絕特定賬戶對這個對象執(zhí)行特定操作。至于SACL,它很少用到,主要是用于系統(tǒng)審計的,它的內容指定了當特定賬戶對這個對象執(zhí)行特定操作時,記錄到系統(tǒng)日志中。

好了,上面粗略地介紹了一下訪問令牌和安全描述符,可是仍然沒有講到它們兩者是如何協(xié)同工作的。要了解它們怎樣保障Windows的安全性,需要進入它們的內部,看看里面有什么。

訪問令牌中主要含有以下的內容:
當前登錄賬戶的SID,也就是與令牌關聯(lián)的賬戶的SID;
當前登錄賬戶所屬的賬戶組的SID列表;
受限制的SID(Restricted SID)列表;
當前登錄賬戶以及它所屬賬戶組的權限(Privileges)列表。

SID(Security Identity)是Windows中每個賬戶和賬戶組都有的一個標識符,平常我們看到的Administrator,Users等賬戶或者賬戶組在Windows內部是使用SID來標識的。例如S-1-5-21-1004336348-1275210071-725345543-1003就是一個完整的SID。每個SID在同一個系統(tǒng)中都是唯一的。

再來看看安全描述符中ACE的具體內容:
特定賬戶或者賬戶組的SID;
一個訪問掩碼(Access Mask),該掩碼指定了具體的訪問權限(Access Rights),也就是可以對該對象執(zhí)行的操作;
一個位標記,指示了這個ACE的類型;
一組位標記,指示了安全描述符所屬對象的子對象是否繼承這個ACE。

所有的可訪問對象都有三種ACE,分別是Access-denied ACE,Access-allowed ACE,System-audit ACE。Access-denied ACE用于拒絕賬戶訪問,Access-allowed ACE用于允許賬戶訪問,而System-audit ACE用于SACL中。

當一個線程嘗試去訪問一個對象時,系統(tǒng)會檢查線程持有的令牌以及被訪問對象的安全描述符中的DACL。如果安全描述符中不存在DACL,則系統(tǒng)會允許線程進行訪問。

如果存在DACL,系統(tǒng)會順序遍歷DACL中的每個ACE,檢查ACE中的SID在線程的令牌中是否存在。當滿足以下條件時,遍歷會終止:

某個Access-denied ACE中的SID在線程令牌中存在,而且該ACE中的權限與線程要求的權限相符,此時系統(tǒng)拒絕該線程訪問對象。
某個Access-allowed ACE中的SID在線程令牌中存在,而且該ACE中的權限與線程要求的權限相符,此時系統(tǒng)允許線程訪問對象。
所有ACE中的SID在線程令牌中均不存在,此時系統(tǒng)拒絕線程訪問對象。

下圖是轉自MSDN的,Object對象的DACL中含有三個ACE,第一個ACE拒絕Andrew賬戶對Object進行讀取,寫入和執(zhí)行操作;第二個ACE允許Group A賬戶組中的所有賬戶對Object進行寫入操作;第三個ACE允許任何賬戶對Object進行讀取和執(zhí)行操作。

線程A試圖訪問Object,在遍歷DACL的時候,遇到第一個ACE,滿足上述的條件,遍歷終止,線程A被拒絕訪問Object,盡管線程A的訪問令牌中含有Group A賬戶組的SID,并滿足第二個ACE。同理,第三個ACE也沒有被檢查。對于線程B的分析是一樣的,這里就不啰嗦了??梢夾CE的排列順序對線程能否訪問對象是很重要的。

前面在介紹訪問令牌的內容時,提到一個“受限制的SID列表”,對于這個東西,我曾經迷惑了很久,始終搞不懂它是干什么用的。經過一些實驗之后,猜出了它的用途,盡管不一定對,這里簡單說一下。

當一個訪問令牌中含有受限制的SID列表時,系統(tǒng)在遍歷ACE的時候只會與這些受限制的SID進行匹配,而忽略令牌中其余的SID,也就是相當于從訪問令牌中刪除了其它的SID。

另外,還有令牌中的權限列表,權限與對象訪問無關,所以與安全描述符,SID等無關。當線程執(zhí)行一些管理相關的操作時,系統(tǒng)會檢查該線程的令牌中是否含有特定的權限,如果有,則允許線程執(zhí)行該操作,否則拒絕。要查看完整的權限列表,可以運行gpedit.msc,然后定位到“計算機配置-Windows設置-安全設置-本地策略-用戶權利指派”。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多