Windows Vista的UAC功能浅析(3)
切换到“Security”标签页里,就可以看到经过特殊降级处理后的访问令牌,可以看到在下方的特权列表里,只有少得可怜的三个特权,而并没有SeSystemTimePrivilege特权!这就是为什么在缺省情况下,无法在TestAdmin环境下修改系统时间的原因。而在老的系统例如Windows XP,rundll32进程具有SeSystemTimePrivilege特权,如下图所示。
3.查看dllhost进程的访问令牌
要能够修改系统时间,只需单击“时间和日期”窗口右下侧的“Unlock”按钮,即可打开如下图所示的对话框,同时可以看到系统启动了一个consent进程。单击“I want to complete this action”选项,现在应该可以修改系统时间了。看来这个consent进程负责传递消息,以便系统确认提升操作权限。其本质应该是修改相关进程的访问令牌,对于本例来说,应该是在相关进程的安全令牌里添加SeSystemTimePrivilege特权。
按照这样的推断,从理论上来说,现在rundll32进程的访问令牌里应该已经添加SeSystemTimePrivilege特权,以便我们可以修改系统时间,那么果真是这样吗?
结果很让人沮丧,重新打开rundll32进程的属性对话框,发现其访问令牌没有任何改变(并没有新增SeSystemTimePrivilege特权)!这是怎么回事?
反复重新做实验后,终于发现,单击“I want to complete this action”选项后,系统会新增一个dllhost进程(在Process Explorer中绿色显示),在dllhost进程属性对话框的“Image”标签页的“Command Line”文本框里可以看到“/Processid: {9DF523B0-A6C0-4EA9-B5F1-F4565C3AC8B8}”参数。搜索注册表得知,{9DF523B0-A6C0-4EA9-B5F1-F4565C3AC8B8}就是timedate.cpl的AppID,如下图所示。
网友评论