Windows原理深入學習系列-信任等級檢查

信安成長計劃發表於2022-03-19

這是[信安成長計劃]的第 23 篇文章

0x00 目錄

0x01 介紹

0x02 逆向分析 Win10_x64_20H2

0x03 WinDBG

0x04 參考文章

在之前的時候,一直以為 SACL 只是單純用來審計的,但是在分析的時候發現並不完全是這樣,他還有一些其他的作用

0x01 介紹

根據資料可以發現,對於許可權的檢查是在 ObpGrantAccess 函式當中完成的

圖片

在之前的文章中,我們知道了在進行許可權檢查的時候,會先進行完整性等級的檢查,然後再檢查 ACL,但是在跟入函式以後,發現了在之前還有其他的檢測行為,會先進行信任等級的檢查

圖片

而在其中進行取值的時候是從 SACL 當中取值的,這也就打破了我們之前對於 SACL 僅作為審計用的印象

0x02 逆向分析 Win10_x64_20H2

在進入函式後,首先會獲取 TrustLabel 的 ACE

圖片

通過往上追,可以發現傳入的引數是 SecurityDescriptor 型別的

圖片

根據微軟文件可以知道,這是被訪問者的安全描述符

圖片

然後就是判斷 Control 了,至於是相對位置還是絕對位置與前面文章中的 DACL 是一樣的情況,詳細可以參考《Windows原理深入學習系列-訪問控制列表-關於安全描述符的補充

圖片

接著呼叫 RtlFindAceByType 通過型別來尋找我們想要的 ACE,這裡所要找的就是 SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 了,具體的操作這裡就不看了,之前已經分析過了如何取 ACE,如何判斷 ACE Type 等等,詳細可以參考《Windows原理深入學習系列-訪問控制列表

圖片

在找到以後,還會再進行依次判斷,如果有效就直接返回,也就是找到了

圖片

如果是沒有找到的情況的話,從剛開始也就不跳轉了,直接返回的是零了

圖片

接下來就回到主函式了,如果沒有找到也就直接退出了,這裡假設它已經找到了

這裡面還會涉及到一些其他的操作,暫時先不考慮這些內容,所以後面的一些跳轉也就省略不看了,這些操作也都是成對的,剛開始有申請,退出時有釋放

圖片

接下來會取當前的安全主體的上下文,用來跟目標的安全等級進行對比了,這裡取出了 Token,但是有 PrimaryToken 和 ClientToken 之分

圖片

根據後面邏輯的分析,如果沒有 ClientToken,就會直接用 PrimaryToken 來進行比較,如果有的話,會先進行 ClientToken 比較,當 PrimaryToken 的 TrustLevelSid 大於 ClientToken 後,才會再進行 PrimaryToken 與 目標等級的對比,否則就會使用 ClientToken 與目標等級進行對比

但是 ClientToken 又是什麼東西呢,猜測可能與 Impersonation 有關係

圖片

因為對於 Token 的描述就是有這兩種

圖片

在一些函式呼叫中,ClientToken 也被描述為模擬的客戶端的 Token,這裡也就假設是這樣的用處了,如果不是,請大佬們幫忙指出

圖片

在進行對比的時候就有另外的一個函式來進行了,它會將兩個 SID 都傳入,然後進行對比,而對比的結果是通過 r8 來接收的

圖片

在這個函式中,對比邏輯主要就是有 TrustLabel 的大於沒有 TrustLabel,PP 保護的大於 PPL,Signer 也是高值大於低值

圖片

然後再來看判斷完以後的情況,先看返回值,確定函式執行成功了,然後再看返回值,因為是從 r8 回來的,所以這裡看的就是 var38

圖片

如果不為零,就說明當前的 Trust 的等級是高於目標的,然後將 arg30 置 -1

圖片

否則的話,將目標 ACE 的 AccessMask 的第 24 位置 1,通過微軟文件可以得知,不管成功與否,當前的訪問都是會被審計的

圖片

0x03 WinDBG

可以通過 WinDBG 來觀察到已經被保護的 System Token,先得到安全描述符

圖片

然後交給 WinDBG 來進行解析

圖片

0x04 參考文章

1.https://jsecurity101.medium.com/exploring-token-members-part-2-2a09d13cbb3

2.https://www.microsoftpressstore.com/articles/article.aspx?p=2228450&seqNum=3

3.https://elastic.github.io/security-research/whitepapers/2022/02/02.sandboxing-antimalware-products-for-fun-and-profit/article/

4.https://www.elastic.co/cn/blog/protecting-windows-protected-processes

5.https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-seaccesscheck

6.https://docs.microsoft.com/en-us/windows/win32/secauthz/access-tokens

7.https://docs.microsoft.com/en-us/windows/win32/api/securitybaseapi/nf-securitybaseapi-privilegecheck

8.https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_security_subject_context

9.https://docs.microsoft.com/en-us/windows/win32/api/winnt/ne-winnt-security_impersonation_level

10.https://docs.microsoft.com/en-us/windows/win32/secauthz/access-mask

11.https://docs.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa

12.https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags

相關文章