c - 尽管设置了 rfcomm 安全性,Bluez hcidump 仍然清晰

标签 c security bluetooth bluez

检查以下情况:

  1. 我有两个 RFCOMM 程序(从属程序和主程序),它们正在使用 libbluetooth (Bluez) 并分别进行以下设置:

    opt |= RFCOMM_LM;
    opt |= RFCOMM_LM_AUTH;
    opt |= RFCOMM_LM_ENCRYPT;
    opt |= RFCOMM_LM_SECURE;
    
    opt |= RFCOMM_LM;
    opt |= RFCOMM_LM_MASTER;
    opt |= RFCOMM_LM_AUTH;
    opt |= RFCOMM_LM_ENCRYPT;
    opt |= RFCOMM_LM_SECURE;
    
  2. Hciconfig 报告两个适配器都启用了加密和身份验证:

    dev@ackbar:$ hciconfig hci0

    hci0:类型:BR/EDR 总线:USB BD 地址:01:1A:07:00:47:0C ACL MTU:310:10 SCO MTU:64:8 运行 PSCAN 身份验证加密 RX 字节:10187160 acl:66879 sco:0 事件:180556 错误:0 TX 字节:1012442 acl:57039 sco:0 命令:6787 错误:0

    dev@ackbar:$ hciconfig hci1

    hci1:类型:BR/EDR 总线:USB BD 地址:01:1A:07:00:47:0D ACL MTU:310:10 SCO MTU:64:8 运行 PSCAN 身份验证加密 RX 字节:2174821 acl:6303221 sco:0 事件:100 错误:0 TX 字节:51000 acl:54982 sco:0 命令:3458 错误:0

  3. Wireshark 和 hcidump 均报告两个适配器之间的通信采用明文形式。我希望通过加密/加扰的有效负载可以明显看出安全性,就像在 Wireshark 中查看 SSL/TLS 流量一样。

    接收:11111111 应为:348djwfoisdfg78sdfsdifods2#@$%^&*ifgyuh

根据原始模式下的 hcidump:

> . E   . . . . @ . . . . . 1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 1 . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 
  . . . . . . . . . . . . . . . . . . . . 

这引出了一个问题:

是否会在设置选项时应用 secret 性?或者内核/操作系统在解密后通过(稍后的)钩子(Hook)以明文形式发送重新组装的数据。

是否有更好的方法来验证这一点 - 显然使用工具的传统方法是不够的(而且我无法访问硬件嗅探器)? (至少使用 bt-agent 检查引脚)。

最佳答案

根据 StackOverflow 上的这个答案 ( Does Bluetooth encrypt data? ) - 我相信数据已被解密,并且 hcidump 在该操作发生后以明文形式看到它。

验证这一点的唯一方法是使用昂贵且受限的工具(或 maaaybe 软件定义的 radio ,例如 ubertooth)。

关于c - 尽管设置了 rfcomm 安全性,Bluez hcidump 仍然清晰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38209317/

相关文章:

c - 在 C 中使用 fread() 从二进制文件读取时出现奇怪的值

c - 如何在堆上创建可变长度数组?

java - request.getUserPrincipal() 为空

windows - RN-42 断开 SPP 配置文件上的连接

android - 扫描时 Beacon UUID 不同

c - 蓝Z 5.43 : D-BUS gattlib ble_scan

c - 使用 cURL 和 C API 通过 http 提取动态数据的值

c - 如何获取 C 程序本身设置的所有环境变量?

java - Spring 安全和 Tomcat

java - 迁移java8到java11 : import com. sun.security.auth.module.NTSystem