蓝牙(bluetooth)攻击与防护(四)

      观察上一节内容中简单的攻击手段其中的截图和代码,问题发生在(2)建立L2CAP层的链接处,考虑蓝牙链路的建立可以视作是标准的“三次握手”,我们发现它是发送大量伪造的连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存。

      有鉴于此,我思考了一下:

1.每一蓝牙设备都有一个全球唯一的遵循IEEE802标准的48位地址,人们常用蓝牙设备地址来标识蓝牙设备。由于蓝牙设备地址的唯一性,如果一个特定的蓝牙设备属于一个特定的人,那么这个人的习性和活动就会和该设备地址有很高的关联性。而蓝牙设备地址又是公开的,人们可以通过人机接(ManMachineInterface,MMI)的交互取得,也可以通过蓝牙的查询规则自动获得。当蓝牙设备和另一个蓝牙设备进行通信时,人们很容易发现这个蓝牙设备地址。如果跟踪和监视这个设备地址,比如在什么时间什么地方出现,就会使该设备的所有者的隐私权处于易受攻击的地位。

那么可以考虑用周期性地改变蓝牙设备地址来抵制跟踪问题,但是蓝牙设备地址又不能随便更改,要保持蓝牙地址的唯一性,至少应该是局部唯一性,这样可以防止在一个散射网或匹克网里出现两个地址相同的蓝牙设备导致混乱。可以指定一些机构专门从事蓝牙地址的管理工作,就象管理因特网的域名一样。需要更改蓝牙地址的用户到指定机构处申请,管理机构从可用的蓝牙设备地址库中随机选出个一蓝牙设备地址分配给申请者,同时收回申请者的原蓝牙设备地址。为了充分利用蓝牙设备地址可以把收回的蓝牙设备地址放入可用蓝牙地址库以备下一次利用。

但显然这是十分耗费精力的措施,而且蓝牙的普及程度还十分低,恐怕没有厂商或者别的组织会干这现在看来尚不明朗的且没有利益的事,但是更改蓝牙设备地址也会给鉴权和加密带来影响,因为鉴权和加密都是基于蓝牙设备地址。蓝牙是对设备鉴权而不是对用户鉴权,更改了蓝牙地址就等于换了一台新设备,以前与其他蓝牙设备确立的关系已不存在,因此完全没有必要。同时想到了物理地址的软改写是非常容易的,而蓝牙传输采用时分双工通信,在硬件设计和软件设计过程中蓝牙时钟是可知的,完全可以根据时钟按照特定个整数时隙软改写地址以提高对此类攻击方法的安全性。

2.设想过纯粹增加内存的方法,无异于饮鸩止渴。

3.根据蓝牙协议栈的层次以及蓝牙耳机语音传输建立的过程,考虑在HCI层做防护:(1)蓝牙HCI提供了一个调用和访问基带控制器和链路控制器以及硬件状态和控制寄存器的命令接口。这一接口提供了一个访问蓝牙基带功能的统一方法。HCI由两部分组成,实现命令接口的软件和用来连接蓝牙子系统和主机的物理硬件。HCI软件的目的是使构成接口的硬件对系统高层软件来说是屏蔽的。通过HCI可以方便地实现设备与蓝牙模块接口,从而无需深入研究复杂的蓝牙协议细节就可以利用蓝牙无线连接技术。HCI固件位于主机控制器。HCI固件通过对基带命令、链接管理器命令、硬件状态注册器、控制注册器和事件注册器的访问,实现蓝牙硬件HCI指令。主机控制器意味着具有主机控制接口功能的蓝牙器件。HCI驱动位于主机。若某事件发生,用HCI事件通知主机,而主机将收到HCI事件的异步通知。当主机发现有事件发生时,它将分析收到的事件包并决定何种事件发生。主机意味着具有主机控制器接口功能的软件部件。可以在HCI指令分组和HCI时间分组的缺省参数中加入特定的生成进制数以区别。(2)考虑蓝牙链路的建立可以视作是标准的“三次握手”,那么我们考虑到SYN cookie防火墙的原理也是切实可行的:

      1. L2CAP_req----------- - - - - - - - - - -> 

  2. <------------L2CAP_connection_res 

  3. ACK----------- - - - - - - - - - -> 

  4. - - - - - - - L2CAP_req ---------------> 

  5. <- - - - - - - - - ------------ L2CAP_connection_res

  6. - - - - - - -ACK---------------> 

  7. -----------> relay the -------> 

  <----------- connection <------- 

  1: L2CAP_req从AG发送到HS;

      2:防火墙在这里扮演了HS的角色来回应L2CAP_connection_res给AG;

  3:C发送ACK包,接着防火墙和AG的连接就建立了;

  4:防火墙这个时候扮演AG的角色发送一个L2CAP_req给HS;

  5:HS返回L2CAP_connection_res给防火墙; 

  6:防火墙扮演AG发送一个ACK确认包给HS,这个时候防火墙和HS的连接也就建立了; 

  7:防火墙转发AG和HS间的数据; 

      如果系统遭受攻击,那么第三步就不会有,而且无论在防火墙还是HS都不会收到相应在第一步的L2CAP_req,所以我们就击退了这次攻击。

     关于蓝牙攻击与防护的内容在这里暂时告一段落。

 

 

你可能感兴趣的:(c,工作,加密,防火墙,服务器,活动)