请叫我峰子:
感受VPS建站的乐趣。

渗透测试工具TEMPESTSDR:一个远程捕获计算机屏幕的SDR工具

译文声明

本文是翻译文章,文章原作者admin,文章来源:rtl-sdr.com
原文地址:https://www.rtl-sdr.com/tempestsdr-a-sdr-tool-for-eavesdropping-on-computer-screens-via-unintentionally-radiated-rf/

工具概述

TEMPEST是指一些间谍机构通过捕获无线电发射信号(包括声音、震动等)以窃听电子设备的技术。所有的电子产品都会在工作过程中发出射频信号,而通过捕获和处理这些信号就可以恢复一些数据。感谢RTL-SDR.com的flatflyfish发表的文章,其中详细说明了如何在Windows系统上使用TempestSDR工具。

TempestSDR是一个开源的间谍软件工具包,它允许我们使用任何支持ExtIO的SDR(例如RTL-SDR、Airspy、SDRplay、HackRF等)来接收源自计算机屏幕的射频信号,并将该信号还原后显示出来。通过这种方式,我们可以在没有任何物理连接的情况下看到屏幕上显示的内容。如果再使用高增益定向天线,那么甚至可以在几米之外的距离捕获到电脑屏幕的内容。

你可能还不了解“TEMPEST”,它是用来窃取远程视频信息的一种基于软件定义的无线电平台技术,可被当做间谍工具包使用,用来针对某些目标电子设备的射频信号(声音和振动)进行分析,从而实现对目标电子设备的屏显内容窃取。由于所有电子设备都会向外发射一些无意的射频信号,通过对这些信号的捕捉分析,可以将其中的数据进行恢复显示,如可以捕捉电脑显示屏发出的射频信号,进而恢复显示出当前电脑屏幕的显示内容。(这里,要感谢RTL-SDR.com读者 ‘flatflyfish’向我们提供的如何在Windows系统上实现TempestSDR的安装运行指导)。

支持Windows系统的TempestSDR介绍

TempestSDR是一个开源工具,允许使用任何SDR软件,支持ExtIO(如RTL-SDR、Airspy、SDRplay、HackRF)接收捕获目标电子设备的无意射频信号,从而将目标设备的屏显实时图像进行复原;如果外加一个高增益信号的定向天线,甚至可以在几米之外成功窃取到屏显内容。

工具概述

TEMPEST是指一些间谍机构通过捕获无线电发射信号(包括声音、震动等)以窃听电子设备的技术。所有的电子产品都会在工作过程中发出射频信号,而通过捕获和处理这些信号就可以恢复一些数据。感谢RTL-SDR.com的flatflyfish发表的文章,其中详细说明了如何在Windows系统上使用TempestSDR工具。

TempestSDR是一个开源的间谍软件工具包,它允许我们使用任何支持ExtIO的SDR(例如RTL-SDR、Airspy、SDRplay、HackRF等)来接收源自计算机屏幕的射频信号,并将该信号还原后显示出来。通过这种方式,我们可以在没有任何物理连接的情况下看到屏幕上显示的内容。如果再使用高增益定向天线,那么甚至可以在几米之外的距离捕获到电脑屏幕的内容。

重编译步骤                                      

尽管TempestSDR已经发布了数年之久,但其中的ExtIO接口却始终不能在Windows中正常工作。本文中,flatflyfish向我们说明了如何编译一个可以工作的新版本,其具体步骤如下:

1. 首先,需要安装32位版本的Java运行环境(64位版本不支持ExtIO接口),并安装JDK。

2. 安装Mingw32和MSYS,将它们的bin文件夹添加到Windows路径中。

3. 在编译时,我们会遇到大量CC命令的未知错误,我们要在所有makefiles文件的顶部添加“CC=gcc”。由于没有使用到Mirics SDR,我们从JavaGUI makefile中删除Mirics相关行,这样可以简化我们的程序。

4. 原始的JDK文件夹存放在Program Files目录下,但makefile并不支持带有空格的文件夹名,我们需要解决这一问题,将其移动到另一个名字中没有空格的文件夹中。

5. 最后,在编译前,还需要指定ARCHNAME为x86,例如:“make all JAVA_HOME=F:/Java/jdk1.7.0_45 ARCHNAME=X86”。

在完成编译之后,就得到一个可以正常工作的JAR文件。现在的ExtIO,可以与HDSDR配合正常工作,我们可以通过rtlsdr,从测试显示器上获得一些图像。

经过测试,经过修改后的程序可以成功运行。为了帮助大家也能运行,我们将其上传到了https://github.com/rtlsdrblog/TempestSDR ,并且在发布页面上提供了一个预编译的ZIP文件,这样大家无需编译就可以直接使用。

请注意,如果要使用这个预编译的JAR,仍然需要安装MingW32,同时还需要在Windows路径中添加MingW的/bin文件夹和msys的/1.0/bin文件夹。此外,还需要确保使用的是32位Java运行环境,64位版本将无法正常运行。如果是在Win10系统上运行,还需要手动将“Prefs”(偏好)文件夹添加到注册表中的Java路径下。

使用及调试

实际测试中,我们使用了老式的戴尔显示器,其中使用的DVI图像可以完整地接收到,尽管接收到的图像有一点点模糊。我们还另外尝试使用了Airspy和SDRplay设备,由于其具有更大的带宽,图像的质量有了明显提升。具体而言,屏幕上显示的相对较大的文字都可以显示并辨别。

如果使用Airspy,可以参考官方手册: http://www.montefusco.com/airspy/

如果使用SDRPlay,请参考官网上面的操作说明: http://www.sdrplay.com/

请注意,SDRplay的频率无法超过6MHz,RTL-SDR的频率无法超过2.8MHz,一旦超出上述频率,可能会造成丢失样本,从而导致图像无法正常显示。

