攻破物理隔离网的无线方法(2)– TEMPEST攻击

非保密的第一个工作-TEMPEST攻击

  1985年,荷兰计算机研究者Wim Van Eck发表了一篇文章《Electromagnetic Radiation from Video Display Units: An Eavesdropping Risk?》是现有能够公开检索到的最早的关于显示设备侧信道泄露的工作。在这项工作中,Van Eck使用价值15美元的无线电接收设备,在相距数百米外采集一台CRT电视机工作时发出的电磁泄露信号,从而还原出了电视上的画面信息。

  上图为Van Eck使用的设备

  自此,TEMPEST攻击概念被越来越多的人了解。TEMPEST中文名叫做:瞬变电磁脉冲发射监视技术,指的是通过采集分析计算机设备工作时,由于各种器件的瞬时电压、电流、功率等的快速变化,引发的电磁信号泄露,从而逆向分析计算机设备的内部信息。
  1998年,一个叫做“Soft-TEMPEST”的项目,成功利用液晶显示器调制发射出了特定频率的电磁泄漏信号,并实施了远距离无线通信。
  2001年,一个叫做“TEMPEST for Eliza”的项目,首次实现了像素级别的调制,通过生成特制的图像,刺激液晶显示器发出指定频率的电磁泄露信号(或许已经可以称为射频信号?)。并实现了在AM广播频段播放歌曲,使用收音机便可以收听由液晶显示器发出的射频信号调制出来的歌曲。
  此后,越来越多的TEMPEST攻击被挖掘,其中,以以色列特拉维夫大学和本古里安大学的很多研究团队专注于此,一位叫做Mordechai Guri的教授专注于各种无线侧信道TEMPEST攻击,在近20年来发表了非常多的研究工作,其Google scholar的引用是air-gap领域的最高引,开发出了基于电磁、光学、声学、热学、磁学等各种方式的无线TEMPEST攻击。

  TEMPEST的背景大概就是这样,下面的内容会以尽可能简单的文字来解释调制显示设备发出电磁泄露的工作原理。这个原理是我个人在学习研究相关领域时的理解,未必完全正确,但符合推理和实验结果。

信息显示器件技术背景

  首先需要介绍一下显示器件的工作原理。以电视机为例,电视在显示一张图片的时候,是从屏幕的左上角的第一个像素点开始,从左到右,从上到下依次点亮每一个像素点。在1秒钟内,还会以设定的刷新率快速刷新整个屏幕。例如如果设置的60Hz的刷新率,那么整个图像在1秒钟内从左上角到右下角的像素点快速点亮并刷新60次。这个刷新率我通过实验,发现是相当稳定的,在1毫秒的采样率下,我发现绝大多数显示器件的刷新率非常稳定。值得一提的是,这里所说的刷新率本质上是垂直刷新率,其实还存在着水平刷新率,意即从左到右的刷新速度。水平刷新率非常快,以kHz为单位计算,在这里不展开说明。(如果要研究TEMPEST攻击还是需要注意这个的)
  下一个要说的是实际显示器件的隐藏像素。对于实际生产的显示器件,为了防止由于宇宙射线、环境电磁干扰等因素的干扰,在矩形屏幕的四周,还存在着一些隐藏像素。这些隐藏像素的功能是为了做同步,包括行同步和列同步。这个知识点需要一些FPGA知识,在这里不展开分析,(如果您对此比较了解或许希望可以交流一下?我对FPGA这方面的理解也不是非常深入,仅仅在学校的课程中学过一点皮毛)简单的说可以认为,显示器件生产商告诉你的分辨率其实不是真正的分辨率,例如在60Hz下1280 * 1024的分辨率,实际上是1688 * 1066。这些隐藏像素同样影响着电磁泄漏的特征。这里我保存过一份各种参数下的真正分辨率的参数表,在这里公开分享一部分(印象中我是在一个德国老师的github上找到的,但是后来再没看到这个项目…有点可惜):
