属性为 FILE_ANY_ACCESS 的 IOCTL:是否安全?

IOCTL 定义中的 RequiredAccess 位表明打开代表设备的文件对象时调用方必须请求的访问类型。系统定义的常量 FILE_ANY_ACCESS(常用于驱动程序 IOCTL 和 FSCTL)使 I/O 管理器能够为拥有设备句柄(也即表示目标设备对象的文件对象句柄)的任何调用方发送 IRP。FILE_ANY_ACCESS 本质上允许对目标设备进行无限制的访问。

虽然 FILE_ANY_ACCESS 给调用方提供了方便,但是这会给驱动程序带来风险,因为它为恶意用户创造了一种危害系统的可能途径。例如,IOCTL 可能将设备置于特定的状态,该状态只应该对合法读写设备有效。如果 IOCTL 的 RequiredAccess 被设置为 FILE_ANY_ACCESS,那么任何调用方都可以发出 IOCTL。

您应该做什么?

对于新的 IOCTL,除非确有必要,不要指定 FILE_ANY_ACCESS。大部分请求只需要 FILE_READ_ACCESS 或 FILE_WRITE_ACCESS(或两者,它们可以使用 OR 运算符连接在一起)。

更多信息:
常见的驱动程序稳定性问题

Windows DDK:
使用 I/O 控制码



此信息有用吗?