演讲嘉宾 | 张 超

回顾整理 | 廖 涛

排版校对 | 李萍萍

嘉宾简介

张超,博士,清华大学网络研究院副院长,长聘副教授,华为冠名教授,蓝莲花战队教练,CCF杰出会员。曾获得清华大学学术新人奖、国家级青年人才、MIT TR35 China、求是杰出青年学者、中国科协青托等奖励和荣誉。兼任中国青年科技工作者协会理事、中国指挥与控制学会理事、中国人工智能学会人工智能与安全专委会常务委员、中国计算机学会218Club执行委员等。主要研究软件和系统安全,尤其是智能漏洞攻防方向。主持承担国家重点研发计划等20多个项目。研究成果获得腾讯安全探索论坛突破奖、微软BlueHat防御竞赛特别提名奖、华为优秀合作奖,研发的自动攻防系统获得美国国防部DARPA CGC机器自动攻防竞赛初赛防御第一、决赛攻击第二。

内容来源

第一届开放原子开源基金会OpenHarmony技术峰会——安全及机密计算分论坛

漏洞的存在给用户带来了严峻的安全风险。漏洞层出不穷,一个小小的安全漏洞却足以搅动整个软件或互联网产业发生地震。目前,漏洞从被初始发现到被预警和治理仍存在较大空档期,该空档期为黑客攻击提供了便利条件。系统软件漏洞挖掘是保障网络安全的重要一环,目前有哪些挑战和应对方案呢?清华大学长聘副教授、博导,蓝莲花战队教练张超在第一届OpenHarmony技术峰会上分享了精彩观点。

01

网络安全与漏洞挖掘

漏洞是网络空间重要安全威胁,攻击者可以利用漏洞来执行各种攻击,例如拒绝服务攻击、远程执行代码攻击、身份验证绕过攻击等。比较著名的由漏洞造成的网络安全攻击事件有震网病毒 (伊朗核设施)、电网断电(乌克兰)、WannaCry (香菇勒索软件,150+国家)、MIRAI 僵尸网络、幽灵、熔断(CPU)等。

漏洞挖掘技术的发展历史可以分为4个阶段:(1)人工审计:通过人工进行源代码审计、逆向工程,基于经验规则来挖掘漏洞,但是依赖经验且无法扩展;(2)规则扫描:通过静态分析、符号执行和模型检验等手段,依据定制规则扫描漏洞,误报概率高且可扩展性差;(3)动态测试:从攻击者的角度出发,通过随机畸形测试例,模拟攻击者构造输入等手段触发漏洞,漏报概率高且覆盖率低;(4)智能挖掘:通过知识与数据驱动、遗传进化算法等手段,智能引导漏洞挖掘方向,能够更好地应对层出不穷的新型漏洞以及大型复杂软件系统的应用场景,并且可以减少人力的投入以及由于人工主观性、分析不完备带来的误报和漏报。

02

智能模糊测试方案

模糊测试作为一种自动化动态测试方法,向系统注入非法、畸形或非预期的输入,以揭示软件缺陷和漏洞。模糊测试是当前漏洞挖掘的主要技术,有助于发现系统中的未知漏洞和弱点,防止潜在的零日攻击。然而,仅靠模糊测试无法全面了解整个安全威胁或bug,且在漏洞隐藏较深的场景下模糊测试的效果并不好。

模糊测试过程可以看做一种搜索问题,目标是在无穷的测试例空间中寻找符合条件的测试例(即能够触发漏洞的输入),可以使用优化算法来提升效率。其中,遗传算法是一种基于生物进化原理的优化算法,模拟了自然界中的遗传、变异、适应和选择等过程,通过不断地迭代和优化,寻找最优解或次优解。将遗传算法与模糊测试结合的智能模糊测试方案,通过测试例筛选、进化,在漏洞挖掘上取得了很好的效果,也吸引了许多领域内的专家学者进行相关研究。

在智能模糊测试的研究上,张超教授所在团队从知识驱动、数据驱动以及混合技术三个维度进行改进设计,具体如下:

2.1►►

知识驱动