“ PAL电视”,576,625,25,
“ 640×400 @ 85Hz”,832、445、85,
“ 720×400 @ 85Hz”,936,446,85,
“ 640×480 @ 60Hz”,800,525,60,
“ 640×480 @ 100Hz”,848、509、100,
“ 640×480 @ 72Hz”,832,520,72,
“ 640×480 @ 75Hz”,840,500,75,
“ 640×480 @ 85Hz”,832,509,85,
“ 768×576 @ 60 Hz”,976,597,60,
“ 768×576 @ 72 Hz”,992,601,72,
“ 768×576 @ 75 Hz”,1008,602,75,
“ 768×576 @ 85 Hz”,1008,605,85,
“ 768×576 @ 100 Hz”,1024、611、100,
“ 800×600 @ 56Hz”,1024,625,56,
“ 800×600 @ 60Hz”,1056、628、60,
“ 800×600 @ 72Hz”,1040,666,72,
“ 800×600 @ 75Hz”,1056、625、75,
“ 800×600 @ 85Hz”,1048、631、85,
“ 800×600 @ 100Hz”,1072、636、100,
“ 1024×600 @ 60 Hz”,1312、622、60,
“ 1024x768i @ 43Hz”,1264,817,43,
“ 1024×768 @ 60Hz”,1344,806,60,
“ 1024×768 @ 70Hz”,1328、806、70,
“ 1024×768 @ 75Hz”,1312、800、75,
“ 1024×768 @ 85Hz”,1376、808、85,
“ 1024×768 @ 100Hz”,1392、814、100,
“ 1024×768 @ 120Hz”,1408、823、120,
“ 1152×864 @ 60Hz”,1520,895,60,
“ 1152×864 @ 75Hz”,1600、900、75,
“ 1152×864 @ 85Hz”,1552,907,85,
“ 1152×864 @ 100Hz”,1568、915、100,
“ 1280×768 @ 60 Hz”,1680,795,60,
“ 1280×800 @ 60 Hz”,1680、828、60,
“ 1280×960 @ 60Hz”,1800,1000,60,
“ 1280×960 @ 75Hz”,1728,1002,75,
“ 1280×960 @ 85Hz”,1728,1011,85,
“ 1280×960 @ 100Hz”,1760、1017、100,
“ 1280×1024 @ 60Hz”,1688、1066、60,
“ 1280×1024 @ 75Hz”,1688、1066、75,
“ 1280×1024 @ 85Hz”,1728、1072、85,
“ 1280×1024 @ 100Hz”,1760、1085、100,
“ 1280×1024 @ 120Hz”,1776、1097、120,
“ 1368×768 @ 60 Hz”,1800,795,60,
“ 1400×1050 @ 60Hz”,1880,1082,60,
“ 1400×1050 @ 72 Hz”,1896,1094,72,
“ 1400×1050 @ 75 Hz”,1896、1096、75,
“ 1400×1050 @ 85 Hz”,1912,1103,85,
“ 1400×1050 @ 100 Hz”,1928,1112,100,
“ 1440×900 @ 60 Hz”,1904,932,60,
“ 1440×1050 @ 60 Hz”,1936,1087,60,
“ 1600×1000 @ 60Hz”,2144、1035、60,
“ 1600×1000 @ 75Hz”,2160、1044、75,
“ 1600×1000 @ 85Hz”,2176,1050,85,
“ 1600×1000 @ 100Hz”,2192、1059、100,
“ 1600×1024 @ 60Hz”,2144、1060、60,
“ 1600×1024 @ 75Hz”,2176、1069、75,
“ 1600×1024 @ 76Hz”,2096、1070、76,
“ 1600×1024 @ 85Hz”,2176、1075、85,
“ 1600×1200 @ 60Hz”,2160、1250、60,
“ 1600×1200 @ 65Hz”,2160、1250、65,
“ 1600×1200 @ 70Hz”,2160、1250、70,
“ 1600×1200 @ 75Hz”,2160、1250、75,
“ 1600×1200 @ 85Hz”,2160、1250、85,
“ 1600×1200 @ 100 Hz”,2208,1271,100,
“ 1680×1050 @ 60Hz减少了消隐”,1840、1080、60,
“ 1680×1050 @ 60Hz非隔行扫描”,2240、1089、60,

  这里我保留了一部分高分辨率的参数,如果您感兴趣可以与我联系。另外我收集过一个计算工具来计算真实像素分辨率,但是在实际实验中,发现似乎这个计算工具并不准确,就不放出来了。

  接下来一个要提到的概念是扫描方式。显示器件的扫描方式分为隔行扫描和逐行扫描。逐行扫描指的是从上到下一行一行的更新,每一帧图像由电子束顺序地一行接着一行连续扫描而成;隔行扫描是交错的扫描,把每一帧图像通过两场扫描完成。下面这张示意图更好形象地理解,就不多做解释:

  上图截自大三的时候上沈沛意老师的《多媒体技术》一课中的课件,在此感谢沈老师当时的讲解,刚好那个时候我对TEMPEST技术有很多技术细节不理解,在沈老师的课上恰好学到了很多
  这里需要区分的是:工作、打游戏使用的显示器,现在已经普遍采用逐行扫描的方式了,一些电视机仍采用隔行扫描的方式。隔行扫描更省带宽,但是容易出现拖影等现象影响观看。

  有了上面的显示技术基础知识背景,下面就可以介绍TEMPEST攻击的更深一步的原理。

