什麼是使用者介面權限隔離機制

來源:互聯網
上載者:User
使用者介面權限隔離(User Interface Privilege Isolation,簡稱UIPI),是從Windows NT 6.0開始引入的技術。其目的在於防止粉碎視窗攻擊(英語:Shatter
attack)。使用者介面權限隔離阻止較低等完整性層級(Integrity level)進程的視窗向較高等完整性層級進程的視窗發送訊息,但也有一些訊息不被阻止。 [1] Windows訊息是一種處理序間通訊機制,可被低等完整性層級的惡意軟體利用,在較高等完整性層級的進程上下文裡執行任意代碼,可能允許權限提高。

介紹

在早期版本的Windows中,同一個使用者帳號下啟動並執行進程共用相同的安全許可權。例如,一個線程可以發送視窗資訊到另一個線程中的視窗。

從Windows Vista開始這個並不總能正常工作。新特性權限等級被附加到進程上(也可以是其它特性)。進程不可以將訊息視窗發送到具有更高權限等級的進程,儘管他們以運行於同一個使用者帳號(例如當前登入使用者)。

通過UIPI(使用者介面權限隔離)機制防止來自其它可能更高許可權的線程中建立的windows訊息進行惡意代碼攻擊。

顯示UIPI

此問題在UAC(使用者帳戶控制)啟用時最為清晰(預設情況下是啟用的)。

UAC中,一個管理員登入擷取兩個令牌對象:第一個是管理員令牌,具有最高許可權(類似於Windows Vista以前版本的系統帳號),

                                                                                 第二個令牌是過濾後的版本,帶有標準使用者權限。

預設情況下,進程用完整性層級為normal(UIPI 層級分為low,normal,high,和system)的標準使用者啟動。作為對比,進程使用管理員權限(例如,當使用者右擊“Run as Administrator”或用”runas”命令調用SheellExecute)使得進程具有high的權限等級。

如此,系統可以用使單一權限等級運行兩種類型的進程(技術上講用的是同一使用者帳號)。UIPI支援低完整性層級(integrity level)的進程和更進階別的進程進行通訊。

使用用Windows Sysinternals 的Process Explorer查看權限等級(http://www.microsoft.com/technet/sysinternals ) ,選擇“Integrity Level”列

 

      

                   

這裡有個基於同一圖片的兩個進程的例子,其中一個用標準使用者權限啟動另一個使用管理員權限啟動。注意他們是不同的完整性層級(integrity level)。

  

UIPI 施加限制

較低許可權的應用程式不能做如下操作:

•              驗證更高許可權進程建立的視窗。調用 SendMessage 或 PostMessage到更高許可權進程建立的視窗

•              使用線程鉤子來附加一個更高許可權的進程。

•              使用日誌鉤子(SetWindowsHookEx) 來監視更高許可權的進程

•              DLL注入到更高許可權的進程。

下列windows訊息永遠是允許狀態:

•              0x000 - WM_NULL

•              0x003 - WM_MOVE

•              0x005 - WM_SIZE

•              0x00D - WM_GETTEXT

•              0x00E - WM_GETTEXTLENGTH

•              0x033 - WM_GETHOTKEY

•              0x07F - WM_GETICON

•              0x305 - WM_RENDERFORMAT

•              0x308 - WM_DRAWCLIPBOARD

•              0x30D - WM_CHANGECBCHAIN

•              0x31A - WM_THEMECHANGED

•              0x313, 0x31B (WM_???)

 

UIPI 問題的修複

基於比Windows Vista更早的作業系統的應用程式會需要互相之前能傳遞訊息。Windows Vista 引入了ChangeWindowMessageFilter API,這是已編檔方法,用來添加或刪除能通過隔離等級的訊息。需要允許訊息傳遞到更高許可權的進程的視窗時,使用如下方法:

ChangeWindowMessageFilter(message, MSGFLT_ADD);

類似的標記MSGFLT_REMOVE從進程允許清單中刪除訊息。

Windows 7引入了一個新的函數ChangeWindowMessageFilterEx,相對於控制整個進程它可以在特定視窗控制允許訊息:

BOOL ChangeWindowMessageFilterEx(

    HWND hWnd, UINT message, DWORD action,

    PCHANGEFILTERSTRUCT pChangeFilterStruct

);

事件的參數可以是MSGFLT_ALLOW (類似於ChangeWindowMessageFilter中的MSGFLT_ADD ), MSGFLT_DISALLOW (類似於MSGFLT_REMOVE),和 MSGFLT_RESET,將視窗重設成預設篩選器,可選的架構允許操作結果以接收更多的資訊。

原文出處:來自網路

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.