蓝牙安全入门——两道CTF题目复现

2024-06-11 02:04

本文主要是介绍蓝牙安全入门——两道CTF题目复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 蓝牙安全入门
    • 题目 low_energy_crypto
      • 获取私钥
      • 解密
    • 题目 蓝牙钥匙的春天
      • 配对过程
      • 配对方法
      • 密钥分发
      • 数据加密
      • 安全漏洞和保护
      • 实际应用
      • 实际应用

蓝牙安全入门

🚀🚀最近一直对车联网比较感兴趣,但是面试官说我有些技术栈缺失,所以还得狠狠补,先从蓝牙开始吧,因为刚好有道CTF的题目可以复现一下。

参考资料:

蓝牙CTF题目汇总 (yuque.com) 所有的文件都在大佬的网页里面,需要的可以自己去下载。

CTFtime.org / Cyber Apocalypse 2021 / Low Energy Crypto / Writeup 因为有一步有点问题,所以后面按照这个大佬的步骤来的。

题目 low_energy_crypto

🚀🚀首先题目打开是这样子的(如果显示不全,那就是版本问题,我终于换掉了我老掉牙的wireshark :happy:):

在这里插入图片描述

获取私钥

🚀🚀我们很容易就能看到有些Tx和Rx数据,而且看到了UART,这个主要是用来通信和传递数据的,所以我们就打开看一眼传输的内容:

在这里插入图片描述

🚀🚀我们能看到类似于公钥的东西,我们先提取出来,这里是有两部分:

-----BEGIN PUBLIC KEY-----
MGowDQYJKoZIhvcNAQEBBQADWQAwVgJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0m
B9fjj4tlGkPOW+f8JGzgYJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li
4l+RI2g0FqJvf3ff
-----END PUBLIC KEY-----

🚀🚀这个地方可以使用RsaCtfTool.py来解密,但是我没成功,运行的时候有问题,就想着换一种办法,如下所示,我们先恢复私钥:

openssl rsa -in ../pub.key -text -inform PEM -pubin# Public-Key: (512 bit)
# Modulus:
#     00:a2:8f:1f:19:e6:91:65:42:e1:f8:de:ec:a3:1b:
#     59:97:f4:ef:34:75:d0:3d:26:07:d7:e3:8f:8b:65:
#     1a:43:ce:5b:e7:fc:24:6c:e0:60:94:56:6e:87:a4:
#     72:76:5f:89:0a:cb:46:10:37:44:49:f5:95:42:a4:
#     44:09:d4:a8:09
# Exponent:
#     00:cb:ff:72:e2:e2:5f:91:23:68:34:16:a2:6f:7f:
#     77:df
# writing RSA key
# -----BEGIN PUBLIC KEY-----
# MGowDQYJKoZIhvcNAQEBBQADWQAwVgJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0m
# B9fjj4tlGkPOW+f8JGzgYJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li
# 4l+RI2g0FqJvf3ff
# -----END PUBLIC KEY-----

🚀🚀输出如上所示,然后我们把十六进制转为十进制,使用的脚本如下所示:

hex_string = """
00:a2:8f:1f:19:e6:91:65:42:e1:f8:de:ec:a3:1b:
59:97:f4:ef:34:75:d0:3d:26:07:d7:e3:8f:8b:65:
1a:43:ce:5b:e7:fc:24:6c:e0:60:94:56:6e:87:a4:
72:76:5f:89:0a:cb:46:10:37:44:49:f5:95:42:a4:
44:09:d4:a8:09
"""# 移除换行符和冒号
hex_string_clean = hex_string.replace("\n", "").replace(":", "")# 将整个十六进制字符串转换为整数
int_value = int(hex_string_clean, 16)# 打印结果
print(f"Hex: {hex_string_clean} -> Int: {int_value}")

