Linux ioctl 系统调用是内核用于设备控制的通用接口,用户态程序通过打开设备节点并向驱动传递命令码和参数缓冲区来发起操作。由于每个驱动各自定义命令码并在内核上下文中解析参数,ioctl 处理程序成为内核中范围最广、最不统一的本地攻击面之一。一个未验证参数长度的处理程序可能导致越界读写内核内存,且命令空间缺乏集中化目录。本文提出 Linux IOCTL 普查数据库,这是一个从内核源代码派生的可查询攻击面清单。通过 allmodconfig 构建,编译了 878 个模块(涵盖 169 个子树),并利用 libclang 对内核源码进行单次确定性扫描,恢复了 586 个 ioctl 分发入口点、1,289 个解码后的 _IOC 命令码、3,583 个受控输入接收点以及 1,298 个权限门控。第二次扫描将内核自身的文档化威胁模型编码为可查询列,将无能力门控的 ioctl 表面(即无权限可达性的上界,非实际可达性)与通过硬能力门控排除的部分分离。作者用近期 22 个内核内 ioctl CVE 对普查结果进行了回测,并以开放数据形式发布结构层,采用与配套的 Windows IOCTL 普查相同的模式,使得单一查询可跨两个操作系统。该数据库为安全研究人员提供了系统化映射内核 ioctl 攻击面的工具,有助于识别潜在漏洞并评估权限门控的有效性。
💡 推荐理由: 为安全研究员和内核开发者提供首个系统化的 Linux ioctl 攻击面清单,便于漏洞挖掘、审计和权限模型验证,填补了该领域长期缺乏统一目录的空白。
🎯 建议动作: 研究跟进