• 通过模糊测试寻找车载蓝牙的安全漏洞


    什么是车载蓝牙?

    蓝牙技术最初由电信巨头爱立信公司创制于1994年,如今已被广泛应用于手机、电脑、汽车等移动设备。车载蓝牙,特指以无线蓝牙技术为基础而设计研发的车内无线免提系统,可在车辆正常行驶时与手机连接,以便驾驶员进行免提通话,达到解放双手、降低交通肇事隐患的目的。

    车载蓝牙主要利用嵌入式芯片实现车内短距离无线连接,具有低成本、低功耗、模块体积小、易于集成等特点,但因其需要使用各种各样的芯片组、操作系统和物理设备配置,大量不同的安全编程接口和默认设置带来的复杂性使车载蓝牙存在难以避免的安全漏洞,非常容易遭受攻击。

    车载蓝牙的安全威胁主要来自蓝牙漏洞攻击、蓝牙配对窃听、DoS(Denial of Service,拒绝服务)攻击等,可能导致目标计算机或网络无法提供正常的服务或资源访问。攻击者可通过车载蓝牙盗取汽车上的访问数据,还能够获取汽车用户拨打电话信息,窃听用户通话、发送信息或利用设备提供其他服务与功能,甚至可能危及生命及财产安全。车载蓝牙安全漏洞不容忽视。

    如何定位车载蓝牙设备的漏洞

    模糊测试(Fuzz Testing)(点击链接)作为一种软件测试技术,是发现车载蓝牙设备中的漏洞和问题的有效方法。模糊测试可通过自动给予应用程序无效值,并分析结果反馈来寻找应用程序的漏洞,从而提高嵌入式系统和软件的测试效率。随着测试人员对测试工具的熟练度不断上升,模糊测试的效率也将进一步提升。

    关于模糊测试

    假设某应用程序包含一个代表名字的输入字段,测试人员通常需要考虑到此类问题:“如果向其提供超过10000个字符的超长输入,会发生什么情况?”。当前绝大部分安全专家或者黑客都会使用模糊方法进行测试,测试过程将聚焦于溢出的内存或其他的异常反应。更复杂的部分测试,会在原基础上添加一个C++格式说明符,例如”%s”来修饰原先模糊测试过程中产生的输入,从而欺骗应用程序授予内存访问权限。

    尽管部分应用程序可以很好地处理此类意外输入,但也可能会发生程序崩溃、甚至允许攻击者执行命令并控制硬件的情况,最终严重损害终端用户的利益。对于汽车等安全关键领域的系统及用户来说,这种无授权的访问和缺乏故障保护的情况是不可接受的。

    如今,几乎所有的汽车配件都支持蓝牙通信,而遍布大街小巷又价格昂贵的汽车早已吸引了各类犯罪分子的注意。在汽车行业,主动进行安全工程是一项高回报的投资,尽早发现问题所在可使供应商尽可能避免因漏洞导致的车辆召回事件,也可避免代价高昂的品牌形象损失。可解决车载蓝牙安全问题的模糊测试已在汽车工业中得到了广泛应用。

    如何进行车载蓝牙模糊测试

    关于车载蓝牙的模糊测试该如何进行,可从以下两个问题入手:

    1. 意外输入是如何产生的?

    2. 这些数据是如何发送到车载蓝牙上的?

    模糊测试工具可提供通过模糊蓝牙协议栈内容来进行模拟的解决方案,从而生成意外输入。具体指深入理解蓝牙协议栈并基于协议的规则生成模糊输入,使目标系统能在不阻塞的情况下接受这些输入,并建立与蓝牙设备的有效通信。正应毕加索名言:“像专业人士一样学习规则,这样你就可以像艺术家一样打破规则”。

    为将数据发送至车载蓝牙,首先需要分析被测系统是否同时满足接受模糊测试输入的软件需求和硬件需求。换句话说,目标车载蓝牙协议栈,也就是协议的实现实体,是否能实现设备之间的通信。协议堆栈通常分为具备独立分工的多个层级,以确保不同协议层级之间的互通性。

    获取适合模糊测试的蓝牙协议栈

    目前存在两种获得蓝牙协议栈的途径:自行制作或选用现有的蓝牙协议栈。

    自行制作可以在构建协议时就考虑到如何进行模糊测试;选用现有的蓝牙协议栈则可节省开发时间,但在实际进行模糊测试时,往往需要对蓝牙协议栈的内容进行修改,使之更适应模糊测试的需求,并确保通过协议栈发送意外输入时不会产生阻塞。

    修改用于模糊测试的蓝牙协议栈

    协议栈的目标之一是使应用程序的逻辑开发更加便捷。促进协议之间通信的框架能够使开发人员聚焦于应用程序逻辑、免受底层技术的束缚。协议栈能使开发人员访问每个协议层并实现有效检查(如大小和格式),以确保消息被正确格式化并被接收。由于模糊测试需要向目标设备发送错误消息,必须对协议栈中有效性检查的部分进行替换。

    上图是一个简单的蓝牙协议栈图示,其中RFCOMM协议层提供RS-232端口,并作为几个更高层协议(HFP、SPP、OBEX)的传输层。如果需要对RFCOMM进行模糊处理,即向测试目标发送无效参数来模糊协议的传输消息,必须把真实的RFCOMM替换掉。如何完成这一步操作呢?正如图中所示,RFCOMM消息是通过L2CAP层发送的,意味着RFCOMM是L2CAP消息的有效负载,可以通过编写自己的RFCOMM抽象实现,绕过真实的RFCOMM、直接与协议栈的L2CAP层进行通信。其他的协议层也可以使用类似方法进行模糊测试。

    *RFCOMM:Radio Frequency Communication,串行线性仿真协议

    *RS-232:Recommended Standard 232,常见的串行通信接口标准

    *HFP:Hands-free Profile,蓝牙电话协议

    *SPP:Serial Port Profile,串行端口规范

    *OBEX:Object Exchange,对象交换协议

    *L2CAP:Logical Link Control and Adaptation Protocol,逻辑链路控制和适配协议

    传统嵌入式软件模糊测试的难点主要在于软件需要连接真实硬件,而嵌入式设备的吞吐量往往不能满足模糊测试工具生成的数以万计测试数据的测试需求。天目全数字实时仿真软件SkyEye可以实现硬件系统的仿真,嵌入式软件可不加修改地运行在PC机上;SkyEye基于动态二进制翻译技术,相较于真实嵌入式设备有着更高的吞吐量,可以结合AFL-Fuzz工具等进行嵌入式软件的模糊测试。

    蓝牙技术经过多年发展,已取得了长足的进步,而车载系统正向智能化、信息化、网络化方向飞速发展,蓝牙技术在汽车领域存在广阔的发展空间。使用模糊测试来确保蓝牙技术的安全性,将使蓝牙技术更好地应用于汽车领域,也将大大优化车辆驾乘体验。

  • 相关阅读:
    linux systemctl删除失效的服务单元
    【Python学习笔记】循环
    最小堆模拟
    Postman —— HTTP请求基础组成部分
    郑州分销系统开发|电商行业能做分销系统吗?
    神经网络量化----为了部署而特别设计
    golang在goland编译时获取环境变量失效
    RabbitMQ实现数据库与ElasticSearch的数据同步和分享文件过期处理
    算法刷题Day4 两两交换链表中的节点+删除链表的倒数第N个结点+链表相交+环形链表
    智慧风电场Web组态集控中心远程监控系统
  • 原文地址:https://blog.csdn.net/digi2020/article/details/127126774