- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
内核漏洞挖掘技术
展开查看详情
1 .内核漏洞挖掘技术 第十届开源操作系统年度技术会议(OS2ATC) 张超 清华大学
2 .5年前:《内核漏洞挖掘研究初探》 网络研究院 INSC https://netsec.ccert.edu.cn/chaoz 2
3 .5年间的进展 网络研究院 INSC Linux kernel 漏洞统计数据 (source: CVE details) https://netsec.ccert.edu.cn/chaoz 3
4 .5年间的进展 网络研究院 INSC Bugs found by Syzbot (Syzkaller) till Mar 24, 2023 (First commit on Aug 17, 2017) https://netsec.ccert.edu.cn/chaoz 4
5 .内核漏洞示例 网络研究院 INSC https://netsec.ccert.edu.cn/chaoz 5
6 . 漏洞挖掘技术发展历史 网络研究院 INSC 第一阶段 第二阶段 第三阶段 第四阶段 人工审计 规则扫描 动态测试 智能挖掘 随机畸形测试例,模拟攻 知识与数据驱动, 静态分析、符号执行、 击者攻击输入 遗传进化算法 源代码审计、逆向工程、 模型检验 经验规则 1960s 1970s 1990s 2013 依赖经验、无法扩展 误报高/可扩展性差 漏报高、覆盖率低 智能进化
7 .模糊测试(fuzzing) 网络研究院 INSC • Fuzzing 模糊测试 ➢ 生成/变异测试例, 测试, 检查, 重复… monitor Generator/ Security Mutator how? inputs target violation? program bugs • 问题/挑战: ➢ 在无穷的输入空间中,如何高效搜索有限的漏洞样本? 7
8 .智能模糊测试(fuzzing) 网络研究院 INSC 变异:探索 测试例生成/选择 测试例变异 初始种子 生成器 种子 输入 测试例 能量 变异策 选择器 分配 略选择 语料库 测试例 测试例 (种子池) Fuzzing循环 测试例 测试例 测试例执行 目标程序 测试例 (反馈信息采集) 筛选 反馈 覆盖率 漏洞 正反馈? 信号 收集 检测 漏洞样本 优胜劣汰:进化 https://netsec.ccert.edu.cn/chaoz 8
9 .代表性kernel fuzzing方案:kAFL 网络研究院 INSC • Fuzzer与kernel ➢ Fuzzer:host用户态 ➢ Kernel:guest内核 • 测试例变异 ➢ 基于AFL • 覆盖率采集 ➢ Intel PT(硬件辅助) • 漏洞检测 ➢ N/A • 其他特性 ➢ 支持闭源内核 https://netsec.ccert.edu.cn/chaoz 9
10 .代表性kernel fuzzing方案:Syzkaller 网络研究院 INSC • Fuzzer与kernel ➢ Fuzzer:guest vm用户态 ➢ Kernel:guest vm内核 • 测试例变异 ➢ Syzlang描述syscall格式 • 覆盖率采集 ➢ kcov(源码编译插桩) • 漏洞检测 ➢ KASAN(源码编译插桩) ➢ KTSan, KMSan, KUBSan • 其他特性 ➢ 远程管理, web展示, 并行化 https://netsec.ccert.edu.cn/chaoz 10
11 . (1)如何改进? “FANS: Fuzzing Android Native System Services via Automated Interface Analysis” USENIX Security 2020 生成 变异:探索 测试例生成/选择 策略 测试例变异 初始种子 生成器 种子 输入 测试例 能量 变异策 选择器 分配 略选择 语料库 测试例 测试例 (种子池) Fuzzing循环 测试例 测试例 测试例执行 目标程序 测试例 (反馈信息采集) 筛选 反馈 覆盖率 漏洞 正反馈? 信号 收集 检测 漏洞样本 优胜劣汰:进化 https://netsec.ccert.edu.cn/chaoz 11
12 .Problem: Android System Service 网络研究院 INSC • ❏ C1. Multi-Level Interface Recognition • ❏ Collect all top-level Interfaces, then identify multi-level interfaces • ❏ C2. Interface Model Extraction • ❏ Collect all of the possible transactions of each interface • ❏ Extract the input and output variables in the transactions • ❏ C3. Semantically-correct Input Generation • ❏ Variable name and variable type, variable dependency, interface dependency 12
13 .Design 网络研究院 INSC https://netsec.ccert.edu.cn/chaoz 13
14 .Design 网络研究院 INSC • Features of interface ❏ Services use onTransact method to dispatch transactions https://netsec.ccert.edu.cn/chaoz 14
15 .Design 网络研究院 INSC • Services (interfaces) use onTransact method to dispatch transactions ➢ usually implemented as a switch statement, where each case statement relates to one transaction • Services utilize special methods (e.g., readInt32, writeInt32) to deal with I/O variables ➢ Extract I/O variables (patterns, name, type) by analyzing such methods https://netsec.ccert.edu.cn/chaoz 15
16 .Design 网络研究院 INSC • Interface dependency: ➢ Generation dependency: writeStrongBinder() Use dependency readStrongBinder() • Variable Dependency ➢ Intra-transaction dependency: e.g., conditional dependency ➢ Inter-transaction dependency: matching types, and similar names https://netsec.ccert.edu.cn/chaoz 16
17 .Evaluation: Interfaces & Transactions 网络研究院 INSC ❏ 43 top-level interfaces ❏ 25 multi-level interfaces ❏ Most interfaces are written manually interfaces transactions https://netsec.ccert.edu.cn/chaoz 17
18 .Evaluation: Interface Dependency 网络研究院 INSC https://netsec.ccert.edu.cn/chaoz 18
19 .Evaluation: Vulnerabilities 网络研究院 INSC 30 vulnerabilities, 20 confirmed by Google ($$$), 138 Java exceptions https://netsec.ccert.edu.cn/chaoz 19
20 . (2)如何改进? PrIntFuzz: Fuzzing Linux Drivers via Automated Virtual Device Simulation, ISSTA 2022 生成 变异:探索 测试例生成/选择 策略 测试例变异 初始种子 生成器 种子 输入 测试例 能量 变异策 选择器 分配 略选择 语料库 测试例 测试例 (种子池) Fuzzing循环 测试例 测试例 测试例执行 目标程序 测试例 (反馈信息采集) 筛选 反馈 覆盖率 漏洞 正反馈? 信号 收集 检测 漏洞样本 优胜劣汰:进化 https://netsec.ccert.edu.cn/chaoz 20
21 . Problem: 网络研究院 INSC Drivers are unreliable and underexplored • Distribution of bugs in the android kernel[1] • The distribution of code in drivers[2] • 驱动程序代码量大、漏洞多; [1] https://events.static.linuxfound.org/sites/events/files/slides/Android-%20protecting%20the%20kernel.pdf [2] Asim Kadav and Michael M Swift. 2012. Understanding modern device drivers. ACM SIGPLAN Notices 47, 4 (2012), 87–98. • 但是,fuzzing难以测试驱动代码,因为驱动代码依赖于外设,实际测试环境缺少大量的硬件外设
22 . Threat Model 网络研究院 INSC User Space Control Flow fd = open(“/dev/xx”); Data Flow ioctl(fd, cmd, arg); user data sent as user data requested by System call system call arguments copy_from_user() Kernel Device Drivers Space MMIO Interrupt DMA • Data Flow Peripheral ➢ The arguments of the system call APIC DMA Controller ➢ MMIO, DMA from the peripheral • Control Flow ➢ System call ➢ Interrupt from the peripheral • 能不能自动模拟外设?Fuzzing工具模拟攻击者从多个维度注入测试数据
23 .解决方案:PrIntFuzz 网络研究院 INSC Linux Source Code Driver Preparation Fuzzing in Config Automated • 从驱动代码提取外设知识 Enabling Devices Generation Virtual Device Modeling Coverage and Fault Device Functionality • 自动模拟外设(E) IR Generation Instrumentation Simulation Information Kernel Coordinated Multi- • 注入多维度测试数据 Collection Compiling dimension Fuzzing • MMIO, DMA, PIO bzImage • 注入硬件中断(I)、 • 注入硬件错误 Device Info System Call Bug Templates Report https://netsec.ccert.edu.cn/chaoz 23
24 .实验评估:外设模拟 网络研究院 INSC 自动模拟311个PCI、472个I2C、169个USB设备,比QEMU多3倍 311个PCI外设 472个I2C、169个USB设备 https://netsec.ccert.edu.cn/chaoz 24
25 .实验评估:代码覆盖率 网络研究院 INSC 代码覆盖率提升120% 消融实验: D: Default device; E: Extra devices; I: Interrupts D 11968 12000 11569 D+I C o v e re d B a sic B lo ck s D+E 10000 D + E+ I 8000 6000 4000 2353 2609 2000 0 D D+I D+E D + E+ I https://netsec.ccert.edu.cn/chaoz G ro u p 25
26 .试验评估:缺陷数量 网络研究院 INSC 在PCI驱动中发现112个bug (所有驱动: 180个bug,88个补丁) D 99 100 T h e n u m b e r o f fo u n d b u g s D+I D+E 81 80 D + E+ I V IA 60 50 消融实验: 40 D: Default device; 20 E: Extra devices; 5 6 0 I: Interrupts D D+I D+E G ro u p D + E+ I 26 V IA
27 . (3)如何改进? “StateFuzz: System Call-Based State-Aware Linux Driver Fuzzing” USENIX Security 2022 变异:探索 测试例生成/选择 测试例变异 初始种子 生成器 种子 输入 测试例 能量 变异策 选择器 分配 略选择 语料库 测试例 测试例 (种子池) Fuzzing循环 测试例 测试例 测试例执行 目标程序 测试例 (反馈信息采集) 筛选 反馈 覆盖率 漏洞 正反馈? 信号 收集 检测 漏洞样本 优胜劣汰:进化 其他 https://netsec.ccert.edu.cn/chaoz 信号 27
28 .Code Coverage - Limitation 网络研究院 INSC • Example: maze game ➢ most code can be explored easily State: values of maze[y][x] 28
29 .Code Coverage - Limitation 网络研究院 INSC • Another Example: DNN testing ➢ most (Python) code can be explored easily State: output of neurons (activated or not) 29