首页
社区
课程
招聘
[分享]2021看雪SDC议题回顾 | 基于模拟仿真的蓝牙协议栈漏洞挖掘
发表于: 2021-10-29 19:03 30766

[分享]2021看雪SDC议题回顾 | 基于模拟仿真的蓝牙协议栈漏洞挖掘

2021-10-29 19:03
30766

蓝牙协议栈在IoT安全中的重要性不言而喻,妥善的利用模拟技术能巨幅提高研究效率,并减少对工具、环境的依赖性。


贾舵先生的议题以NRF52平台的模拟为案例,深入浅出的介绍了如何结合虚拟仿真技术对物联网中的蓝牙固件进行全状态的模拟,实现动态执行与调试,并且进一步就模拟器在实际漏洞挖掘应用中的实践经验进行分享。


下面就让我们来回顾2021看雪第五届安全开发者峰会《基于模拟仿真的蓝牙协议栈漏洞挖掘》此议题的精彩内容。


图片


演讲嘉宾


图片


图片

【贾舵-阿里安全IoT安全专家】


贾舵:阿里IoT研究团队安全专家,专注物联网安全、汽车安全、虚拟化仿真技术的应用。



图片


图片


演讲内容


图片


以下为速记全文:


各位来宾朋友大家好,我叫贾舵,目前在阿里做IoT的安全研究,今天我跟大家分享的议题是基于模拟仿真的的蓝牙协议栈的漏洞挖掘。今天我的议题分为五个部分,首先是做一个背景的介绍,第二部分是我们模拟技术的一个实现,然后是模拟在我们漏洞挖掘中的应用,第四部分是做一个案例的展示,最后会做一个总结。


01

背景介绍


首先第一部分是我们的背景介绍,这一部分我们会介绍两个内容,一个是我们的IoT蓝牙协议栈,第二个的话是我们为什么要去做模拟。我们的智能设备目前的话是有两个明显的一个发展方向,一个是朝着我们功能化的方向,这里面典型的有我们的路由器,还有智能音箱、智能电视,以及现在比较流行的智能汽车。


另外一个方向是我们的可穿戴的方向,它逐渐是向这种小型化的一个方向发展。这里面典型的有我们无线的耳机,还有运动手环等。在这些设备里面的话,其实我们的蓝牙的应用是非常广泛的,承载我们蓝牙功能的是蓝牙协议栈,我们今天针对的是我们可穿戴方向的蓝牙协议栈,为了区分,我们称之为IoT的蓝牙协议栈。


根据它的一个应用场景的一个不同,我们 Iot的蓝牙协议栈它会区别于我们的 PC或者是操作系统,它会有一些自己的特点。


对于我们运行IOT蓝牙协议栈的一个平台,它的资源是非常有限的,体现在它的一个 CPU的资源上,还有的话是它的一个存储限制,这样要求协议栈往往是一个非常轻量化的实现。那么同时的话我们iot设备往往会要求一些实时性,那么需要一个快速的响应的能力,同时我们无线的设备往往是用移动的电池来供电,所以的话它会有一些低功耗的特性。


正是因为有这些特点的话,所以我们实际在做 IoT协议栈的应用的过程中,它往往会和我们的硬件去结合在一起,也就是我们的蓝牙SOC。我们常用的一些蓝牙SOC包括nordic的nrf52系列,还有 TI的CC系列。蓝牙协议栈其实是我们物联网中基础的一个组件之一,它的一个漏洞的话往往会影响到一个范围的设备。


图片


我们今天其实要讲的是通过模拟的方法去对它做一个漏洞挖掘方法的阐述。这里面就有一个问题,就是我们为什么要去做一个模拟?我们模拟的一个目的其实是为了解决我们物理世界的阻碍因素,建立一个我们理想的虚拟世界。


图片


当我们采用一个新的方法的时候,一定是传统的方法给我们带来一些不利的因素,实际上我们在做蓝牙的漏洞挖掘的过程中会面临一些困难,主要体现在几个方面。


首先的话是一个环境的干扰,我们周边的话其实有很多这种2.4G的设备,包括我们的耳机或者鼠标键盘,同时还有2.4G的wifi,会形成一些干扰;然后就是蓝牙自身跳频的一个影响,这会直接影响到我们对数据的一个监听。那么对于BLE蓝牙来说的话,我们可以对它的广播信道做一个非常好的监听,但是对它的数据信道的话,如果我们做一个真正的旁路监听还是比较困难的。


02

模拟技术实现


第二个部分是我们调试上的困难。我们如果想去通过硬件去建立一个完整的一个调试环境的话,还是有一定难度的,主要受限于硬件对调试的一个限制,还有就是硬件自身的一个熔断机制。第三个方面是我们工具的一个依赖性,在我们漏洞挖掘的过程中会应用到很多的工具软件和硬件,我们很多精力要去做这个软件跟硬件的稳定性的维护,这就导致我们没有办法去专注数据本身的一个操作。


