1、USB FUZZ工具前沿探索联想全球安全实验室何丙阳 吴优 李昊(团队开发者)李昊吴优何丙阳蒋青喆目录动机Windows hello模拟与破解硬件模拟USB studio的开发FUZZ引擎高效fuzz数据生成Windows Hello 模拟与破解参考:CVE-2021-34466Windows Hello 模拟与破解 开发一套与Windows兼容的虚拟摄像头 研究Windows Hello 人脸解锁流程Windows Hello 模拟与破解修复方案?ESS(增强型安全登录)无法信任的USB接口 USB is Vulnerable Do Not TRUST Your USB Devices设计一
2、套USB 自动化安全测试的解决方案USB设备仿真动机USB Studio跨平台使用,在不同类型设备及不同OS上使用设计一套低成本解决方案,以及使用方便提高自动化程度,避免人工过度参与具备扩展性,模拟不同USB设备USB 简介USB轮询流程USB描述符USB接口类型:Type-A、Type-B、Mini-USB、Micro-USB、USB Type-C 等。USB接口版本:USB 1.1、USB 2.0、USB 3.0、USB 3.1、USB 3.2。Fuzz 的前提:模拟USB设备模拟真实USBUSB设备多种多样我们是不是重复造轮子?如何让被测端识别被模拟USB为正常设备?如何用一个硬件模拟不
3、同类型USB设备?Fuzz 的前提:模拟USB设备我们是不是重复造轮子?USB Fuzz?Facedancer+Umap2Defensics Fuzz 的前提:模拟USB设备模拟真实USBUSB设备多种多样我们是不是重复造轮子?如何让被测端识别被模拟USB为正常设备?如何用一个硬件模拟不同类型USB设备?Fuzz 的前提:模拟USB设备 建立USB通信过程 设置USB设备地址 获取USB描述符 获取USB设备其他信息主机对USB设备进行枚举USB枚举实现Fuzz 的前提:模拟USB设备模拟真实USBUSB设备多种多样我们是不是重复造轮子?如何让被测端识别被模拟USB为正常设备?如何用一个硬件模
4、拟不同类型USB设备?Fuzz 的前提:模拟USB设备抽象出USB模板框架设备描述符摄像头鼠标键盘U盘配置描述符UVCUACHIDBOT接口描述符接口关联描述符端点描述符字符串描述符USB设备枚举数据Fuzz 的前提:模拟USB设备Lua引擎:差异化处理USB设备解析特性单元Lua回调函数入口Lua脚本-Lua 语法简单、轻量-可定制化实现-上传 Lua 脚本,无需重新烧录拓展:Bad USB 实现Lua脚本Lua引擎USB Studio键盘指令Bad USB 脚本OpCode:0 x08USB-Studio系统架构以USB协议作为底层框架,规定数据和通信规范。在其上封装多种特定应用层协议,实
5、现多种设备模拟。在通信接口层上嵌入轻量传输级Lua脚本,提供灵活的可定制化固件。TargetFuzzerFuzz 上位机Fuzzer 设计Fuzzer 反馈机制提高Fuzz效率模拟USB设备,发送USB数据FuzzerTargetusbStudioAgentDescriptors 数据?Fuzzer 设计封装Fuzz数据|操作码opcode|数据总长度 AllLength|数据类型Type|数据长度Length|数据data|封装Fuzz数据Fuzzer 设计模板生成:使用真实USB设备的描述符生成原始数据。Fuzz 引擎:提供变异规则,封装变异逻辑。异常数据回放:将反馈的异常数据进行回放验证
6、。Fuzzer 流程Fuzz 流程Fuzzer 反馈机制Generate Log-变异数据运行日志生成-异常点描述符记录监测 USB studio response-描述符运行路径记录-操作码响应-掉电检测(例如BSOD)被测端 Agent 上报-应用崩溃应用崩溃监控USB掉电监控提高Fuzz效率提高Fuzz效率 USB热插拔 变异策略过程中出现的问题 串口引发数据二次变异?USB 热插拔问题:每进行一次fuzz,USB 复位后要重新插拔,主机才能枚举,从而影响Fuzz效率?