权限提升与盾牌
Vista下进程默认运行权限为标准用户权限,是受限的,无写系统目录、注册表(HKEY_CURRENT_USER除外)权限,对于有些需要管理员权限才能进行的操作,vista下提供了提升功能。
可给菜单、按钮加上盾牌风格,提示用户需要提升才能运行。
添加办法:
SendMessage(
hBtnWnd
,
BCM_SETSHIELD
, 0, 1)
进程运行权限判断:
OpenProcessToken
TOKEN_ELEVATION
te;
GetTokenInformation(hToken
,(TOKEN_INFORMATION_CLASS)(
TokenElevation
),&
te
,sizeof(
te
), &
dwReturnLength)
通过
te
.
TokenIsElevated
来得到进程权限是否提升。
提示用户高权限运行方式:
Verb
参数设为
runas,
方式调用
ShellExecuteEx
。
会话
XP、Vista引入会话概念,运行进程都属于某个会话,一般服务运行于session 0
,用户登录后启动的进程运行于同一session ,不同session进程间通讯 可能需要特殊机制(管道、共享内存、com),但消息传递会失败。Winlogon以system权限运行于登录用户会话。
进程间通讯
Vista下低权限进程向高权限进程发送消息号大于
WM_USER
会被拦截,除非在接收方调用
ChangeWindowMessageFilter
指定可接收该消息。
保护模式
Vista下对象安全级别英文叫:
mandatory integrity level
,mandatory
:强制的,
托管的
强制完整性级别,共四个级别:
- System: Used by OS components, should not be used by applications.
- High: Processes that are running elevated with full admin rights.
- Medium: Processes launched in the normal fashion.
- Low: Used by IE and Windows Mail to provide protected mode.
进程运行时刻决定属于哪个级别,并且不能更改。
划分主要的三个作用:
- Any securable objects that the process creates get that same integrity level.
- The process cannot access a resource whose integrity level is higher than the process's own level.
- The process cannot send window messages to a process that has a higher integrity level.
Virtualization(虚拟化)、Redirection
拦截或者说不让进程写保护的注册表和文件系统区域,但依然让进程正常运行,称为虚拟化。
对于
Medium
级别受限写的区域包括:
HKLM
,
system32
Program Files
等等
而对于low-integrity更加受限。
当低权限进程试图写受限区域,系统会重定位到当前进程可操作目录
比方:
虚拟化前C:/ ProgramData
虚拟化后:C:/Users/test/AppData/Local/Microsoft/Windows/Temporary Internet Files/Virtualized/C/ProgramData/
内核对象
A进程创建的内核对象如event 或 mutex,如果低权限的B进程要使用,则必须减低内核对象的ACL和integrity-level。具体可参见文献SetObjectToLowIntegrity函数。
参考文献
l A Developer's Survival Guide to IE Protected Mode
http://www.codeproject.com/vista-security/PMSurvivalGuide.asp