前言
这是关于我攻击蓝牙的冒险故事。如果你想直接从BTLE攻击开始,请随意自由地跳到第二部分(技术部分),否则请继续按顺序阅读,共同分享我的BT探索发现之旅。
注意:当我提到BT时,我的意思也是BTLE,这些大家都已经得出了结论,除了名称和频率范围外,它与good-old-BT没有任何关系,但是在本文中我们将BTLE作为我们BT攻击向量的一部分。
Freebuf科普:iBeacon
iBeacon是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad上运行一资讯告知服务器,或者由服务器向顾客发送折扣券及进店积分。此外,还可以在家电发生故障或停止工作时使用iBeacon向应用软件发送资讯。
工具准备
对我来说,通常在接触一个新目标时,首先要做的就是寻找相关资源,这次我开始看 BT栈 本身—包括在Linux和安卓平台上的,因为很显然他们在不同平台上是不一样的。谷歌将出自 BlueZ (默认的Linux上的BT栈)的安卓BT栈转变成了他们自己的名为 BlueDroid 的BT栈,显然使得我所有的Linux BT工具和资源都变得无能为力。当谷歌用自己开发的BlueDroid来取代BlueZ时,猜测其原因可能是许可证问题,因为BlueZ是遵循GPL许可证协议的,而安卓和它的生态系统是遵循Apache许可证协议的。然而,如果你从商业的角度对比这两个项目的源代码时,你将发现分别为两个项目贡献了大部分代码的两个响亮的名字,英特尔的BlueZ和Broadcom的BlueDroid,这让我想到里面可能包含了其他东西。
为了实现我的目标,接着我查看了一些现有的BT攻击工具,并阅读了它们的源代码以更好地理解发生了什么。其中一些有趣的工具有以下几个(更多信息:点击这里):
1、atshell—通过curtain频道打开一个到BT目标的连接 2、attest—与上一个类似,也会盲目尝试检索联系人、电话等等 3、bluesnarfer —同上,但提供了更多选项 4、bt_dos—提供针对BT目标的拒绝服务攻击
然后,我查看了 BT文档 (超过2700页,8卷,数以百计的修正,这还不包括BTLE),非常自信地认为我将能从这些恐怖的设计中找到一些存在问题的实现。再次查看BT栈源代码证实了我的感觉,我发现了一些有希望的线索。首先,我列出了我的目标频率:
1、BT有79个频道:
channel 00 : 2.402000000 Ghz channel 01 : 2.403000000 Ghz channel 02 : 2.404000000 Ghz … channel 78 : 2.480000000 Ghz
2、BTLE有40个频道:
channel 37 : 2.402000000 Ghz channel 00 : 2.404000000 Ghz channel 01 : 2.406000000 Ghz channel 02 : 2.408000000 Ghz channel 03 : 2.410000000 Ghz channel 04 : 2.412000000 Ghz channel 05 : 2.414000000 Ghz channel 06 : 2.416000000 Ghz channel 07 : 2.418000000 Ghz channel 08 : 2.420000000 Ghz channel 09 : 2.422000000 Ghz channel 10 : 2.424000000 Ghz channel 38 : 2.426000000 Ghz channel 11 : 2.428000000 Ghz channel 12 : 2.430000000 Ghz channel 13 : 2.432000000 Ghz channel 14 : 2.434000000 Ghz channel 15 : 2.436000000 Ghz channel 16 : 2.438000000 Ghz channel 17 : 2.440000000 Ghz channel 18 : 2.442000000 Ghz channel 19 : 2.444000000 Ghz channel 20 : 2.446000000 Ghz channel 21 : 2.448000000 Ghz channel 22 : 2.450000000 Ghz channel 23 : 2.452000000 Ghz channel 24 : 2.454000000 Ghz channel 25 : 2.456000000 Ghz channel 26 : 2.458000000 Ghz channel 27 : 2.460000000 Ghz channel 28 : 2.462000000 Ghz channel 29 : 2.464000000 Ghz channel 30 : 2.466000000 Ghz channel 31 : 2.468000000 Ghz channel 32 : 2.470000000 Ghz channel 33 : 2.472000000 Ghz channel 34 : 2.474000000 Ghz channel 35 : 2.476000000 Ghz channel 36 : 2.478000000 Ghz channel 39 : 2.480000000 Ghz
然后围绕hcitools我整理了一个简单的包装器,利用它进行定期调查和嗅探结果,并针对一个新检测到的目标自动执行各种BT攻击工具。这导致了大量的信息检索(很多手机仍然提供他们的联系人列表,很多BT音频设备允许使用“1234”作为pin码进行连接等等),但是没有一个是主动攻击。然后,这种情况提示我如果要发起主动攻击,就不得不使用我的HackRF了。因为我笔记本上的BT工具固件和安卓设备上的BT工具固件都不能正常运行了,而我又不觉得逆向固件是一个好主意,所以还是让我的HackRF上场吧。
我发现 Jiao Xianjun 正在研究一种 BTLE解码器/编码器 ,并且使用 他的hackrf 能够成功地重播iBeacons,所以我选择了hackrf_transfer,并且当从我的笔记本上发送iBeacons时,开始在2.402GHz的BTLE频道37(3个BTLE广告频道之一)上录音,然后重放嗅探到的数据,但是却毫无效果—似乎没有任何内容出现在Gqrx和SDRSharp上。是我做错了什么吗?我对一切重新检查了一遍,甚至为了调试而做了一个GNURadio流,但仍旧得到同样的结果,即在我的2.402GHz频谱上未显示任何内容。 于是通过总结,我认为问题出在我的天线上,这个天线的接收频率范围为为 75MHz-1GHz ,于是我决定等待,直到我得到一个2.4GHz的天线。在我得到一个这种天线的第二天,我将它插入到我的hackrf中,但是结果仍旧是一无所获。现在我知道了我全错了,但是到底错在了哪里呢?
增益
hackrf非常挑剔它的增益值,而且似乎每个SDR界面程序对于不同的增益值都会表现得很不同。一旦我找到了正确的值(这个值用于不同的程序时是不同的,包括hackrf_transfer),我终于能够看到我的iBeacons并回放它们了。另外,我还尝试实时查看一些有趣的数据,第一个使用 gr-bluetooth ,但却以“一般性保护错误”错误而失败,我猜测这是因为项目没有更新的缘故,所以我接着使用 NRF24-BTLE-Decoder 来尝试,结果它与hackrf_transfer能够很好地配合工作:
# hackrf_transfer -r /dev/stdout -f 2402000000 -a 1 -g 16 -l 32 -s 8000000 | nrf24-btle-decoder -d 2
虽然解码是错误的,但能够从解码器中得到一些结果还是很令人高兴的(我怀疑这里的采样率有错,但是太懒了,所以没有深入研究)。
记录并重播一个iBeacon
1、从你的电脑开始发送iBeacons:
# hciconfig hci0 leadv # hciconfig hci0 noscan # hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00
2、使用hackrf_transfer开始记录频道37:
# hackrf_transfer -r ibeacon.raw -f 2402000000 -g 16 -l 32 -a 1 -s 8000000 -b 4000000
3、在你的iPhone或安卓设备上注意iBeacons(我使用了这个,但是你可以使用任何其他的iBeacon探测器),一旦在你的扫描器上看到了一个iBeacon,立即在hackrf_transfer上按CTRL-C并停止发送iBeacons:
# hciconfig hci0 noleadv # hciconfig hci0 piscan
4、从HackRF上重播你的iBeacon:
# hackrf_transfer -t ibeacon.raw -f 2402000000 -x 47 -a 1 -s 8000000 -b 4000000
为了检测到iBeacon,可能你需要连续快速地回放几次。可以尝试下面的方法(循环50次):
# for i in {1..50}; do hackrf_transfer -t ibeacon.raw -f 2402000000 -x 47 -a 1 -s 8000000 -b 4000000; done
5、为了进一步优化文件来过滤掉噪声,并手动选择我们感兴趣的BTLE信号,我们需要通过下面的选项打开Audacity并导入ibeacons.raw文件:
File > Import > Raw Data
现在,在文件中搜索一些看起来像这种漂亮的蓝牙波形的内容(取决于你的缩放级别):
在Audacity上选取这个信号,并在一个新文件中对它至少复制10次。结果看起来应该是这样的:
使用以下选项导出新的文件:
File > Export Audio > Other uncompressed files > Options
现在,通过下面指令享受回放文件的乐趣吧:
# hackrf_transfer -t ibeacon_new.raw -f 2402000000 -x 47 -a 1 -s 8000000 -b 4000000
*参考来源: z4ziggy ,FB小编JackFree编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.com)