如何安全地使用UAC提升IPC?

| 我程序的某些部分需要管理访问权限(影响所有用户的设置都存储在HKLM中,并且仅限于管理访问权限)。 我已更改软件以表明需要海拔: 作为响应,我将在提示提升权限时启动我的可执行文件:
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L\"runas\";
shExecInfo.lpFile = L\"myapp.exe\";
shExecInfo.lpParameters = NULL;
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_MAXIMIZE;
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
我要做的是在命令行上传递命名管道的名称,告诉自己它可以连接到哪里,以便获得有关它应该做什么的说明:
myapp.exe /uac 6C844671-E262-46DD-939E-47517F105FB6
(是的,使用GUID作为管道的名称)。 通过这个管道,我可以告诉我的高架克隆是哪个数据库,例如: 它应该连接到哪个服务器数据库 用户应该说做出了改变 它应该添加/编辑/删除的东西 那时我担心的是,任何人都可以启动
myapp.exe
,然后满足各种请求的要求-我不希望这样做,因为我没有启动它,例如: MaliciousProgram.exe:
 ShellExecute(\"myapp.exe /uac HahaYouDoWhatISayNow\")
我记得在Longhorn测试版期间,有一个Channel9视频或一篇文章,谈论UAC以及进行IPC(进程间通信)错误的危险。 我不想重新发明轮子,犯一些已经解决的安全错误。但是我找不到有关使用UAC提升进行IPC的“正确”方法的任何现有指南。 他不接受IPC与产生的提升过程进行通信以进行临时提升动作的模式吗? 编辑:
uac
ipc
标签的跟随者:53     
已邀请:
        我不认为这里存在安全性问题(如下所述)。如果用户无法抬高,则该解决方案将无法正常工作;如果用户可以举起恶意软件,则表明该计算机已经受到威胁。例如,如果恶意用户想要在HKLM中进行更改,为什么在regedit可用时使用myapp.exe? 但是,您对服务器数据库的提及感到困惑。这如何符合海拔要求?一般来说,访问远程资源不需要提升。 (如果myapp.exe或HKLM包含服务器数据库的密码,则不应包含。) 至于IPC的选择:我不是UAC编程专家,但是在搜索MSDN时我已经注意到提升的COM对象多次被提及,例如: http://msdn.microsoft.com/en-us/magazine/cc163486.aspx 另请参见本文第五个链接的PowerPoint幻灯片: http://msdn.microsoft.com/en-us/library/bb756996.aspx 但是,如果您对COM不满意(加入俱乐部!),那么使用您建议的命名管道同样有效。但是,您确实需要采取对命名管道必要的常规预防措施-确保在启动提升的进程之前创建命名管道的服务器端,检查该管道是否已存在,并使用适当的ACL创建它。     

要回复问题请先登录注册