阿里DNS:用LibFuzzer照亮DNS代码的死角

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析DNS,个人版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【阿里DNS团队】在很久之前就已经认识到恶意报文防御在整个DNS系统安全稳定保障工作中的重要性,也花了非常大的精力在这个方面做了很多的研究和实践,今天我们就简要介绍一下我们在DNS代码白盒Fuzzing测试方面的一些工作,以供跟大家交流和学习。

1 引言

2018年11月初,国内某云解析服务提供商出现大规模服务不可用故障,在业界引起了不小的震动,以下是官方的故障复盘公告:

cc767bdc04c1e1ad5c2533e422bdce8c3a1e6bdf

技术复盘中很明确地说明了此次故障的起因:大量恶意请求报文攻击触发了软件的bug或漏洞,导致解析服务不可用。

作为域名解析保有量亚洲第一、全球第二的权威域名托管服务商,【阿里DNS团队】打造的阿里云云解析产品和服务(https://help.aliyun.com/product/29697.html),一直致力于通过技术的力量让整个解析服务更加稳定、更加安全和更加快速,在用户服务体验上持续改进。

【阿里DNS团队】在很久之前就已经认识到恶意报文防御在整个DNS系统安全稳定保障工作中的重要性,也花了非常大的精力在这个方面做了很多的研究和实践,下面就简要介绍一下我们在DNS代码白盒Fuzzing测试方面的一些工作。

2 技术方案选型

恶意报文攻击的核心在于攻击者利用了软件处理数据报文的漏洞或者bug,导致软件执行异常或者异常退出,进而导致服务不可用。恶意报文攻击防御要解决的核心问题是尽可能早和尽可能全的发现软件中存在的漏洞,因此需要系统的方法和工具来解决这个问题。

而软件漏洞挖掘属于软件安全或者代码安全的范畴,而阿里巴巴集团安全团队的同学在软件漏洞挖掘领域有非常成熟的可工程落地的经验,因此我们可以利用这些已有的工具和方法帮助我们高效地挖掘DNS软件的漏洞。经过分析和比对,我们最终选定的方案是通过Libfuzzer对DNS软件进行白盒Fuzzing测试。

那么我们为什么使用LibFuzzer呢?

LibFuzzer是一种支持持续执行,基于代码覆盖率的引导式模糊测试引擎。LibFuzzer与被测试的代码链接,然后通过特定的模糊入口(也称为“目标函数”)将模糊输入的样例集提供给LibFuzzer。模糊器跟踪代码会执行到哪些代码块并且收集程序崩溃,内存溢出,内存泄漏等错误,同时对输入数据根据代码覆盖率产生突变,以便最大化覆盖代码达到模糊测试的目的。LibFuzzer的代码覆盖信息由LLVM的SanitizerCoverage指令执行提供。

LibFuzzer相比其他模糊测试平台有如下几个优势:

  • 基于代码覆盖率的引导式模糊测试引擎,相比其他黑盒模糊测试平台如peach,codenomicon等商用工具,其成本低廉,并且代码路径覆盖更加自主可控。
  • LibFuzzer在对网络协议进行模糊测试时不会解析完成后退出,并且LibFuzzer的输入为一串指定长度的字节序列,模糊测试改造更简单,更适合网络协议白盒fuzz测试的场景。
  • 原有单元测试用例改造简单高效,可以按照统一框架生成新的单元测试,提高原有测试资产质量和问题发现概率。
  • 基于地址消毒剂技术进行内存监控,能过发现传统测试方法很难检测到的深层次内存溢出和少量内存泄露问题。

3 实战案例

数组越界异常是一种非常不好发现的运行时异常,代码编译阶段是不容易被发现的,一般隐藏的也比较深,bug重现的触发条件一般也比较严格,测试输入构造起来难度相对比较大,是一种典型的恶意报文攻击的目标。那么我们事先在DNS解析代码里面构造了几处数组越界的漏洞,看看通过LibFuzzer大神是否能够帮我们快速发现它们的藏身之处。

3.1 环境准备

源码编译LibFuzzer很是麻烦,幸运的是Clang在6.0版本之后已经天然集成了LibFuzzer,这样就只需下载新版本的Clang即可。如果觉得Clang源码安装也很麻烦可以直接选择编译好的release版本。Clang下载链接http://releases.llvm.org/download.html

3.2 接口改造

环境配置完毕之后开始进行模糊测试改造,被改造的目标函数要遵循一下几个要求:

  • 被测代码必须能接受任意输入(大,小,非法)。
  • 被测代码不能有执行exit()的分支
  • 如果使用多线程,多线程要在被测函数退出时join。
  • 被测代码不应该修改任何全局状态。
  • 被测代码的执行速度要尽可能的快,避免高复杂度的运算,记日志等。

我们选择了DNS报文的入口函数,即解析DNS报文的接口进行模糊改造,改造代码如下:

f886a27b3723b6cdbed3a7c77254634038f05652


由于被测程序基于DPDK开发,为了提升模糊测试的效果,需要将DPDK也进行改造。DPDK原生支持Clang编译,需修改dpdk/mk/toolchain/clang/rte.vars.mk

edaaa5421957190fc09bfe6e0fc4c22bcb406876

执行dpdk-setup.sh

d9189b7b0a370e69e0a028502cde41b207d32e88


选择12使用Clang编译DPDK。由于解析DNS报文的接口在业务流程上属于偏上层的接口,对其他代码有依赖,为了单独测试这一个接口,需要把其他依赖代码编译成静态库供LibFuzzer调用。

准备工作都完成之后可以编译fuzz taget了。

c06b1bc80e8ad1e87654082969f4461c13e5f1cb


3.3 开始测试

准备工作都就绪,现在可以测试了。

首先不指定语料库直接执行编译获得的可执行程序:

59e3a570d6924fc7e47901db248e805762102ef7

运行了一会儿就发现了一处越界错误:

a02f89cf900b5bec97e3c5395347b45d4a850095
5f7d4c5f9c17fe3db3007c822b38619124f08dd4

3.4 分析异常

发现问题,解决问题,我们再来看代码,问题出现在函数adns_dname_wire_check,该函数的作用是检查DNS query name和合法性,并且把query name都转成小写(DNS协议不区分大小写),其中问题出现在这么一段代码中:

74cffc703097537d23b6eabe7f50a829e63ff822


因为DNS协议规定一个域名wire format的最大长度为255字节,因此lower_name是一个长度为255字节的数组,用来存转小写后的query name,在给lower_name数组循环赋值的时候没有判断wire_len是否已经越界,如果遇到超长非法域名则lower_name数组会写越界。lower_name是一个局部数组,写越界就会写坏后面的栈空间,是一个高危风险。

3.5 测试结论

可见,LibFuzzer非常快速地帮我们发现了我们事先构建的数组越界异常,让我们在代码发布前就可以及早发现代码异常。

为了提高模糊测试效率,也可以指定语料库运行fuzz测试。语料库可以使用CZNIC收集的DNS报文的集合,https://github.com/CZ-NIC/dns-fuzzing。

执行方法:

a57ccc91526b51fe76960822d0043034504bceb5


针对DNS报文解析接口的fuzz测试最终发现了全部的数组越界异常。限于篇幅原因,本文不逐一分析。

4 写在最后

(1) DNS稳定性大于天

DNS作为网络基础服务,又是一种相对陈旧的网络协议,很容易受到黑客攻击,这几年针对DNS的攻击层出不穷,而一旦DNS出现了问题,影响波及范围广,影响力大,因此DNS是我们必须坚守的阵地。打铁还需自身强,在和攻击者的博弈中,需要对开发运维各个环节多维度收敛问题,尽力将风险降到最低。

(2) 不积跬步,无以致千里

Fuzz测试就是一个很好的从软件本身出发,查漏补缺的入口。虽然结合代码的白盒模糊测试虽然效果很好,但是需要按照接口函数逐个改造测试,工程量巨大,整个测试体系的建立是一个慢工出细活的过程,需要慢慢积累。

【阿里DNS团队】始终将软件可靠性放在第一位考虑,持续在软件可靠性上进行资源投入,通过黑盒+白盒结合的方式,以更高性价比的方式持续挖掘漏洞。

5 参考资料

http://llvm.org/docs/LibFuzzer.html


相关文章
|
7天前
|
存储 弹性计算 大数据
阿里云服务器怎么样?云服务器ECS功能、租用费用全解析
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可按需选择计算架构、存储类型,享受灵活的网络控制、自动化数据备份和低成本计算资源。适用于Web应用、在线游戏、大数据分析和深度学习等场景。阿里云提供免费试用和优惠价格,服务众多知名企业,如新浪微博。
|
7天前
|
存储 弹性计算 大数据
阿里云服务器怎么样?全访问解析云服务器ECS功能、租用、优缺点及使用说明
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可根据业务需求选择实例、存储类型和网络配置。阿里云服务器适用于Web应用、游戏、大数据和深度学习等场景,提供免费试用和不同优惠套餐。众多知名企业如新浪微博等信赖阿里云服务。更多信息可访问阿里云官方网站。
|
7天前
|
存储 弹性计算 应用服务中间件
阿里云经济型e与通用算力型u1实例长效特价云服务器解析,性能与性价比的完美平衡
阿里云目前有两款深受个人和普通企业用户喜欢的特价云服务器,ECS 经济型e实例2核2G,3M固定带宽,40G ESSD Entry云盘,仅需99元1年。ECS u1实例2核4G,5M固定带宽,80G ESSD Entry盘,仅需199元1年。新老同享,活动期间新购、续费同价。很多用户关心这两款云服务器性能怎么样?本文将对阿里云2024年推出的特价云服务器进行深度解析,从性能、价格、适用场景等多个维度进行详细探讨,以供选择参考。
阿里云经济型e与通用算力型u1实例长效特价云服务器解析,性能与性价比的完美平衡
|
15天前
|
Oracle NoSQL 固态存储
阿里云服务器ESSD Entry云盘与ESSD云盘选择指南:性能与场景解析
在我们选择阿里云服务器的时候,有部分云服务器同时支持ESSD Entry云盘和ESSD云盘,选择不同的云盘,价格也有所差异,有的用户还不清楚他们之间的区别,因此不知道选择哪种更好更能满足自己场景的需求,本文为大家介绍一下阿里云服务器ESSD Entry云盘和ESSD云盘的区别及选择参考。
阿里云服务器ESSD Entry云盘与ESSD云盘选择指南:性能与场景解析
|
7天前
|
存储 分布式计算 DataWorks
MaxCompute产品使用合集之如何在代码中解析File类型的文件内容
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
34 11
|
26天前
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
26天前
|
存储 数据库 数据可视化
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
|
1月前
|
存储 弹性计算 安全
阿里云服务器怎么样?云服务器ECS产品优势、应用场景、价格解析及常见问题参考
阿里云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。把物理服务器比作买的房子,云服务器ECS,就是租赁的房子,阿里云云服务商就是管家。云服务商负责搭建机房、提供配套服务和维护,用户只需要付租金,即可“拎包入住”,无需自建机房、采购和配置硬件设施。如果不再需要云服务器,可随时“退租”(释放资源),节省成本。本文为大家解析云服务器ECS产品优势、应用场景和最新价格及常见问题。
阿里云服务器怎么样?云服务器ECS产品优势、应用场景、价格解析及常见问题参考
|
16天前
|
存储 数据挖掘 OLAP
阿里云 EMR Serverless StarRocks OLAP 数据分析场景解析
阿里云 E-MapReduce Serverless StarRocks 版是阿里云提供的 Serverless StarRocks 全托管服务,提供高性能、全场景、极速统一的数据分析体验,具备开箱即用、弹性扩展、监控管理、慢 SQL 诊断分析等全生命周期能力。内核 100% 兼容 StarRocks,性能比传统 OLAP 引擎提升 3-5 倍,助力企业高效构建大数据应用。本篇文章对阿里云EMR Serverless StarRocks OLAP 数据分析场景进行解析、存算分离架构升级以及 Trino 兼容,无缝替换介绍。
18968 1
|
21天前
|
存储 数据管理 数据库
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
39 2

相关产品

  • 云解析DNS
  • 推荐镜像

    更多