Ian*_*oyd 9 windows security uac design-patterns 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);
Run Code Online (Sandbox Code Playgroud)
什么,我会做的是通过在命令行上命名管道的名字,告诉自己在那里可以为了得到指示什么它应该做的连接回:
myapp.exe /uac 6C844671-E262-46DD-939E-47517F105FB6
Run Code Online (Sandbox Code Playgroud)
(是的,使用GUID作为管道的名称).
通过这个管道我会告诉我的高架克隆什么数据库,例如:
我担心的是,任何人都可以启动myapp.exe,然后提供各种请求 - 我不希望它做的事情因为我没有启动它,例如:
MaliciousProgram.exe:
ShellExecute("myapp.exe /uac HahaYouDoWhatISayNow")
Run Code Online (Sandbox Code Playgroud)
我记得在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 创建它。
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |