BLE蓝牙配对过程
在了解到Bluetooth协议的大概后,本篇文章简单的梳理一下BLE蓝牙的配对过程和配对过程的数据格式,对于后面理解蓝牙的集中配对模式及相关漏洞浅浅奠定一下基础。
和经典蓝牙一样,协议为处于连接状态的BLE设备,定义了两种Link Layer角色:Master和Slave。Master是连接的发起方(Initiator),可以决定和连接有关的参数(很重要,后面会详细介绍)。Slave是连接的接受方(Advertiser),可以请求连接参数,但无法决定。
在SM(Security Manager)的规范中,配对是指“Master和Slave通过协商确立用于加(解)密的key的过程”,主要由三个阶段组成:
配对是一个三阶段的过程。前两个阶段是必须的,第三阶段是可选的。
第一阶段:配对特征交换
第二阶段:短期秘钥(STK)生成
第三阶段: 传输特定秘钥分配
阶段1,称作“Pairing Feature Exchange”,用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎么的人机交互能力(IO capabilities)。
阶段2,通过SMP协议进行实际的配对操作,根据阶段1 “Feature Exchange”的结果,有两种配对方法可选:LE legacy pairing和LE Secure Connections。
阶段3是可选的,经过阶段1和阶段2之后,双方已经产生了加密key,因而可以建立加密的连接。加密连接建立后,可以互相传送一些私密的信息,例如Encryption Information、Identity Information、Identity Address Information等。
STK生成规则
Just work: 没有加密 TK=0x00
passkey entry: 密码输入如果 passkey 是 ‘019655’ TK的值就是0x00000000000000000000000000004CC7。
将输入的值作为一个6位数的十进制,转换成16字节的十六进制。
OOB: 带外的TK值是一个16字节的随机数,通过非BLE的方式传递给对端。
配对第一阶段 Pairing Feature Exchange
配对的过程总是以Pairing Request和Pairing Response的协议交互开始,通过这两个命令,配对的发起者(Initiator,总是Master)和配对的回应者(Responder,总是Slave)可以交换足够的信息,以决定在阶段2使用哪种配对方法、哪种鉴权方式、等等,具体包括:
配对方法
Master和Slave有两种可选的配对方法:LE legacy pairing和LE Secure Connections 。从命名上看,前者是过去的方法,后者是新方法。选择的依据是:
当Master和Slave都支持LE Secure Connections(新方法)的时候,则使用LE Secure Connections。否则,使用LE legacy pairing。
鉴权方式
所谓的鉴权(Authentication),就是要保证执行某一操作的双方(或者多方,这里就是配对的双方)的身份的合法性
设备在配对特征交换阶段交换人机交互能力(IO capabilities)来决定在第二阶段使用下面哪种方法:
JustWorks:只工作
PasskeyEntry:输入密码
Out Of Band(OOB):带外
这种需要人参与的鉴权方式,在蓝牙协议里面称作MITM(man-in-the-middle)authentication,不过由于BLE设备的形态千差万别,硬件配置也各不相同,有些可以输入可以显示、有些只可输入不可显示、有些只可显示不可输入、有些即可输入也可显示,因此无法使用统一的方式进行MITM鉴权(例如没有显示的设备无法使用上面例子的方式进行鉴权)。为此Security Manager定义了多种交互方法:
LE Legacy Pairing - Just Works
Just Works方式不能抵抗窃听者和中间人攻击,只有在配对过程时没有遭受攻击,后面加密的链路的数据传输才是可信的。安全级别很低。
LE Legacy Pairing - Passkey Entry
这种方式通过输入6位数字的方式来进行配对,生成STK。6位数是随机产生的在000000到999999之间的数值,这个数值相当于一个TK,比如远端显示这个数字,需要在本地端输入这个数字给本地设备与远端配对。如输入019655,那此时的临时Key–TK是:0x00000000000000000000000000004CC7。
Out of Band 带外
这种方式是通过BLE之外的,设备上的其他方式来获取这个OOB data,比如通过IR红外,或其余的方式,因此对于蓝牙窃听者/攻击者而言这个data的传输是不可见的了,因此会显得要安全些。
在“Pairing Feature Exchange”阶段,配对的双方以下面的原则选择鉴权方法:
1)如果双方都支持OOB鉴权,则选择该方式(优先级最高)。
2)否则,如果双方都支持MITM鉴权,则根据双方的IO Capabilities(并结合具体的配对方法),选择合适的鉴权方式
3)否则,使用Just work的方式(不再鉴权)。
配对请求的数据格式
1. IO capabilities表明输入,输出的能力
Security Manager抽象出来了三种MITM类型的鉴权方法,这三种方法是根据两个设备的IO能力,在“Pairing Feature Exchange”阶段自动选择的。
输入是按键、键盘,输出是显示数字用的界面。
0x00 DisplayOnly 只能是显示000000 ~ 999999的数字
0x01 DisplayYesNo 显示Yes/No 的按钮
0x02 KeyboardOnly 只能是输入000000 ~ 999999的数字
0x03 NoinputNoOutput 没有输入也没有显示,只能用Just work工作方式
0x04 KeyboardDisplay 能输入000000 ~ 999999的数字和输出
2. OOB data flag
0x00 OOB 数据没有发送
0x01 OOB 数据通过远端设备发送(如IR)
0x02-0xFF 保留
3. 身份验证请求
Bonding_Flags b1b0 Bonding Type
• 00 No Bonding
• 01 Bonding
• 10 Reserved
• 11 Reserved
MITM
MITM域设置为1为请求MITM(中间人介入)保护,否则设置为0. 设备将标志设置为1为STK请求认证的安全属性。
选择Key生成的方法
如果auth Req中MITM没有,则说明不需要人参与中间,所以IO capabilities会被忽略,只用Just Works就OK了。
如果有OOB data,auth Req将可直接忽略,会直接选择OOB的方式了。
SC
SC字段是一个1位标志,设置为1以请求LE安全连接配对,否则应根据发起方和响应方支持的功能将其设置为0,可能的结果配对机制为:如果两个设备均支持 LE安全连接,使用LE安全连接; 否则,请使用LE旧式配对。
Keypress
keypress字段是一个1位标志,仅在Passkey Entry协议中使用,而在其他协议中将被忽略。 当双方将该字段设置为1时,应使用SMP配对按键通知PDU生成并发送按键通知。
4. MaximumEncryptionKeySize
最大秘钥长度,7到16字节之间
5. InitiatorKeyDistribution
发起者的秘钥分配,该域表明秘钥初始化设备请求分配使用。
配对请求命令中的“生成”字段由主机使用,以请求发起者向响应者分发或生成哪些**。
6. ResponderKeyDistribution
响应者的秘钥分配,该字段表明秘钥初始化设备请求响应设备来分配秘钥分配使用。
eg:
参考:
https://www.freesion.com/article/7914906679/
http://www.wowotech.net/bluetooth/le_security_manager.html
https://paper.seebug.org/1633/
版权归原作者 重启艺术大师 所有, 如有侵权,请联系我们删除。