条码不能随便扫 很危险
条码这个古老的技术如今已成为物理世界和数字世界的接口。不管是随处可见的扫码器,还是人手一部的手机,扫一下码就在两个世界间穿越了。可能有人告诉过你随便扫码很危险,但到底有多危险?为什么危险? 腾讯玄武实验室负责人于旸在GeekPwn大会演讲中展示了它的危险性。 下面是于旸演讲内容摘编: 条码:一种机器可读的数据表示形式 条码的历史非常长,早在上世纪40年代末就有人想到条码这个主意并开始实验。它的原理很简单:使用某种协议将信息编成图像,用条码阅读器或手机获取图像,将图像交给芯片,把图像解码转换成信息,最后传输到电脑。 它的应用无处不在:超市收银时扫描包装袋上的条码获取价格;医院扫描病历上的条码读取病人信息;商家扫描微信支付条码收款…… 这些条码大多是一维码,另一种条码是随着微信普及而重获新生的二维码(它还有个名字叫QR Code)。条码使用的协议非常多,有一种协议叫Code 128,这是一个非常有野心的协议,它支持全部ASCII字符。ASCII是二进制对应的字符,现代计算机使用这套字符编写代码。它对于计算机编程而言相当于拉丁字母之于各种西方语言。总之,用它能编写代码控制计算机。 市面上的大部分条码阅读器都支持这种协议,这意味着黑客可以编写一段程序,转化成条码,通过条码阅读器传输到计算机上。 这些代码怎么才能管用?绝大多数情况下,条码阅读器通过USB接口接入计算机,对计算机而言这就是一个输入设备,计算机只捕捉它们发过来的信号,从哪儿发过来对电脑来说是一样,如果它发送通常由键盘发送过来的信号,计算机也会一样执行。 如果你将键盘种的热键,比如CTRL+2, CTRL+O等编成条码,通过条码扫描器输入计算机,便能直接控制计算机。Code 128协议不支持Win+R这种热键,但最大的条码阅读器厂商Symbol公司还有一种特有的技术叫ADF,它支持Win+。这样控制的内容就更广了,能直接调出计算机的命令窗口。 以前的攻击方式 以前有过一个研究,将条码作为一笔输入源看待,能通过条码触发计算机内存的溢出,或触发格式化字符串,还能SQL注入等。 还有一种更简单的攻击方式,大部分应用场景下,条码种的数字都是按照序号排列的,比如你去商店买个东西,商家给你一个条码取货,你先获取条码种的数字,再在此基础上做改变,比如+1,+2……这样就能拿无限的东西。下一个在你后面买东西的人拿到的条码已经被你刷过。 对二维码来说还有一种常见的钓鱼攻击。 玄武实验室的研究:用条码做任何事 之前那些攻击方式都关注在应用程序对条码输入的数据没有很好处理,而不是条码或者条码阅读器本身。 如果回头去看对条码和条码阅读器的研究,会发现其实条码可以作为控制计算机的一种方式。玄武实验室将这种方式叫做BadBarcode。 Demo 1:对话框攻击 正常情况下条码输入的是数字或字母,但现在不输入这些内容,而是一个系统热键,比如xx,这样扫描条码时就会把对话框调出来,如果这时候计算机使用的是触摸屏(比如很多银行终端机所使用的那种),你就能执行你想执行的事情了。 Demo 2:纸片攻击 不是所有设备都有触摸屏,能不能只用条码完成所有交互?这时候便可以通过一连串条码的组合来实现。 Demo 3:全自动攻击 自己一个个扫描很累对不对?把黑客精神发挥到极致,能不能找到一种全自动的攻击方式?之前我们考虑是否写个手机App,里面自动滚动代码扫描,但发现大部分扫码器无法读取手机屏幕。因为扫码器使用激光阅读,激光的原理是反射光,但液晶屏背光,所以得到了对比度很低,肉眼看到的东西对激光来说是黑的。 最终发现,答案是Kindle。它的显示基于反射环境光,DPI足够高,Kindle可编程。是完美的BadBarcode工具。 事先编写好程序,将Kindle放在扫码器下面,就能自动控制计算机做一系列的事情。 安全建议 条码阅读器生产商:默认不开启类似ADF功能,默认不向主机传输ASCII控制字符; 使用者:尽量不要选用PS/2或HID键盘模拟条码阅读器;对使用PS/2或HID键盘模拟条码阅读器的设备,可通过禁用热键以阻止BadBarcode攻击。 |
声明:长城网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考。新闻纠错、新闻爆料联系方式:15511386191 QQ:648308142 。 |
关键词:条码,计算机,条码阅读器 |