🚀🚀然后我们就得到了n和e,使用在线网站(http://factordb.com/index.php)来获得q,p,结果如下所示:

p = 92270847179792937622745249326651258492889546364106258880217519938223418249279q = 92270847179792937622745249326651258492889546364106258880217519938223418258871e = 271159649013582993327688821275872950239

🚀🚀然后下载这个py文件(rsatool/rsatool.py at master · ius/rsatool (github.com)),使用如下命令,可能会缺少库,自己安装一下就好了:

python rsatool.py -p 92270847179792937622745249326651258492889546364106258880217519938223418249279 -q 92270847179792937622745249326651258492889546364106258880217519938223418258871 -e 271159649013582993327688821275872950239 -o priv.key

🚀🚀结果如下所示,我们就获得了私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIBRwIBAAJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0mB9fjj4tlGkPOW+f8JGzg
YJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li4l+RI2g0FqJvf3ffAkBY
f1ugn3b6H1bdtLy+J6LCgPH+K1E0clPrprjPjFO1pPUkxafxs8OysMDdT5VBx7dZ
RSLx7cCfTVWRTKSjwYKPAiEAy/9y4uJfkSNoNBaib393y3GZu+QkufE43A3BMLPC
ED8CIQDL/3Li4l+RI2g0FqJvf3fLcZm75CS58TjcDcEws8I1twIgJXpkF+inPgZE
TjVKdec6UGg75ZwW3WTPEoVANux3DscCIDjx+RSYECVaraeGG2O/v8iKe6dn1GpM
VGUuaKecISArAiA0QRYkZFB5D4BnOxGkMX3ihjn7NFPQ7+Jk/abWRRq6+w==
-----END RSA PRIVATE KEY-----

解密

🚀🚀之后解密一下传输的加密内容就好了,加密内容如下所示:

在这里插入图片描述

🚀🚀提取出来把后面多余的0删除,便可以解密了,使用命令如下所示:

openssl rsautl -decrypt -raw -inkey priv.key -in flag

🚀🚀结果如下所示:

The command rsautl was deprecated in version 3.0. Use 'pkeyutl' instead.
�5������p+wɹ�[R�.;����^�bs� �6yflag{5cf7b-9f8f1e-688-9f80f}

🚀🚀最后我们就拿到了我们的flag{5cf7b-9f8f1e-688-9f80f}

题目 蓝牙钥匙的春天

🚀🚀这个比较简单,所以只是介绍一下SMP协议:

🚀🚀蓝牙中的安全管理协议(Security Manager Protocol,SMP)是负责蓝牙设备间的配对和加密的协议。SMP在蓝牙低功耗(Bluetooth Low Energy, BLE)和经典蓝牙(Bluetooth Classic)中有所不同,但它们的主要功能是相似的。下面是对蓝牙低功耗中的SMP协议的详细介绍:

配对过程

🚀🚀SMP的主要功能之一是处理设备间的配对过程。配对过程的主要目的是建立一个安全的连接,确保数据传输的机密性和完整性。配对过程通常包括以下步骤:

  • 配对特征交换:设备交换配对请求和响应,以决定使用的安全功能和认证方法。
  • 生成和交换临时密钥(Temporary Key, TK):设备生成一个临时密钥,用于保护接下来的密钥交换过程。
  • 生成和交换短期密钥(Short Term Key, STK):使用临时密钥生成短期密钥,短期密钥用于初次加密连接。
  • 生成和交换长期密钥(Long Term Key, LTK):生成长期密钥,用于加密以后的连接。

配对方法

🚀🚀SMP支持多种配对方法,每种方法提供不同级别的安全性:

  • Just Works:无需用户输入,用于低安全需求的场景。
  • Passkey Entry:一方输入另一方显示的6位数密码,用于中等安全需求。
  • Numeric Comparison:双方显示一个6位数并进行比较,用于高安全需求。
  • Out of Band (OOB):使用蓝牙之外的通信渠道(如NFC)交换配对信息,用于最高安全需求。

密钥分发

🚀🚀在配对过程中,设备之间会分发各种密钥,用于加密和身份验证:

  • 长期密钥(LTK):用于加密数据。
  • 连接签名密钥(CSRK):用于数据签名,确保数据完整性。
  • 身份信息(IRK):用于设备身份验证和隐私保护。

数据加密

🚀🚀配对完成后,SMP使用生成的密钥对数据进行加密。蓝牙低功耗使用AES-CCM(Counter with CBC-MAC)算法进行加密,确保数据的机密性和完整性。

安全漏洞和保护

🚀🚀虽然SMP提供了强大的安全功能,但它也可能受到各种攻击,如中间人攻击(MITM)和旁路攻击。为了提高安全性,建议:

  • 使用高安全级别的配对方法。
  • 经常更新设备固件以修补已知的安全漏洞。
  • 在设计蓝牙应用时考虑使用额外的加密和认证机制。

实际应用

🚀🚀SMP广泛应用于需要安全数据传输的蓝牙设备,如智能手表、健身追踪器、无线耳机和医疗设备。通过确保设备间的安全配对和数据加密,SMP在保护用户隐私和数据安全方面起到了重要作用。

  • 使用高安全级别的配对方法。
  • 经常更新设备固件以修补已知的安全漏洞。
  • 在设计蓝牙应用时考虑使用额外的加密和认证机制。

实际应用

🚀🚀SMP广泛应用于需要安全数据传输的蓝牙设备,如智能手表、健身追踪器、无线耳机和医疗设备。通过确保设备间的安全配对和数据加密,SMP在保护用户隐私和数据安全方面起到了重要作用。

这篇关于蓝牙安全入门——两道CTF题目复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049898

相关文章

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

蓝牙ble数传芯片推荐,TD5327A芯片蓝牙5.1—拓达半导体

蓝牙数传芯片TD5327A芯片是一款支持蓝牙BLE的纯数传芯片,蓝牙5.1版本。芯片的亮点在于性能强,除了支持APP端直接对芯片做设置与查询操作,包括直接操作蓝牙芯片自身的IO与PWM口以外,还支持RTC日历功能,可以做各类定时类操作,极大丰富了蓝牙在IOT产品中的应用。此外,在数传应用方面,此芯片支持串口流控功能,提大提高了数据传输的稳定与可靠性。 拓达蓝牙芯片特点: 支持RTC日历功能,超