欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

Windows Vista UAC 和 可信任安全

Smallfrogs[张康宗]
http://www.KZTechs.COM

Level 200

UAC,Windows Vista 里面重要构成部分。对 Windows 安全保护起着绝对重要用途。

但是,UAC 不等于绝对安全,当你碰到UAC提示框的时候,请千万小心后面的陷阱:

众所周知,UAC提示框触发的时候,Windows 会检测新创建进程映象文件的数字签名:

  • 如果新创建的进程的数字签名被阻止了,那么会显示一个红色的提示框:

image4

  • 如果新创建的进程没有合法的数字签名,那么会显示一个橘黄色的提示框。

image1

  • 如果新创建的进程拥有一个受信任的第三方数字签名,那么会显示一个灰色提示框。

image2

  • 如果新创建的进程拥有一个受信任的Microsoft数字签名,那么会显示一个绿色的提示框。

image3

随着今后Windows Vista用户量的增多和培训的努力,大多数用户对于UAC的提示框都产生了一种条件反射:对于灰色或者绿色的UAC提示框完全信任,直接点击Continue按钮了。

这种做法产生了一种严重的安全问题点:UAC检查的是新创建的进程的映象文件。如果这个新创建的进程通过了UAC检查,那么他将获得完全的管理员权限,也就是说这个新创建的、通过UAC检查以后的进程,再创建其他的子进程,将不会触发UAC提示

换句话说,如果利用某种手段,就可以让一个危险程序隐蔽的运行起来,而用户看到的UAC提示框不是直接针对这个危险程序的。

 

操作步骤:

  1. 在《如何将自身进程运行为admin模式》文中我说过,利用ShellExecute可以创建一个显式需要完整管理员权限的进程。
  2. 因此,我创建了一个Demo程序,显示的将命令行解析器 cmd.exe 创建为拥有完整管理员权限的进程。
  3. 先前说过,当一个进程拥有了完全管理员权限以后,它创建的子进程即使会触发UAC动作,也不会看到了。利用这个特性,我的Demo程序成功的将显示需要完整管理员权限且一定会触发UAC提示的 SREng 主程序创建起来了,且看到的UAC提示不是 SREng 的。

代码片段:

TCHAR   szPath[] = _T("c:\\windows\\system32\\cmd.exe");
TCHAR   szParam[] = _T("/c start d:\\Smallfrogs\\Codes\\SREng\\Product\\SREngPS.EXE");

ShellExecute(NULL, _T("runas"), szPath, szParam, NULL, SW_SHOW);

编译上述代码,运行以后会看到一个很有意思的现象:我希望运行SREng,但是不想看到SREng 的UAC,因此我用 cmd.exe 的UAC代替了SREng的UAC提示(如下图所示):

image3

大多数用户看到上述的UAC提示框的时候,都会点击Continue按钮,因为UAC提示框是绿色的,很少有用户会点击 Details 按钮,因为这个按钮很不显眼。但是当我们点击Details按钮以后,我们会看到别有一番天地:

image5

Details里显示:程序利用 cmd.exe 的 /c 参数创建SREng进程,而 cmd.exe 又被显示的被赋予完整管理员权限,因此  cmd.exe 创建的 SREng 进程也继承了 cmd.exe 的管理员权限,且不会出现 UAC 询问对话框。

利用上述方法,UAC 提示框被成功替换了。

 

解决方法

既然我今天公布了这个方法,那自然会公布相应的解决方法:碰到UAC提示的时候,切记一定要点击 Details 按钮,看看命令行参数。如上图那样,如果看到 cmd.exe 后面跟了一些不属于预期内容的参数,请不要点击 Continue 按钮,否则UAC这层脆弱的防护措施就失效了。

强烈建议每次看到UAC提示框,无论什么情况,都点击Details按钮看看,以免恶意程序神不知鬼不觉的被运行了。

Smallfrogs
http://www.KZTechs.COM

已发表 2007年12月31日 17:28 作者 smallfrogs

评论

# re: Windows Vista UAC 和 可信任安全

2007年12月31日 21:53 by aloki

谢谢提醒,以后使用的时候会注意的了。

# re: Windows Vista UAC 和 可信任安全

2008年1月1日 20:32 by ahpeng

对喔,UAC只会检测发起的EXE,对其所调用的后续组件,例如Dll也不会检测。

这是安全性和易用性之间的权衡。

所以,UAC不是用来防御恶意软件的,而是为了让所有应用程序尽可能运行在标准用户下。这样可以防止合法软件和合法用户,可能因为无意之中破坏系统完整性。

# re: Windows Vista UAC 和 可信任安全

2008年1月3日 23:45 by root

可以通过XX修改,甚至抹掉Detail中的相关信息。

况且数字签名也很容易被XX。。

# re: Windows Vista UAC 和 可信任安全

2008年1月3日 23:54 by root

可以通过XX修改,甚至抹掉Detail中的相关信息。

况且数字签名也很容易被XX。。

# Microsoft Windows Vista UAC 之数字签名认证

Smallfrogs[张康宗] http://www.KZTechs.com 2007年12月份的时候,我曾经撰写过一篇文章《 Windows Vista UAC 和 可信任安全 》( http://blogs.itecn.net/blogs/smallfrogs/archive/2007/12/31/windows-vista-uac.aspx

该帖子已禁止评论