Windows核心概念
對微軟作業系統的工作原理了解得越多,可從Sysinternals系列工具獲得的價值就更多了。
在2016年07月18日併購了專營系統復原及資料保護的 Winternals 公司,也將這家公司的 Sysinternals 網站裡廣受好評的免費工具納入了 TechNet 網站的 Windows Sysinternals,並且繼續維持免費下載。
main utilities to which they apply include:
■ Administrative rights, and how to run a program with administrative rights (Applies to most of
the utilities)
■ Processes, threads, and jobs (Process Explorer, Process Monitor, PsTools, VMMap, ProcDump,
TCPView, RAMMap)
■ User mode and kernel mode (Process Explorer, Process Monitor, Autoruns, VMMap, ProcDump,
DebugView, LiveKd, TCPView, RAMMap, LoadOrder)
■ Handles (Process Explorer, Handle)
■ Application isolation (Process Explorer, Process Monitor, AccessChk, WinObj, Sysmon, PsGetSid)
■ Call stacks and symbols, including what a call stack is, what symbols are, and how to configure symbols in the Sysinternals utilities (Process Explorer, Process Monitor, VMMap)
■ Sessions, window stations, desktops, and window messages (Process Explorer, Process Monitor, PsExec, AdInsight, Desktops, LogonSessions, WinObj, RegJump)
為了保護系統上的敏感資源,防止被修改或揭露給未經授權的實體,Windows NT始終提供了豐富的訪問控制模式(UAC)。 在這個模式中,使用者帳號大多可以獲得管理員或一般使用者權利。 管理員可以完整不受限制地訪問電腦全部資源,而一般使用者則會受到限制而無法更改操作系統配置,也無法訪問屬於其他使用者的資料。 然而由於一些歷史原因,直到最近,Windows電腦上的終端使用者依然經常的獲得管理訪問權利,因此很多使用者並不清楚這兩種權限有什麼差別(迄今Windows 10電腦上創建的第一個本機使用者帳號仍然是Administrators組的成員)。
就算沒有明確的包含在Administrators群組中,如果能夠在配置或控制更高權限上下文中運行的軟體,那麼使用者等於對電腦有了管理控制權限。 例如:允許使用者控制被管理員或服務使用的系統級文件或註冊表位置(類似於Windows Vista之前系統中的Power Users群組);為使用者提供等於管理員的特權,如調整、獲取所有權、還原,或加載驅動等特權;或啟用Windows Installer的AlwaysInstallElevated策略,讓任何一個使用者執行的任何MSI文件都使用系統帳號執作。
多年來,希望提高安全性並降低風險的組織都已開始將最終端使用者全面轉換為“非管理員”模式。 隨著Windows Vista中開始引入用戶帳戶控制(UAC),包管理員群組成員在內的使用者執行的大部分程序都在以普通用戶的權利運行,不再使用管理權利。 然而,有時候又必須使用管理員權限執行某些程序。
很多Sysinternals工具需要具備管理權限,但大部分工具在一般使用者的權限之下也可以正常的使用所有功能。 同時還有一些工具可以在標準使用者的權限下正常運行,但某些功能需要具備管理權限,因此在使用標準使用者權利時會在執行時,淢少了一部分的功能(無管理權限的部份)。
如果使用管理員群組帳戶(對於未加入網域的電腦,預設只有創建的第一個使用者屬於管理員群組成員),備份作業等高特權組成員賬戶,或分配了“跟管理員相同的”特權的帳戶登入執行Windows Vista或更新版本的作業系統設備,則本地安全機構(LSA)會為該用戶創建兩個登錄會話,每個會話具備一個不同的訪問指令(本書第9章中介紹的LogonSessions工具可以枚舉這些會話)。 其中一個指令代表使用者的完整權利,以及所有群組關係和特權;另一個是經過篩選的指令,基本上等於標準使用者的權利,其中會禁用所有高特權組並刪除高級特權。 系統會使用這個篩選後的指令創建該用戶的初始進程,例如Userinit.exe和Explorer.exe,同時該指令會被所有子執行序繼承。 使用用戶的完整指令啟動執行序需要首先進行UAC提升,這一個過程是由應用程序訊息(Appinfo)服務進行協調的。 雖然系統中依然提供了Runas.exe命令,但無法調用Appinfo服務,因此其效果與Windows XP中有所不同。 如果使用Runas.exe啟動一個程序並指定了管理帳戶,則目標程序將在該帳戶的“標準用戶”版本下運行。
可通過下列任何一種方式對新的執行程序觸發UAC提升。
程序文件包含的清單指出該程序需要提升。 Sysinternals某些需要提升的GUI工具,例如Disk2Vhd和RAMMap就包含這樣的清單。
用戶右鍵單擊程序,從上下文菜單中選擇【以管理員身份執行】,藉此明確要求對該程序的執行進行權限提升與授權。
Windows自發判斷出要運行的是遺留的舊版本安裝程序(安裝程序檢測功能預設已啟用,但可通過安全政策將其關閉)。
所有要執行的應用程序關聯了某種需要提升的兼容性模式或Shim。
如果已經使用管理指令運行了父執行程序,子執行程序會直接從父執行程序繼承該指令,無需進行UAC提升。 按照慣例,需要管理權限的控制台工具(例如Sysinternals LogonSessions)無需UAC提升,但用戶必須從提升後的命令提示字元或Windows PowerShell控制台中運行這樣的工具。
一旦觸發後,UAC提升的過程可通過3種方式完成。
安靜的在不用最終使用者介入的情況下完成提升。 該選項僅適用於Administrators群組成員使用者。 預設情況下,在Windows 7和更新版系統中,某些Windows命令已經啟用了背景提升。 用戶可以通過安全策略為所有提升請求啟用靜默提升。
要求得到同意用戶會被詢問是否允許提升,並能看到包含是/否選項的對話框(如圖2-1所示)。 該選項僅適用於Administrators組成員用戶,且是這些用戶的默認設置(適用於Windows 7中除了默認靜默提升之外的其他所有提升)。
要求提供依照使用者會被要求提供管理員帳號的憑證。 這是針對所有非管理員賬戶的預設做法,同時也是非管理員用戶唯一可以觸發的UAC提升。 通過配置安全策略可以讓管理員用戶也進行這種提升。
請注意,可以通過安全策略禁用標準用戶的UAC提升。 在配置該策略後,用戶需要提升時將收到錯誤信息。
禁用使用者帳號控制後,Windows會恢復為類似Windows XP的運行模式。 此時LSA不再創建篩選的指令,管理員群組成員執行的程序將始終具備管理權利。 此外系統將不再顯示提升提示,但可以通過Runas.exe以管理權限啟動程序。 這裡需要注意的是,禁用UAC的同時會禁用Internet Explorer保護模式,此時Internet Explorer將使用已登錄用戶的完整權利運行。 禁用UAC還會關閉文件和註冊表虛擬化,這個功能使得很多在Windows XP上要求具備管理權利的應用程序能夠使用標準用戶權利運行。