編程實現遍曆ACL存取控制清單檢查進程存取權限

來源:互聯網
上載者:User

閱讀本文的朋友需要對Windows存取控制模型有初步的瞭解,瞭解Token(存取權杖),ACL(存取控制清單),DACL(選擇存取控制清單),ACE(存取控制清單項)等與存取控制模型相關的名詞含義及之間的關係,當然我也會在文中簡要科普一下ACM。

寫這篇文章的目的主要是最近在寫一個Win下本地提權的東西,涉及到了對ACL的操作,以前對ACL總是避而遠之,Windows存取控制模型很複雜很頭疼一個API會牽出一大把初始化要用的API。畢竟涉及到使用者訪問的安全,肯定不能讓編程人員隨意更改這些機制,複雜一些也可以理解,相關API和結構體複雜,可是參考文獻奇少,MSDN上關於一些存取控制相關API的使用和結構體的描述都含糊不清也沒有什麼代碼執行個體。這篇文章也是在查閱國外了一些文獻加上自己研究測試之後完成的,發出來希望對涉及這方面編程的朋友有協助。

--->>熟悉Windows存取控制機制的可以跳過本段:

因為是科普我這裡簡單介紹下Windows存取控制模型(ACM),別嫌我囉嗦,懂得直接Pass往下看。ACM中最重要的兩部分是存取權杖(Access Token)和安全性描述元表(Security Descriptor)。存取權杖存在於訪問主體中,安全性描述元表存在於訪問客體中。比如我去米國,我就是訪問主體,米國就是訪問客體,我持有的簽證就是存取權杖。系統中訪問主體是進程客體是一切系統對象。存取權杖中有目前使用者的唯一標識SID,組唯一標識SID以及一些許可權標誌(Privilege)。安全性描述元表(SD)存在於Windows系統中的任何對象中(檔案,註冊表,互斥量,訊號量等等)。SD中包含對象所有者的SID,組SID以及兩個非常重要的資料結構選擇存取控制清單(DACL)和系統存取控制清單(SACL),其中SACL涉及系統日誌用的很少可以先無視。DACL中包含一個個ACE存取控制入口也是許可權訪問判斷的核心,當一個進程訪問某一對象的時候,對象會將進程的Token與自身的ACE依次比對,直到被允許或被拒絕,前面的ACE優於後面的ACE。整體的一個許可權檢查過程如下圖:

--->>

上面簡單介紹了本文要用到的也是Windows存取控制模型核心部分的一些知識,下面來介紹下如何編程實現遍曆ACL來進行存取權限的檢查。本文主要針對檔案對象進行介紹,其他類型的對象大同小異。要用到的兩個主要API為GetFileSecurity()和AccessCheck()。GetFileSecurity能夠擷取指定檔案的安全性描述元表,而AccessCheck可以指定要檢查的許可權,函數能夠將獲得的安全性描述元表與當前進程的Token進行檢查來判斷進程對該檔案對象是否允許相應的許可權。不過這兩個API並不那麼容易用,因為其中要涉及到安全性描述元表和存取權杖的擷取,因此又牽扯出一大把API也涉及一些存取控制的知識。下面依次介紹要使用到的API然後給出整體的代碼。GetFileSecurity的函數原型如下:

BOOL WINAPI GetFileSecurity(    __in          LPCTSTR lpFileName,    __in          SECURITY_INFORMATION RequestedInformation,    __out_opt     PSECURITY_DESCRIPTOR pSecurityDescriptor,    __in          DWORD nLength,    __out         LPDWORD lpnLengthNeeded  );

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。