TEMPEST泄露原理

  根据麦克斯韦电磁理论,变化的电场在其周围空间要产生变化的磁场,而变化的磁场又要产生变化的电场。这样,变化的电场和变化的磁场之间相互依赖,相互激发,交替产生,并以一定速度由近及远地在空间传播出去。当电磁波频率较低时,主要籍由有形的导电体才能传递;当频率逐渐提高时,电磁波就会外溢到导体之外,不需要介质也能向外传递能量,这就是一种辐射。在低频的电振荡中,磁电之间的相互变化比较缓慢,其能量几乎全部反回原电路而没有能量辐射出去。然而,在高频率的电振荡中,磁电互变甚快,能量不可能反回原振荡电路,于是电能、磁能随着电场与磁场的周期变化以电磁波的形式向空间传播出去。
  根据以上的理论,每一段流过高频电流的导线都会有电磁辐射。有的导线用作传输,就不希望有太多的电磁辐射损耗能量;有的导线用作天线,就希望能尽可能地将能量转化为电磁波发射出去。于是就有了传输线和天线。无论是天线还是传输线,都是电磁波理论或麦克斯韦方程在不同情况下的应用。
  因此,显示器件内部的导线当工作时,如果出现快速的电场变化,就会产生泄露出去的电磁波,那么,我们只需要控制显示器件产生快速变化的电场,便可以控制显示器发出指定频率的电磁泄漏。如何控制显示器件的电场快速变化?前面的所有铺垫就是为了解释:通过让显示器件显示特定的图像,便可以控制显示器件的内部电路工作状态!

窃听画面 – 通过TEMPEST电磁泄漏恢复显示图像

关于如何通过TEMPEST电磁泄漏来恢复显示的画面,在下面这个b站视频里有,就不多做解释了。
https://www.bilibili.com/video/BV1Vt4y1X7rF

控制TEMPEST电磁泄漏的频率

  当我们掌握了上面的背景知识后,重点就是如何生成特殊的图像来控制显示器件发出指定频率的电磁泄漏信号了。本质上,是相当于把显示器件改造成发射天线,因此调制的原理和天线的调制发射原理极其相似。在“Soft-TEMPEST”项目中,原研究人员编写了一份非常复杂的代码来控制,但是遗憾的是该代码太难读懂了,没有什么注释也没有说明文档,我没有完全读懂它。后来我参考了Guri的一份工作,结合自学过的一丢丢天线原理重新写了一份脚本来控制生成特制图像。下面是一张生成的特制图像:

  不知道为什么WordPress不让我上传原图。。。感兴趣的话可以联系我
  上面这张图片显示在电视、显示器上,会控制显示器件发出120MHz的电磁泄漏,带宽大约是1kHz到4kHz之间。在实际测量中,我往往会在118.3MHz到119MHz之间测量到,存在一定漂移。另外,对于计算机设备的电磁泄漏,118.5MHz是一个非常神奇也有意思的频率,这个如果有机会在后面我会单独写一篇博文来讨论。