模糊测试搜索测试例时存在较大随机性,例如通过随机的方式对测试例进行变异,导致搜索过程具有一定的盲目性。基于专家知识进行驱动,可以引导模糊测试往特定的方向搜索,可以有效提升测试过程的代码覆盖率,获得更好的漏洞检测效果。其中,专家知识包含控制流知识、数据流知识、测试接口知识、硬件外设知识、程序状态知识以及漏洞知识等。

  • 控制流敏感的模糊测试方法:CollAFL及CollAFL-bin。现有模糊测试方案代码覆盖率跟踪存在哈希碰撞问题,导致覆盖率(控制流信息)记录不准确;现有的种子选择方案没有充分考虑覆盖率(控制流信息),导致测试过程中覆盖率提升缓慢。该方法的主要策略为:基于控制流知识更新哈希公式和选择种子进行变异,优先选择未覆盖分支数最多的种子。

  • 数据流敏感的模糊测试方法:GreyOne。传统模糊测试关注覆盖率(控制流),忽略了程序的数据流约束(如校验和、幻数等检查)。该方法的主要策略为:提取程序数据流知识(污点关系、分支约束匹配度),指导模糊测试变异、进化方向。

  • 测试接口敏感的模糊测试方法:FANS。Android系统服务通过IPC机制(binder)为用户提供服务,测试接口以及接口间依赖关系十分复杂,盲目fuzzing测试效率低。该方法的主要策略为:通过静态分析Android源代码AST,提取/推断各服务的接口及接口间的依赖关系,指导测试例生成。

  • 外设自动模拟的驱动模糊测试方法:PrIntFuzz。驱动程序代码量大、漏洞多,但是驱动的执行依赖于外设交互。实际测试环境下,缺少大量的外设。能不能自动模拟大量的外设(恶意外设),与驱动进行交互并测试?该方法的主要策略为:从驱动代码中提取外设知识(数据约束、I/O模型、配置约定),基于提取的知识自动模拟外设。

  • 状态敏感的模糊测试方法:StateFuzz。覆盖率引导的模糊测试是主流方案,但是覆盖率进化指标存在局限性,可以考虑其他进化指标。其中,程序是个状态机,其状态可以作为重要的进化指标。该方法的主要策略为:从驱动代码识别动作,进而识别共享变量/状态,追踪状态覆盖率,引导测试。

  • 时序堆内存漏洞的模糊测试方法:HTFuzz。时序堆内存漏洞(如UAF)依赖于特定内存操作序列,传统的fuzzing技术并未跟踪内存操作序列,无法有效挖掘该类型漏洞。如何高效追踪内存操作序列、分析堆对象别名、引导测试方向?该方法的主要策略为:在内存访问点,记录当前trace中最后N个对操作序列哈希值(类似在每个基本块处记录边覆盖率),以此为反馈信号,引导模糊测试过程更高效触发时序堆漏洞。

2.2►►

数据驱动

  • 基于历史表现的智能变异调度方法:MOpt。变异算法(算子)众多,不同算子对于不同的种子效率各不相同,如何选择最优变异算子?该方法的主要策略为:基于各变异算子的历史表现,评估各算子的最佳选择概率,采用粒子群优化PSO算法寻找动态最优解。

  • 基于输入格式智能逆向的模糊测试方法:AIFORE。如何识别程序的输入格式,指导fuzzers生成符合程序预期的测试例,更好地测试目标程序?该方法的主要策略为:每个字段有相应的处理代码,字段边界/类型与代码片段强相关,通过构建人工智能模型对代码片段的功能进行分类,来识别字段类型,从而识别输入格式,进而指导模糊测试。

2.3►►

混合技术

除了模糊测试技术之外,还有一些传统的漏洞挖掘技术,其中一些技术可以与符号执行技术进行融合,这种混合技术也具有较好的漏洞挖掘效果。

  • 基于堆溢出漏洞建模的漏洞挖掘方案:HOTracer。模糊测试方案主要关注程序路径覆盖率,难以满足单条路径中数据约束,忽略值空间覆盖率。该方法的主要策略为:在模糊测试得到的程序路径上,分析其可能的堆溢出漏洞,利用符号执行求解。

  • 基于污点分析的物联网漏洞挖掘方案:SaTC。物联网设备通常包括Web前端(管理功能)和二进制后端(系统执行),传统fuzzing难以有效测试。该方法的主要策略为:前端与后端通常共享某些关键字符串(比如输入字段名字),可以作为污点分析的source点,进而跟踪其是否到达潜在的危险操作(sink点)来识别潜在漏洞。

03

漏洞挖掘技术发展与展望

智能模糊测试是当前最有效的漏洞挖掘方案,基于遗传算法的灰盒模糊测试在实践中取得了极大成功。除了在知识驱动、数据驱动以及混合技术辅助三个角度进行模糊测试改进,未来在广度目标支持、测试效率优化、遗传进化方向以及漏洞捕获能力等维度仍有很大的提升空间。

期待更多人关注网络安全领域相关技术发展,也欢迎感兴趣的伙伴共同加入到漏洞挖掘技术的研究中来。

获取演讲PPT:https://docs.qq.com/pdf/DQkZ6Ym5rYkpyaXRa

声明:本文来自OpenHarmony TSC,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。