另外工具的依赖性也会造成我们测试范围的受限,这个图的是我们 BLE蓝牙的一个协议结构图,我们常用的一些测试的工具,比如说nrf52 dongle和cc系列的dongle,还有一些USB蓝牙的适配器的话,他们是基于一个hci接口来控制,我们 PC端的话可以通过一些协议栈的工具去做一个访问,那么最后实现对我们应用的属性蓝牙属性的一个读和写。


那么这里面的话,因为我们这些工具其实是建立在物理层和链路层上的,链路层的逻辑其实是固化在我们的硬件工具当中的,这就导致我们没有办法对链路层去做一个测试。那第二个的话就是我们这些工具的话,一般是通过 hci接口来去访问的,hci接口本身它是一个功能性的接口,它并不是一个测试接口,所以本身也会受到一些限制。我们通过模拟的手段就是为了将我们一些复杂问题简单化,这个图的话是我们在物理环节中想对蓝牙协议栈的测试场景,这里面可能会用到一些软件无线电或者ubertooth等。


对于我们这个图的本质,其实是为了做蓝牙数据的一个交互,对于我们安全研究者来说的话,我们最希望的其实是有一个接口,通过这个接口的话做协议的一个交互,达到我们测试的过程。


实现这个过程的转换,其实就是我们需要做的模拟实现的部分,也就是我们第二个内容要讲的模拟技术。这一块的话我会讲两个内容,一个是对我们模拟对象的一个分析,第二个的话是我们模拟的设计方法。


首先刚才我们讲了几个蓝牙的SOC的平台,这里面我们会以 nrf52作为对标的模拟对象,这里面有一些参数可以看一下,在这里面我们其实最关心的还是协议栈的问题。


nrf52平台目前有两个应用比较广泛的蓝牙协议栈,一个是 softdevice,这是nordic官方的一个协议战,是有商业化的。


第二个的话是一个开源的协议栈叫Zephyr,这个也是非常活跃,由现在的一个社区去维护的。这是我们整体的一个设计思路,我们模拟器的话是基于 qemu5.1的版本,建立在 arm的架构的模拟基础之上,我们模拟的目标是基于Zephyr和SoftDevice的应用固件,当然也可以包含我们普通的基于这个平台的固件,那么具体怎么实现?


从硬件的一个角度来讲的话,我们的固件其实可以分为两个层次,一个部分是我们固件里面其实是大量的这种arm的指令,这些指令的话它会对我们的特定的一些数据做一些读写的操作,形成我们对外设的访问。


这些外设的话可能会包括比如GPIO、I2C或UART这些,我们要实现一个模拟的话,首先我们要对它的一个CPU的核心做一个模拟,qemu目前已经对Cortex-M4的一个内核做了支持,我们可以直接拿来用。


以此为基础,我们可以做一些基础硬件模拟的扩展,包括内存中断还有寄存器,但是这些还是远远不够的。


图片


在模拟实现的过程中,最重要的是我们 SOC外设的模拟,对外设模拟其实是区分我们模拟器是不是能够用在MCU上的重要指标,模拟器是针对于PC的还是针对于MCU的,很关键的就在于外设的功能,这一块也是我们后面重点会去模拟的一个对象。我们模拟的对象是一个固件,所以我们首先要对固件做一个分析,这里面还是以 SoftDevice的协议栈为例,一个使用SoftDevice作为应用的一个完整部件,它的结构是这样的,会包含两个部分,一部分是我们的应用层的代码固件,然后第二部分是协议栈本身,他们之间会通过一个svc的指令去做一个调用,SoftDEvice其实就是我们协议站实现的一个部分,它是不开源的,所以需要我们去做一个逆向分析。


通过分析,我们要确定我们模拟什么以及模拟到什么程度,首先我们要知道我们模拟什么,这里面的话其实要去知道的是它使用了哪些外设,对于硬件来说的话,特定的外设其实是映射到特定的地址上,根据这个特点的话,我们可以通过数据手册去查找他用了哪些外设,然后做一些统计。单纯知道这些的话还是不够的,那么对于我们每一个外设来讲的话,它的逻辑还是非常复杂的。


图片


对于 IoT协议栈来说,为了实现一些非常高效的一些操作,往往会跟我们的硬件做一些联动和结合。因此的话我们要对一些关键的逻辑去做一个逆向的分析,这里面是对它的一个广播的逻辑,蓝牙的广播做了一个逆向分析以后的结果,在广播的逻辑当中,它使用了三个主要的外设,分别是 RTC、Timer定时器,还有 Radio的一个功能。广播它其实是有一个广播周期的周期,一般会在60毫秒到1秒之间,这个是由RTC模块来维护的。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-11-1 13:23 被Editor编辑 ,原因:
上传的附件:
收藏
免费 6
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//