【技术分享】射频信号的自动化逆向分析(含演示视频)

阅读量194887

|

发布时间 : 2016-09-26 13:44:04

x
译文声明

本文是翻译文章,文章来源:安全客

原文地址:http://ethicalhacker.io/post/150536211195/rf-signals-automating-the-reverse-engineering

译文仅供参考,具体内容表达以及含义原文为准。

http://p2.qhimg.com/t0107a04a4698c07fcd.png

前言

近些年来,软件定义无线电(SDR)和射频(RF)分析变得越来越热门了。随着科学技术的不断发展,软件和硬件都在不断升级。尤其在开源领域中,软件定义无线电(SDR)技术毫无疑问地将会成为安全社区中的一种潮流和趋势。

作为一名前软件工程师,我打算使用简单的信号调制方案来对原始的二进制数据进行处理,并实现信号的自动化转换。就我个人而言,最让我感兴趣的就是开关键控(OOK)和频移键控(FSK / 2FSK),因为它俩在汽车、物联网、智能家居、以及安全行业都有其用武之地。

为此,我打算使用开源软件GQRX来记录射频传输数据,然后将它们保存在wave音频文件中,并尝试使用Audacity来对这些数据进行分析。Audacity是一款开源的音频处理软件,它最早是在Linux平台下发展起来的。值得注意的是,这款软件虽然有着傻瓜式的操作界面,但是却可以给用户提供专业的音频处理效果。

作为一个SDR和RF领域的初学者,我一开始真的快失去研究下去的信心了。毫无疑问,GQRX是一款功能十分强大的应用程序。但是,它并不适合用来对数据进行逆向分析我们不仅无法直观地看到数据的处理过程,而且我们还要根据所要分析的信号种类来对工具进行繁重的配置。除此之外,用户也无法直接从GQRX的输出数据中观察到频率的变化。


GQRX是什么?

GQRX是一款实验软件,它使用了GNU Radio和Qt GUI工具来实现无线电接收功能。GQRX不仅可以作为一种带有音频输出的传统AM/FM/SSB接收器来使用,而且还可以使用网络套接字来与外部应用程序进行交互。目前,该项目的Github代码仓库仅提供了针对Linux平台的源码包和二进制代码,Mac用户仅能通过macports来安装GQRX。[Github传送门

在此之后,我又发现了一个名为“Inspectrum”的新型跨平台工具。Inspectrum不仅允许用户以可视化的形式查看射频信号的频移值和振幅值,而且它还支持由osmocom_fft生成的RAW文件格式。所以在我看来,Inspectrum是一款非常简单且高效的工具,我们可以用它来捕捉和处理射频传输信号。


Inspectrum简介

Inspectrum是一款可以分析捕捉信号的工具,它主要针对的是软件定义的无线电接收设备。

http://p6.qhimg.com/t01eb91d8df42af0500.png

Inspectrum支持以下类型的文件:

*.cf32,*.cfile – (GNURadio, osmocom_fft)

*.cs16 – (BladeRF)

*.cs8 – (HackRF)

*.cu8 – (RTL-SDR)

如果你加载了Inspectrum无法识别的文件,Inspectrum会默认将该文件当作*.cf32文件来处理。

Github项目主页:[传送门


实验分析

现在,既然我们已经知道了如何去查看OOK和2FSK信号,那么接下来我就准备在Inspectrum中对信号进行逆向分析了。我打算使用网格叠加分析来帮助我确定传输信号的波特率,并且对信号进行可视化解码。这种处理方法虽然与我之前使用Audacity时所用的方法非常相似,但是这个方法有几点明显的不同之处:

1、提升了信号传输的可靠性;

2、可以检查射频信号的频移;

3、可以对传输信号波特率进行自动计算;

由于我此前曾是一名软件工程师,所以当我发现这类逆向分析工作变得越来越乏味无趣的时候,我自然会想到要设计出一种方法或者工具来自动完成这些逆向分析任务。在我彻底弄清楚了这些信号的识别和解调机制之后,我便开始尝试为Inspectrum开发一个封装程序。这个封装程序可以获取到Inspectrum报告的信号振幅值或频移值,并且直接取平均值来作为阈值。当信号单元的值低于阈值时,封装程序就会认为该值为一个二进制的“0”;当信号单元的值高于阈值时,它便会将该值视作二进制的“1”。分析完毕之后,它会将原始的二进制数据输出。

在这个自动化工具的帮助下,我的逆向分析效率得到了大幅度的提升。而且还有很重要的一点,在人工进行逆向分析的过程中经常会出现错误,但是有了这个工具基本上就不会在出错了。话虽如此,但是在目前这个阶段,我仍然需要通过肉眼去对比信号的差异。于是乎,我便开发出了一款增强版的封装程序(dspectrum),并且将其转变成了一种交互式的命令行工具。除此之外,我还引入了另外两个新的功能:1.对同一文件中传输信号的两个部分进行半自动化比较;2.对不同文件中的两个传输信号进行半自动化比较。

我在我的射频信号发射装置上重新测试了我的逆向分析步骤,我发现确定二进制数值的因素是“平均时间”,无论其是否采用了滚动码系统或者其他的某些功能,胚胎设备的平均分析时间已经从之前的一个小时减少到了五分钟左右。


dspectrum-[Github项目地址

http://p3.qhimg.com/t011f059c28ff595b45.png

我所开发出的这款封装程序名叫“dspectrum”,它可以对RF/SDR信号进行自动化逆向分析。

程序运行依赖

Inspectrum:[下载地址

Ruby:[下载地址

安装方法

git clone https://github.com/tresacton/dspectrum
cd dspectrum
chmod +x ./dspectrum
gem install colorize
 
cp ./dspectrum /usr/local/bin/  # optional

使用方法

./dspectrum   #  or simply `dspectrum` if you copied it to /usr/local/bin

运行了上面这条指令之后,你将会得到一个可交互式的shell。我已经用这个脚本来对OOK和2FSK信号进行过测试了,目前为止成功率为100%。它会对信号进行详细的检查,如果发现有任何不对劲的地方它会立刻提醒用户。


结束语

除了上述文字内容之外,我还录制了一个演示视频。在这个演示视频中,我用了两台相似的设备来生成两个代码/标识符不同的信号,我可以在不到两分钟的时间内识别出信号中所包含的代码或标识符。

演示视频(从两个不同的文件中捕获信号,然后进行对比分析):

本文翻译自安全客 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
WisFree
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66