WEB开发网
开发学院网络安全安全技术 使用协议转换 - 防御提示 阅读

使用协议转换 - 防御提示

 2009-02-09 13:52:49 来源:WEB开发网   
核心提示: 将高权限进行分解可以通过将网关进程一分为二来解决这一难题,确切来说,使用协议转换 - 防御提示(4),只有一行需要 TCB 权限的代码: new WindowsIdentity(userPrincipalName)仅仅因为这一行代码需要较高的权限就提升整个网关的权限等级,未免过于贸然,该值

将高权限进行分解

可以通过将网关进程一分为二来解决这一难题。确切来说,只有一行需要 TCB 权限的代码:

new WindowsIdentity(userPrincipalName)

仅仅因为这一行代码需要较高的权限就提升整个网关的权限等级,未免过于贸然。当您有接受来自远程用户输入的进程、在所有时间始终运行的进程以及以高权限运行的进程时,您就处在危险的境地。解决方法是从网关程序中完全删除这行代码,将其移至高权限帮助器进程中。如果您是经验丰富的 Win32 系统开发人员,这不难做到,但如果您是刚刚接触 Win 32 平台或 Win32 的新手,往往会心有余而力不足。因此,在本专栏的余下部分,我将向您介绍如何构建能够承载运行这行高敏感度代码的安全登录服务。接下来,您将了解到许多不同的内容,例如,如何在使用 Microsoft .NET Framework 的进程之间传递令牌,如何扩展 System.Security.AccessControl 以及如何使用 COM+ 来承载运行高权限的进程。

内核对象和句柄

每个 Windows 进程都有一个句柄表,该表可以引用 Windows 内核对象,如文件、信号灯、令牌等。Win32 句柄是用于指示此表的整数,严格来讲,它们只在打开了句柄的进程中才有意义。例如,您不能将文件句柄的值写入剪贴板,也不能期望其他进程能够读取该值并开始将其作为句柄使用。

如果您要将一个打开的句柄传送到另一个进程,必须使用 Win32 DuplicateHandle API。由于登录服务要获取的 WindowsIdentity 封装了一个这类句柄,因此将其序列化以进行通信实际上并不可取。这相当于已经使用 DuplicateHandle 将条目插入到该目标进程的句柄表。

因此,计划如下。网关服务将使用一些易于确保安全的进程间通信技术来调用登录服务。作为这种调用的一部分,网关将提供两个参数:要登录用户的用户名以及网关进程的进程 ID,这样,登录服务就能知道将得到的令牌句柄“推”往何处。然后,登录服务将返回句柄整数值,该值代表了对调用方句柄表的索引。接下来,调用方可以使用该值作为 Win32 句柄构造其自己的 WindowsIdentity 以便封装句柄。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:使用 协议 转换

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接