要使用该软件,最好能首先了解目标显示器的分辨率和刷新率。但如果不清楚,也有自动检测的功能,我们可以选择软件中给出的峰值。此外,我们还需要知道显示器射频信号的频率。假如不知道,可以通过SDR#寻找干扰峰值,该值取决于屏幕上显示的图像变化的频率。举例来说,下图展示了其中一种干扰的模式。有一个诀窍,就是我们可以通过增加“Lpass”选项值来改善图像。并且需要留意自动FPS搜索不能与预期的帧速率相差太多,一旦相差过多,我们可以通过重新设置屏幕分辨率来重置这一数值。

关于显示器和图像制式,我们进行了多次尝试。在一台使用DVI制式的19寸戴尔老式显示器上得到了最佳效果的图像。在HDMI制式的飞利浦1080P显示器上得到的效果一般,但还是能成功接收到。但在一台AOC 1080P显示器上尝试,则无法收到任何可以辨别的图像。

关于位置,我们发现放置在同一房间的显示器,如果使用天线,可以得到最为清晰的图像。但是在相隔房间的两台戴尔显示器,图像仍可以接收到,但非常模糊,无法辨别出显示的内容。我们认为可以使用一个更高的增益定向天线,以改善这一问题。

尽管TempestSDR工具在多年前就已经公布,但却一直不能在Windows系统上用ExtIO接口正常运行, 在flatflyfish给我们的电邮中,他向我们展示了一个通过编译可正常运行于Windows系统的TempestSDR新版本。编译过程大概包含以下几个步骤:

1. 由于ExtIO接口只支持32位JRE,所以需要安装32位版本的JRE运行环境和JDK;

2. 需要安装Mingw32和MSYS,并把它们的bin文件夹添加到windows PATH的环境变量中;

3. 编译时,如果出现CC命令的未知错误,可以在所有makefiles文件顶部添加“CC=gcc”,当然,我也会从JavaGUI makefile中删除Mirics编译线,因为我们不使用其软件定义无线电sdr;

4. 原本JDK文件夹位于Program Files目录下,但makefile不支持文件夹中的空格格式且会出现错误,所以把其移动到另一个名字中没有空格的文件夹后,能成功编译运行;

5. 在编译之前,需要指定ARCHNAME为x86模式,例如:“make all JAVA_HOME=F:/Java/jdk1.7.0_45 ARCHNAME=X86”

按照以上步骤进行编译后,会得到一个可运行的JAR文件。当ExtIO接口和HDSDR能正常配合运行后,我就能用RTL-SDR连接显示器接收到一些目标屏幕的显示图像。

TempestSDR程序运行和实验效果

经过测试编译,我们形成了一个可运行程序,为了其他人的研究之便,我们把它上传到了github开源项目中,其中包含了makefile和一个不需要编译即可fhru使用的TempestSDR ZIP版本软件。请注意,如果要使用预编译的JAR包,仍然需要安装MingW32,且要将MingW / bin和msys /1.0/bin文件夹添加到Windows PATH的环境变量中。除此之外,还需安装32位JRE。另外,在至少一台Win 10主机系统上,我们还手动把“Prefs”文件夹添加到了注册表中的Java路径中。

我们使用了RTL-SDRs的ExtIO接口对该ZIP版本软件进行了测试,确认其能有效运行,能成功收到集成了DVI接口的老DELL显示器上的模糊图像内容。在尝试使用Airspy或SDRplay器件后,由于其带宽较大,大大提高了最终接收到的图像质量,其清晰度足可以在屏幕上显示出大量文字信息。Airspy式的ExtIO接口dll文件可从此下载获得,而SDRplay相应的ExtIO接口dll文件可从其官网下载。但注意,SDRplay最大频率为6 MHz,而RTL-SDR则为2.8 MHz,由于会存在采样丢失的情况,所以任何高于此两频率的SDR信号都不能有效接收到目标屏显内容。

要使用该软件,你还应该了解目标显示器的分辨率和刷新率。但是如果你没有方便检测分辨率和帧速率的自相关图,只需点击波峰即可。另外,你还需知道显示器的无意发射频率。如果这些你都不确定,则可以浏览SDR#寻找决定屏幕图像显示变化的干扰峰值,例如下图中,我们展示了具体的干扰情形。提高图像质量的一种方法是放大“Lpass”选项,并观察自动FPS搜索不会偏离你的期望帧速率太远。如果太过偏离,则需重新选择屏幕分辨率进行重置。

我们测试的最理想效果是,利用Airspy窃侦到的有DVI连接的19英寸老式DELL显示器。另外一个是通过HDMI连接的一个新式的Phillips 1080p显示器,虽然其信号非常弱但仍然能得到较好的恢复图像,第三个为AOC 1080p的显示器,我们没有找到任何可利用的辐射信号。

当目标显示器和天线处于同一房间时,可能窃侦到清晰的目标显示器图像;而相隔邻近房间进行试验时,DELL显示器上的图像仍然可被接收到,只是比较模糊,如果换成高增益的定向天线,效果可能会好点。

PoC视频

http://v.youku.com/v_show/id_XMzIwNTU0Mjk0OA==.html

如果你想了解更多关于TEMPEST和TempestSDR的信息,请参考Martin Marinovs的论文

*参考来源:rtl-sdr,freebuf小编clouds编译,转载请注明来自FreeBuf.COM

最新的开源库地址:https://github.com/martinmarinov/TempestSDR

赞(0) 打赏
转载请注明:峰网博客 » 渗透测试工具TEMPESTSDR:一个远程捕获计算机屏幕的SDR工具

评论 抢沙发

评论前必须登录!

 

网站建设

企业专线联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