防止 Windows 7 无线网络连接属性显示明文密码

Windows 7 无线网络连接属性的“安全”选项卡有一项名为“显示字符”的复选框,勾选此复选框可以将无线网络连接的密码以明文的形式显示出来。Windows 7 提供“显示字符”原本是方便用户在忘记密码时
可以查看,然而此功能却普遍被视为无线连接密码泄露的安全隐患。很多用户都希望将“显示字符”复选框设置为禁用以避免自己的无线连接密码外泄。


遗憾的是,Windows 7 无论在网络连接设置还是在组策略中均未提供直接禁用“显示字符”的选项。这是
因为 Windows 7 的设计初衷是希望我们通过用户帐户与密码来保护个人数据的安全。换言之,Windows 7希望我们将电脑临时借给别人使用时,能够暂时注销或切换用户帐户返回欢迎屏幕,让别人以其它用户帐户重新登录,这样一来就没有必要禁用我们自己帐户的“显示字符”。可是众所周知,微软在几代 Windows一直大力推荐的这种“快速用户切换”理论一直没能在普通用户中流行起来。自从 Windows XP 首次引入“快速用户切换”功能至今,大多数用户依然只在自己的电脑中设置一个用户帐户,并经常慷慨大方地借给别人使用。因此对于这些用户而言,我们确实有必要想办法禁用无线网络连接的“显示字符”功能。


经过 Process Monitor 对“显示字符”调用的注册表项的监视,笔者发现“显示字符”复选框与注册表项
HKEY_CLASSES_ROOT\AppID\{86F80216-5DD6-4F43-953B-35EF40A35AEE} 存在着关联。在默认的
系统设置中此注册表项的“默认”值为 CElevateWLANUI,有一个名为 AccessPermission 的二进制值、一个名为 DLLSurrogate 的字符串值。此注册表项的默认权限设置非常严格,只有 TrustedInstaller 具有完全控制权限,包括 SYSTEM 以及所有管理员帐户、非管理员帐户对此注册表项均只具有“读取”权限。

如果我们希望一个用户帐户的“显示字符”功能失效,需要将此用户所在的组对此注册表项仅有的“读取”权限也取消掉。为实现此目的,我们必须首先获取此注册表项的所有权,将此注册表项的所有者由默认的TrustedInstaller 修改为我们执行修改操作的管理员帐户。拿到注册表项的所有权后我们就可以重新编辑此注册表项的权限设置,将希望禁用“显示字符”的用户帐户组从此注册表项的用户列表中删除,或者将仅有的“读取”权限也取消即可。例如,假设一台计算机已加入域,如果我们将此注册表项中的所有本地用户组均从列表中删除或取消其全部权限,只保留域管理员对此注册表项的权限,那么这台计算机就只有域管理员登录后才可以使用“显示字符”查看密码,从本地登录的所有用户都将无法再使用“显示字符”。

另外一个可以针对所有的用户帐户组统一生效的方法是修改字符串值 DLLSurrogate,将其值由默认的空白修改为 1。这样无论我们以何种用户帐户登录,虽然“显示字符”复选框看起来还可以勾选,但设置却无法生效,并且会自动恢复为未选中的状态。当然由于 DLLSurrogate 继承了父级注册表项的权限,默认也是归TrustedInstaller 所有并无权修改,所以我们也必须首先获取注册表项的所有权才能将 DLLSurrogate 的值由空白修改为 1。

除了可以直接显示明文密码的“显示字符”复选框外,Windows 7 无线网络连接属性中还提供了导出无线
连接配置文件的功能,也可能会成为无线连接密码泄露的隐患。对那些基本不使用快速用户切换重新登录的用户来说,可能也很想将这个导出功能一并禁用。经过 Process Monitor 的监视,此导出功能与注册表项 HKEY_CLASS_ROOT\AppID\{C100BEBB-D33A-4A4B-BF23-BBEF4663D017} 有关。我们可以参照之前对 {86F80216-5DD6-4F43-953B-35EF40A35AEE} 的处理,首先获取其所有权,然后取消希望禁用导出的用户帐户组对此注册表项的全部权限,即可禁用相应用户帐户导出无线连接配置的功能。