geelaw
295 天前
输入给系统还是那个(安装)程序其实区别不大,因为最终效果包括(安装)程序以高权限运行。通常来说一旦一个程序以高权限运行一次,它就可以固化这一权力,比如把自己变成高权限自启动服务,甚至修改系统。因此纠结这个问题在主流的桌面系统安全模型下意义不大,必须首先信任(安装)程序才可以(向系统)输入密码。
主要的担忧应该是:如何识别输入密码对话框是某个特定程序(自己或者通过系统)发起的?假设有一个恶意程序反复检查是否有安装程序将要提权,发现时率先显示假的凭据窗口,则输入密码会导致安全问题。
在受限用户下输入密码提权是很难确保安全的,即使考虑 Windows 的“要求输入凭据之前按 Ctrl+Alt+Delete”,也需要配合公钥体系才能较好解决这个问题。恶意程序可以率先发起提权请求,于是用户按了 CAD 之后再输入密码,虽然密码不能被恶意程序读取,但还是会被恶意程序截获权限。公钥体系可以确保提权对话框提示目标程序的签名,因而避免一切未经根证书间接信任的恶意程序。
标准操作是使用快速用户切换,完全切换到已经是高权限的环境下去运行受信任的(安装)程序。登录之前,可以先按 CAD 确保是系统的登录对话框而不是别的程序假冒的。