如何最大程度的控制显示器件的状态发生快速变化,和如何控制显示器件的状态变化速度,就是控制显示器件发出电磁泄漏的根本所在
(1)最大程度控制变化,用到的是黑色和白色像素点的切换。这里也就是瞬变的意思。
(2)控制变化速度,就是把每一个像素点当作离散的采样点,连续的黑像素和白像素都不会产生瞬变电磁泄露,因此控制黑白切换的频率,就可以做到控制变化速度。
(3)注意隐藏像素的因素。隐藏像素部分虽然不直接影响电磁泄漏的频率,但是在整个激发电磁泄漏的时间里,隐藏像素会占用一部分时间空间,因此要把隐藏像素当作实际存在的像素,连续调制才可以准确调制出想要的电磁泄漏频率。

如果从能量分析角度考虑

  这里的瞬变,如果从能量分析角度考虑,本质上是动态能量消耗的概念。
  这里简单的说一下电路的能量消耗问题。以CMOS电路为例,CMOS电路的总能量消耗等于构成这个CMOS电路的各个逻辑元件的能量消耗之和。当MOS晶体管处于截止状态时,只有很少的漏电流通过,总能量消耗很低,这个能量消耗叫做静态能量消耗;当逻辑元件的内部信号或者输出信号发生转换时,就会产生动态能量消耗。通常情况下,内部信号的能量消耗远小于输出信号的能量消耗,因此在数量级上可以忽略内部信号的能量消耗。
0 -> 0 静态
0 -> 1 静态+动态
1 -> 0 静态+动态
1 -> 1 静态
上面是四种能量消耗的类型。能量消耗的概念到此结束。
  回过头来看瞬变电磁。我们通过黑白点来控制电磁泄漏的频率,本质上是在控制显示器件内部的动态能量消耗,而且是控制输出信号的转换时的能量消耗,因此才会产生足以让我们观察到的电磁泄漏。


  我使用了一个RTL-SDR设备来采集电磁泄漏,可以看到在118.4MHz附近存在明显的电磁信号。
  关于生成算法,我在犹豫是否要开源,暂时先不公开了。简单的描述一下,就是控制黑色像素和白色像素的分布,控制的思想是从显示器件的扫描顺序上,黑白切换是一个瞬变,控制瞬变的频率就可以控制发射的电磁泄漏的频率,注意需要把隐藏像素包进整体计算的矩阵里。可以类比一下天线的原理。(其实本质上做的事情就是把传导线改造成天线)

防护手段

对于TEMPEST泄露的防护一般来说会有屏蔽、干扰、消除泄露等方式。相关设备生产厂商对于普通商用产品最常看到的是添加屏蔽罩,比如电脑机箱里增加金属罩来阻止电磁泄漏,或者是增加噪声来干扰观测电磁泄漏。对于消除泄露可以参考 攻破物理隔离网的无线方法(1)– 能量分析攻击 里的隐藏对策和掩码对策。

最后

  TEMPEST技术实质上不局限于显示器件,计算机的很多组成部分都有可能成为TEMEPST泄露的发射源,键盘、鼠标、CPU、打印机等等。前一段时间甚至看到了有人观测到了英特尔的GPU工作时发出的电磁泄漏,并成功调制出了指定频率的电磁信号。
  我在了解研究TEMPEST技术的过程中,受到西安电子科技大学蒋志平老师的指导,以及西电18级网安实验班连志翔同学的帮助,非常感谢!~

最后的最后

   TEMPEST技术在无线电爱好者和无线领域的研究者的眼中是非常有趣的工作,但同时也有可能被想要实施恶意攻击的黑客所利用。虽然说安全技术的研究是在对抗中相互进步的,我希望更多的是从技术角度来做一些有趣的工作,并不希望我的这些文字帮助任何恶意的黑客攻击。

Add a Comment

邮箱地址不会被公开。 必填项已用*标注