0

我有一个 UMDF 驱动程序,它提供 IOCTL 命令以供 UWP 应用程序访问。UWP 应用程序被提交到商店,并带有适当的自定义功能和签名的 SCCD,以便访问 UMDF 驱动程序。

我从SCCD MS 文档中了解到,这允许 UWP 应用程序访问驱动程序及其 IOCTL,因此当其他 UWP 应用程序尝试访问时,它们将被拒绝。但是,SCCD 没有明确声明 Win32 应用程序仍然能够访问 IOCTL,我认为这违背了拥有自定义功能和 SCCD 的目的。

鉴于这个问题,我知道我必须以另一种方式拒绝来自 Win32 应用程序的请求。

我们想使用这个GetApplicationUserModelId函数来确定应用程序是否不是 UWP 应用程序。这需要 pID,我们可以使用WdfRequestGetRequestorProcessId. 但是,获取此 pID 的进程句柄需要访问其他进程的内存。由于 UMDF 驱动程序没有权限,因为它不拥有进程,ERROR_ACCESS_DENIED因此在尝试调用 OpenProcess 时会返回 an,即使访问权限为PROCESS_QUERY_LIMITED_INFORMATION.

OpenProcess 文档建议,为了打开另一个本地进程的句柄并获得完全访问权限,我们必须启用该SeDebugPrivilege权限。我相信这样做会使驾驶员面临更大的安全风险,因此,坚持下去可能不是一个好主意。

这种方法是否应该有另一种替代方法,或者另一种类型的描述符,或者任何类似的东西可以支持限制 win32 应用程序使用 IOCTL 的目标?

4

1 回答 1

0

对于 UMDF 驱动程序,可以使用该WdfRequestImpersonate功能。此函数创建一个事件回调函数,UMDF 可以使用该函数来模拟请求进程的访问权限。

请注意,Impersonation level应该是SecurityImpersonation. 这需要在 INF 文件中声明,并在WdfRequestImpersonate函数参数中提供。OpenProcess现在可以从回调函数中调用。

请注意,WdfRequestImpersonate直到回调函数结束才会返回,并且模拟仅限于回调函数的内容。

于 2020-10-08T04:56:08.197 回答