The Windows IOCTL Census: A Corpus-Scale, Multi-Architecture Database of the Driver Control-Code Surface
本文介绍了 Windows IOCTL Census,这是一个公开、可查询的数据库,包含了通过对提升后的中间表示进行确定性的、与架构无关的分析所获得的数千万行解码控制码和调用图,该分析涵盖了跨多种架构的 27,087 个已签名 Windows 驱动程序,且在不使用符号执行的情况下实现了对 80% 驱动程序库的覆盖。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下 Windows 操作系统是一座繁忙、繁华的大都市。在这座城市里,有成千上万个专门的“服务站”,被称为驱动程序(drivers)。这些驱动程序让你的计算机能够与硬件(如显卡、打印机或 Wi-Fi 适配器)进行通信。
为了与这些站点沟通,普通人(无特权用户)会发送“票据”,即 IOCTL 代码。你可以把它们看作是特定的指令,比如“打印这一页”或“显示这张图片”。
问题所在:没锁的门
通常情况下,这些服务站都有保安。但有时,保安会打瞌睡,或者站点的锁坏了。如果一个普通人向一个锁坏了的服务站发送票据,他们可能会潜入“控制室”(内核)并改写城市的规则。这就是黑客如何接管计算机的方式。
长期以来,安全研究人员有两种寻找这些坏掉的锁的方法:
- “超级扫描仪”(符号执行/Symbolic Execution): 这些是高科技机器人,试图走遍每一个服务站的每一扇门,看看是否有门没锁。但它们速度慢、容易出错,且只能检查城市的“现代部分”(64 位系统)。它们甚至完全放弃了对那些旧的 32 位建筑的检查,尽管许多危险的建筑就住在那里。
- “通缉名单”(精选列表/Curated Lists): 这是一份已知坏人的名单。它很准确,但它只包含我们已经抓获的罪犯。它无法帮你发现那些躲在阴影里的新面孔。
差距: 以前没有人拥有一张完整的城市地图,能显示出每一个服务站以及每一种票据类型,无论该建筑是新的还是旧的。
解决方案:Windows IOCTL 人口普查
这篇论文的作者构建了那张缺失的地图。他们称之为 Windows IOCTL 人口普查(Windows IOCTL Census)。
他们并没有尝试去走遍每一扇门(因为这既慢又容易出错),而是采用了另一种方法:
- “翻译官”(确定性恢复/Deterministic Recovery): 想象一位可以瞬间读懂任何语言(无论是旧的 32 位还是新的 64 位)建筑蓝图的翻译官。这位翻译官不会去“猜测”按下按钮后会发生什么;他只是通过阅读蓝图,来精确查看存在哪些按钮以及这些按钮通向何处。
- 结果: 他们创建了一个庞大的数据库,包含 27,087 个驱动程序。他们绘制了 310 万个不同的控制代码(票据)和 800 万个内部函数。
他们如何使其发挥作用(三个步骤)
作者不仅仅是倾倒数据,他们将其组织成了一个流水线:
恢复(制图者/Recover):
他们扫描了每个驱动程序并提取了“分发例程(dispatch routines)”。你可以把这理解为识别每个服务站的主大厅,并列出那里可以使用的每种票据类型(IOCTL 代码)。他们对旧建筑和新建筑都进行了这项工作,覆盖了 80% 的驱动程序。- 关键优势: 他们找到了那些“超级扫描仪”无法触及的“旧建筑”(32 位系统)。
富化(风险评估/Enrich):
并非所有的票据都是危险的。他们使用了一种智能 AI(大语言模型/LLM)来专门观察那些最可疑的大厅——即那些保安薄弱(权限宽松)且锁具损坏(输入未检查)的大厅。AI 不会瞎猜;它会根据“制图者”发现的具体蓝图细节给出“风险等级”(严重、高、中)。- 关键优势: 他们没有在安全的站点上浪费时间。他们只关注那些看起来危险的站点。
排序(优先级列表/Rank):
最后,他们创建了一个可搜索的列表。研究人员不再需要猜测应该先检查 27,000 个驱动程序中的哪一个,他们现在可以询问:“显示所有具有特定危险票据类型的驱动程序,”或者“显示前 100 个风险最高的站点。”
他们的发现
- 地图是真实的: 他们通过已知的漏洞验证了他们的地图。例如,他们发现了一个已知的危险驱动程序(NVIDIA 显示驱动),并看到它在他们的危险名单上排名非常靠前,这证明了该系统的有效性。
- “旧城区”充满了机会: 通过纳入 32 位驱动程序,他们揭示了以往工具所忽略的巨大攻击面。
- 交叉检查: 他们将这种“阅读蓝图”的方法与“超级扫描仪”机器人进行了对比。他们发现,虽然机器人在寻找某些事物方面表现出色,但它们漏掉了很多旧建筑。蓝图法发现了机器人看不见的东西,反之亦然。
他们并未声称拥有的一切
- 他们没有发现所有的 Bug: 他们发现了潜在的 Bug(即没锁的门),但他们并没有手动验证每一个是否真的可以被利用。
- 他们没有发布“杀戮名单”: 他们发布了地图(驱动程序的结构)以便研究人员开展自己的工作。然而,他们对具体的“危险位置”(Bug 的确切代码位置)保持私密,以防止坏人利用这张地图立即攻击计算机。
- 这不是万能的修复方案: 它是一个帮助研究人员确定优先级的工具。它将一个“大海捞针”的问题变成了一个“这里有一份最有可能是针的清单”的问题。
核心结论
作者构建了 Windows 驱动程序安全的 Google 地图。在此之前,研究人员要么漫无目的地游荡,要么只能依赖一份简短的已知坏人名单。现在,他们拥有了一个全面的、可搜索的数据库,能够准确显示哪里有门、哪些门没锁,以及哪些门位于这座城市中最古老、最被忽视的部分。这使得他们能够将精力集中在最重要的地方。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。