在GEEK PWN大会上,TK为大家演示了腾讯玄武实验室最近研究的新成果—badbarcode,也就是对条码中一些安全隐患的研究。其实关于条码及二维码的安全研究由来已久,本文主要为大家介绍一下badbarcode最基本的原理以及简单的badbarcode攻击。
在badbarcode中,主要针对的是code128协议,由于几乎所有的读码器都可以识别code128协议的条码,因此,此方法还是十分通用的。Code128码其实还分成三类,即128A、128B、128C。它们的区别就是对应的字符表不一样。那么code128码到底怎么读呢?请看下面的图:
条码中从左往右是黑白相间的条形图,其中黑颜色的叫做“条”,用B表示,白颜色的叫做“空”,用S表示。条和空都有4种不同的宽度,我们将其从细到粗赋予1、2、3、4四个值。然后我们开始按照不同粗细的值来阅读上面的条码,结果为:211232 112232 131123 331121 241112 214121 124211 2331112。
Code128码有一个头一个尾。尾用2331112来表示,这代表Code128已经结束;尾前面的6位是校验位,用于检查该条形码是否被正确编码;头有3种,分别是211412表示128A、211214表示128B、211232表示128C;其余的部分是6位为一个块。去掉头、尾以及校验码后就是这样:112232 131123 331121 241112 214121。我们可以根据字符表读出该条码的具体内容,字符表如下所示:
根据头我们可以知道这个是Code128C型。C型码是纯数字的,每个块对应2位数字,查表可得:12 34 56 78 90
要研究badbarcode,我们就要了解一下条码扫描仪是如何识别条码并对条码中的数据进行处理的。识别条码的原理在上面已经介绍过了,那么识别出其中的数据后扫码仪是如何工作的呢?其实大部分扫码仪是基于模仿键盘的机制进行工作的,也就是说在条码中读出数据后,机器会认为该数据是通过键盘输入的,从而在商品编号等信息框内输入商品信息。那么这样的话,我们可不可以通过控制条码信息来在电脑上执行命令呢?答案当然是可以的!在code128协议中,是支持ASCII控制字符的。也就是说在code128协议中对于输入的ASCII字符都会有一个控制字符与之对应,具体的对应情况请看下表:
通过上表我们可以看到,针对不同的ASCII字符,都有一个CTRL+X(X代表任意键)与之对应,这样呢,我们就可以通过执行CTRL+O打开对话框,然后大家就可以继续使用一些方式来进行进一步的操作了。根据上面对code128协议的介绍,我们可以通过生成一个含有2114121341111341112331112信息的条码来执行CTRL+O命令。该信息表明此条码是128A类型的条码,其中包含ASCII字符SI,即对应着CTRL+O命令。生成该条码后,条码如下所示:
扫码仪扫描过上面条码后就会打开如下窗口:
以上只是badbarcode中最基础的内容,在此仅做一个简单的解析,更加精彩的攻击方式可以通过ADF技术自定义键盘输入来实现构造一段包含任意命令的条码。具体关于ADF的技术原理在此就不做介绍了,有兴趣的可以自己进行进一步的研究。
【原文:BadBarcode条码攻击浅析 安全脉搏Blackhold整理发布】