当我的同事,同时也是我的朋友西蒙正在参观我们的ZIMPERIUM TLV 办公室的时候,我们着手开始学习HackRF,通过无线电频率来嗅探没有安全保护的GSM通信流量。西蒙极其耐心地向我解释那些复杂复数的意思并且也说明了那些好玩的地方(相关阅读),因为阅读障碍,我只能照着他的步骤一步一步的去做,经过了多次实验与错误纠正,终于成功了!本次教程是基于一段时间的GSM hacking的实验过程,希望它能给大家带来帮助。
使用到的工具:
hackrf_kalibrate
gnuradio-companion
gr-gsm
Gqrx
Wireshark
安装要求:
首先你得确保所有需要安装的软件都安装了,你可以通过使用依赖性的分布软件包管理器来安装其中的大多数软件,让我们从HackRF所依赖的库与工具安装开始吧,在一台Debian/Ubuntu的发行版本上,通过以下方式安装:
1
|
sudo apt-get install hackrf libhackrf-dev libhackrf0 |
当完成这些库的安装后。我们将手里的HackRF插入到USB接口并执行hackrf_info命令,此时便会看到:
1
2
3
4
5
6
|
# hackrf_info Found HackRF board. Board ID Number: 2 (HackRF One) Firmware Version: 2014.08.1 Part ID Number: 0x00574746 0x00574746 Serial Number: 0x00000000 0x00000000 0x14d463dc 0x2f4339e1 |
接下来就是安装能对无线电频率信号进行解码的gnuradio,以及能对无线电的一定频率进行可视化结果生成的工具gqrx,通过执行以下命令即可:
1
|
sudo apt-get install gnuradio gnuradio-dev gr-osmosdr gr-osmosdr gqrx-sdr wireshark |
注意:在实际使用中Ubuntu14.04没有找到gqrx-sdr,只有gqrx。编译gr-gsm还需要一个库libosmocore这个库在这里获得。
然后执行gr-gsm,GnuRadio模块会对GSM数据包进行解码
1
2
3
4
5
6
7
8
9
|
sudo apt-get install git cmake libboost-all-dev libcppunit-dev swig doxygen liblog4cpp5-dev python-scipy git clone https: //github .com /ptrkrysik/gr-gsm .git cd gr-gsm mkdir build cd build cmake .. make sudo make install |
然后打开gnuradio的配置文件(~/.gnuradio/config.conf),并把以下粘贴进去:
1
2
|
[grc] local_blocks_path=/usr/local/share/gnuradio/grc/blocks |
然后打开gnuradio的配置文件(~/.gnuradio/config.conf),并把以下粘贴进去:
1
2
|
[grc] local_blocks_path=/usr/local/share/gnuradio/grc/blocks |
最后安装 kalibrate-hackrf,它是一款能够识别GSM信号运营商的工具:
1
2
3
4
5
6
|
git clone https: //github .com /scateu/kalibrate-hackrf .git cd kalibrate-hackrf . /bootstrap . /configure make sudo make install |
搜寻GSM频率:
在每个国家,每个运营商使用不同的GSM频率段,通常从900Mhz开始,你也可以使用hackrf_kalibrate去嗅探你想嗅探的频率。
1
|
. /kal -s GSM900 -g 40 -l 40 |
后面的参数值在获取一些结果方面也是非常重要的,运行kalibrate一段时间,你将看到类似以下的输出:
你现在需要调整GSM参数中的(‘-s’)去匹对上当地运营商,可以通过清单来验证是否一致。
有时候你希望从hackrf_kalibrate看到的频率能跟结果对应,或者通过hackrf_kalibrate计算正确的频率(+/- Khz 是每个结果误差标志-这些表示频率误差范围,并不是百分百正确的频率)。打开gqrx并调到从hackrf_kalibrate获取到的第一个频率,例如940.6Mhz,你就会看到下面的图片:
在以上的截图中,可以看到频率在945Mhz范围浮动。
只要我们知道了GSM频道的频率,我们就可以开始通过执行python脚本 ./airprobe_rtlsdr.py 或将airprobe_rtlsdr.grc文件加载到gnuradio,然后设置为刚才你看到的频道频率,别忘记加上’gain’的参数值,回到频率段,按下设备上的上下键来调整频率,每按一次会变动200Khz,直到能从控制台窗口中看到数据,过程缩略图:
现在你仅仅只需要在另一个终端执行以下指令来运行wireshark:
1
|
sudo wireshark -k -Y 'gsmtap && !icmp' -i lo |
如果gr-gsm确实成功运行了,你应该能够看到通过HackRF嗅探到并解码后GSM通信流量数据。