最近,日本东海大学的研究人员开发出一种远距离、超隐蔽的二维码篡改方式。
不仅攻击过程不可见,被攻击后的二维码用肉眼看也和正常情况没有任何区别。
对普通用户和设备来说,这种攻击几乎无法防范。
那么,研究人员是如何在无形之中“偷天换日”的呢?
激光照射改变信息点“颜色”要想解释这个问题,我们需要先了解一下二维码识读的原理。
(本文中的“二维码”均是指我们最常见的QR型二维码)
我们常见的二维码,主要由定位点、格式及掩码信息区、信息区和纠错区组成。
以下图中的2(尺寸)M(纠错等级)型二维码为例,它由25×25个格点组成,其中左上、左下、右下的7×7区域为定位点。
下图中D1~D28和E1~E16分别为数据字段和纠错字段,蓝色区域则为格式及掩码信息区。
其中数据字段是由原始文本先经过分组,然后用一定的处理方式转换为二进制字符串,在二维码中用黑色和白色分别表示1和0。
纠错字段,顾名思义就是为了避免在生成和扫描过程中产生误差而设计的,它由数据字段根据里德-所罗门算法生成,根据纠错等级的不同长度也有所区别。
格式及掩码信息区则储存了二维码的编码(明文到二进制串)方式,以及掩码操作。
掩码是为了避免出现某些特定图案影响扫描结果,按照一定规律对原始点阵进行的变换操作,操作方式存储在了掩码信息区域。
读取过程则是先捕捉定位点,然后对图像进行校正和降噪处理,接着判断格式及掩码区的位置并读取,以获知数据字段的解码方式。
这个中间体包含了一个关键色块,它的颜色决定了真正被读取出的二维码究竟是哪一个。
研究人员利用肉眼不可见的激光对这个色块进行照射,就能决定摄像头的识别结果——
经过照射之后,虽然肉眼看不出区别,但在摄像头的视角下原本是黑色的模块就会被识别为白色。
下图对比了人眼和摄像头可以识别的波长范围:在暗处,波长超过600纳米的光几乎无法被人眼识别,即使在亮处,也无法看到超过700纳米的光。
而摄像头在700纳米的波长下依然有50%以上的捕捉率。
本实验中,研究人员使用了10毫瓦的635纳米(红色可见光)和785纳米(红外线)的光分别在不同距离对二维码进行了照射。
其中0~50米为真实距离,100米距离则通过镜面反射实现。
结果显示,在10~40米处,两种波长的光都能成功将二维码指向的链接改成虚假网址;
在50米处,可见光处理的二维码出现了两个网址都能扫出的现象,但红外光依然能成功篡改;
而在100米的位置,两种波长的光线照射后的二维码都出现了交替结果。
未来,研究者还计划把攻击距离增加到1公里。
不过,这个实验中需要使用透镜对激光进行聚焦,进而确定篡改信息点的位置。
如果光路中的气流扰动比较明显,则会对这一过程产生影响,因此长距离攻击存在更多不确定因素。
也正是这一特点,为防御这种攻击提供了可能——只要时不时扰动二维码面前的气流,激光就找不到位置了。
对此,有网友调侃到,不如在二维码前面扇扇子,把激光“赶走”。
除了气流扰动的方式,作者在论文中还提到,二维码拥有者可以使用防篡改材料来避免攻击。
One More Thing除了篡改二维码,还有用激光照射交通标志从而干扰自动驾驶系统的案例。
这种激光同样是肉眼不可见,但可以被摄像头识别,从而造成误导。
相关研究表明,在室内环境下,这种攻击对停车标志和限速标志的攻击成功率几乎是百分之百。
论文地址(日语):
https://id.nii.ac.jp/1001/00228597/