相对于上一篇初探,这篇文章讲述的更加倾向于安全一些,虽然文字偏多但必要。各位可以从中找找自己感兴趣的方向了解无线安全。
无线电攻击再探(II)
这篇文章是上一篇无线电初探(I)(https://forum.butian.net/share/203 )的续集。在上一篇中我们用电阻、电容、三极管和线圈天线带各位粗略地了解了什么是无线电,无线电的历史(当然是来自百度),还有最主要的——用手边就能摸到的元件做了一个简易版能发射、接收的所谓无线电装置,真正从底层开始了解而不是买个做好的模组直接用(手捏三极管、封装电阻那是材料问题,这个地底层面的问题在下也没深入过ssfd)。
可能“初探”那篇文章和安全的关系并不紧密,各位搞安全的师傅读起来没有什么感觉。那么这篇“再探”就一定要围绕无线安全来讲一讲,总结一下我了解的安全,里面涉及无线安全的当前的技术背景、攻击手段和常见的防御手段。
放心这次里面不涉及电阻电容,我会用相关的通信模组、SDR软件无线电、蓝牙网卡dongle、Wi-Fi网卡作为外设来总结讲述。各位想上手的师傅绝对可以用一个较低的成本搞到对应设备。这篇文章主要是讲无线点对点通信的安全问题,wifi之类的属于各位师傅本行,在下就不班门弄斧了。(没有用电阻、电容主要是没见过用电阻、电容、三极管搭真实、能用的通信模组,如果有哪位师傅感兴趣我们可以一同研究一下。这种“造轮子”的事情做起来难度不小、实际意义不大,但有助于理解问题。闲暇之余搞一搞正是Geek们的爱好)
射频技术
射频技术又被成为射电技术,起源于19世纪下半叶的无线电技术。射频技术主要通过将数字信号进行转换调制后,生成相应携带有信息的电磁波进行发射,达到信息传递的目的。
现在,射频技术已经成为信息产业的重要支柱,在射频技术的基础之上发展出了包括GSM系统、CDMA系统、4G-LTE系统、WI-FI技术、射频识别技术(RFID)、NFC技术等一系列新型的无线通信技术。这些技术都被广泛应用到各种信息化设备中,成为信息产业发展的主要推动力。
射频通信不安全?
射频通讯和传统的有线通讯手段不同,其具有无线传输的广播特性,在传输范围内所有节点均能收到信号源发送的信号,信号本身不会对设备进行区别,所以射频通讯存在信息易被窃听、被篡改的安全隐患。正是因为射频信号的广播特性要求,使用射频信号进行数据传递的通讯机制,必须采取相应的措施对数据进行保护,数据来源进行验证。
这一点在很多成熟的技术体系都有所体现。例如WIFI、CDMA(3G网络)、蓝牙、LTE(4G)等技术都已经采取了相应的安全措施防止通信数据被窃听、截获以及篡改,保障射频通信的安全性。
射频识别技术(RFID)、NFC技术把“防窃听”的策略做到了感应距离上。因为这个技术属于近场触发型,广义上读卡器在“广播”,但这种广播没有具体含义,主要的信息被写在了卡里(就算是银行卡的闪付功能扣钱是银行后台问题,但是触发的信号还是写“死”在卡里)。虽然现在有很多安全大佬讲这个银行卡能被复制,不过我想前提一定要理想,近场这个条件就防备了大多数实际的攻击。
可是,进行点对点射频通信的设备不具备上述射频通信技术的防御策略(没有距离、也没有数据保护),导致当前进行点对点射频通信的设备的安全措施十分薄弱,普遍被很多设备采用的点对点射频通讯机制仅考虑了通信的速率,大多没有考虑到通讯过程对数据的保护,缺乏安全性和秘密性的保障措施。(无线门铃、电扇遥控等)
IR、VLC、Li-Fi技术
这一类技术我们现在使用的也很广泛,但大多数充当辅助的角色,将来如果可以解决一些“卡脖子”问题会有里程碑式的应用场景。
可见光通信技术,是利用荧光灯或发光二极管等发出的肉眼看不到的高速明暗闪烁信号来传输信息的,将高速因特网的电线装置连接在照明装置上,插入电源插头即可使用。利用这种技术做成的系统能够覆盖室内灯光达到的范围,电脑不需要电线连接,因而具有广泛的开发前景。(来源 https://baike.baidu.com/item/可见光通信技术 )
这类无线控制问题在之后我会出一篇文章专门谈谈,并公开一个自制用于嗅探光信号的攻击,本文章为了控制一个合理篇幅就不白活了。
当前技术盘点
以下盘点部分原本部分摘录学校同学之前,在课堂presentation上展示的ppt、报告,经核查发现其参考的是Freebuf上这篇文章https://www.freebuf.com/articles/wireless/165566.html 。这一版我会核实内容并做出修改。
当前射频技术发展很快,不过采用点对点射频通讯的设备大多具有能量、计算能力和使用环境等限制,所以现有的很多安全协议机制例如WIFI技术、Zigbee技术等都无法应用到点对点的射频通讯中。
采用点对点射频通信技术的设备很多都没有考虑到安全因素,存在安全性差,射频信息容易被屏蔽、窃听、篡改等弱点,攻击者经常这些利用这些点对点射频通信的弱点进行相应的破坏。而对于一些已经采用了一定安全通讯机制来保障通讯过程中数据安全的设备,也发现其所采用的安全机制本身存在漏洞,不够健全。
1 射频遥控器现状
传统红外技术和射频技术有所不同,红外技术需要在视距范围内才能产生作用,但是射频技术却没有这个限制。这是射频技术相较于红外技术的优点,但是这一特点也会大大降低射频技术的安全性。红外技术由于传输距离和视距的限制,所以接收机很少遭受到伪造信号的攻击。但是采用射频技术的接收机在开启过程中会接收所有的可用的射频信息,而不会去区分来源;同时当射频信息出现干扰时,接收机也无法通过正确解析获取到相应的数据。所以使用射频技术的遥控器需要一定的机制来确保信息来源的正确性,也要提供一定的机制来使发送机确认消息正确到达接收机。
根据调查研究发现,当前广泛使用的射频无线遥控器很多都没有这样的安全性保证,通讯机制极其简陋(比方老生常谈的遥控灯的遥控器、开车库门的遥控器,甚至一些老式的电动车钥匙)。大量的射频通讯机制在其信息通信的过程中,发送机只是简单地对一个信号进行发送,而接收机也仅仅是在获取到相应的信号进行区分后执行设定好的操作。
这一系列的通讯过程既没有对消息的来源进行验证,也没有对信息的秘密性进行判断,根本无法保证信息通信的安全性。如果对这样的射频通讯机制进行攻击,攻击者只需要一台简单的射频信号录制设备在被攻击者使用射频遥控器的时候进行射频信号的录制,然后再使用一台射频信号的发送设备对录制到的信号进行重放就可以完成射频信号的伪造,达到控制目标设备的目的。
在此基础之上,攻击者如果再搭配上一根高增益的天线,那么就可以在很远的范围进行以上的操作,从而远程控制目标设备而不被发现。
2 无线门铃现状
与传统的门铃不同,无线门铃不需要进行线路的布置,而是通过射频信号来传递门铃信号,使室内门铃响起,具有安装简单、移动性强、节能低耗的优点,所以受到了很大的欢迎。但是很多无线门铃都没有考虑到设备的安全性。在对市场售卖的无线门铃产品进行实验之后发现,很多现有的无线门铃为了保证射频信号的传输距离、降低室外门铃按钮的功耗以及解决按钮和响铃之间射频信号的匹配问题,采用了固定码解码放大器芯片对接收到的射频无线信号进行解码和正确性验证。固定码解码放大器芯片的使用说明每一次按下室外门铃按钮发送的信号都是相同的。
在进一步的研究中发现射频信号从室外门铃按钮传输到室内响铃的过程中没有任何机制对信号来源的正确性进行验证,同时室外门铃按钮也不保证信号是否能够安全到达室内响铃。当室内响铃接收到射频信号之后,只是简单地进行了信号与设定值之间的匹配。如果信号匹配成功(对应比特匹配),室内响铃就会执行响铃操作,匹配失败室内响铃则不执行任何操作。在这样的通信机制中,攻击者只要通过射频信号录制设备就能获取到门外门铃按钮的射频信号。在使用软件对信号进一步修正后,就可以利用射频信号发送设备直接进行门铃信号的发送,从而使室内的响铃装置响起,达到攻击的目的。这样的射频通讯机制在实际应用中毫无安全性可言,但是却在目前的无线门铃中被广泛应用。如果有攻击者针对无线门铃进行这样的攻击,将会对使用者的生活产生极大的干扰。
3 汽车钥匙现状
当前主流的汽车厂商都在自己的汽车钥匙中使用了射频技术,无线射频钥匙基本上已经成功取代传统的机械钥匙,成为汽车钥匙的主流。作为信息安全通讯高要求的使用场合,汽车厂商在汽车和汽车钥匙之间的无线射频通讯过程中采用了RKE(remote keyless entry,远程无钥匙进入系统)和PKE (passive keyless entry,被动无钥匙进入系统)。PKE/RKE射频通讯系统都工作在ISM自由频段(125kHz, 315MHz,433MHz),这两种系统都有各自的信息安全通讯机制,并且工作方式都有所不同,但是这两者都采用了滚动码机制对射频通信进行安全防护。
滚动码技术(keeloq)利用一种负载的非线性加密算法来实现编码加密。滚动码本身由固定码和跳码组成,其中固定码是初步认证手段,而跳码则由作为发送机的钥匙根据预先存储在加密芯片中的编码密码来产生,在跳码中包含了键值、计算器溢出位、识别码和同步计数器等信息。在每一次射频消息的通讯过程中,滚动码都会重新产生然后作为一个变量添加到所要发送的消息中,这样每一次加密之后的消息在传输中都会变得不同。而接收方可以从之前的通信状况和预置在汽车中的固定码中预测滚动码的下一个值,这样就可以通过比较钥匙发送的滚动码和汽车预测的滚动码的匹配程序来验证报文的有效性。
在实际应用中:(之前有错误)
Keeloq编码包含一组64 比特编码密码(加密密钥),发送出去的为66 比特的数据,其中有32 比特是跳码部分,是完全不可预测的,这就给截获破解带来了难度,Keeloq的数据位比较长,这样组合的数量就会比固定码长的多。
资料上系统用HCS300芯片产生的编码,按照一秒钟传送10笔数据来计算,产生全部66 比特,需要2.2*10^11年。
(此处来源于 丁飞, 余水宝. 远程防盗汽车PKE系统设计.电子科技. 2012: 25 (7) 118-124.)https://www.freebuf.com/articles/wireless/165566.html
还有一种滚动码协议hitag2,这个技术在下不甚了解,给师傅们个链接,以供学习。(https://blog.csdn.net/spenghui/article/details/71930428 )
攻击方式
针对射频通信设备的攻击方式更加多样化,但是总的归结起来有以下几种主要的攻击方式:
1 重放攻击
重放攻击是针对无线通信的最主要的攻击方式之一,其原理是在用户正常使用设备的时候,攻击者通过射频信号录制设备将用户发送机所发送的正常信号录制下来,然后通过射频信号的发送设备将录制下来的信号发送,使用户的接收机接收信号,从而执行相应的指令达到攻击的目的。这种攻击方式实施简单、成本低,只需要射频信号的录制和发送设备就可以完成。而且攻击者不需要知道数据的准确含义,仅仅需要了解通信时数据包的作用即可。由于重放攻击的这种性质,单单使用加密算法无法防护重放攻击,因为加密后的数据依然可以使接收机正确执行。由于重放攻击具有如上特性,所以重放攻击是目前攻击者采用的最普遍攻击方式。
上例子
下面我展示一个我自己实现的一个车钥匙重放攻击演示视频(https://www.bilibili.com/video/BV1JR4y1E7cC/ )感兴趣的师傅们可以点击观看。
简单讲一下,这个重放攻击的实现过程就很简单,很多初学者买快板子就可以轻易尝试(当然这要感谢开源SDR实验室的开发工作)。外设用的HackRF、软件使用的是URH(Universal Radio Hacker)这个软件的详细描述、使用说明请参考开源SDR实验室的这篇文章(https://blog.csdn.net/OpenSourceSDR/article/details/104821001 )我们只需要一根数据线microUSB(搞硬件就会涉及到各种接口之后我总结一篇盘一盘这里面的“坑”们)、一块HackRF(相对其他靠谱的SDR更便宜,土豪bb们随意USRP这种也是可以用的)、URH软件和一个自己家(或者以合法渠道获得的车钥匙)。
首先是要确定这个车钥匙发出的射频信号处于什么频段(315MHz、433MHz、868MHz、915MHz)这一步就仁者见仁了,各位师傅可以用的软件有很多GNURadio、Gqrx、Arduino中的示例··· 啥都能用,网上涉及到的软件都是开源的;硬设建议初学的师傅选择“电视棒”。比较朴素的判别方法:真实按下遥控器按键瀑布图、波形图有颤动。
找到了对应频段之后,URH有一套很成熟的录制、重放界面,要做的就是选好外设,调整相关参数点击录制、播放即可。(录制的时候为了重放效果好,可以把遥控器离HackRF近一点)
2 阻塞攻击
阻塞攻击是指当用户发送正确的指令时,攻击者通过射频信号发送设备在接收机的通带范围内(接收机监听有效信号的区域)不断向接收机发送无效的垃圾数据(比方真实信号在315MHz处传,然后我们用一个发射器在315.2MHZ处乱传),使用户的有效信息无法被接收机获取,从而阻止接收机执行来自用户的正确指令。如果接收机和发送机之间缺少信息反馈,那么在这种攻击方式下,用户会误以为接收机已经成功执行指令,但是实际上接收机并没有收到指令开始执行,有时候这样做会导致很严重的安全问题。
在2015年的黑客大会上,Samy Kamkar就通过阻塞攻击的方法干扰汽车钥匙和汽车之间的通信信道,使汽车钥匙的正确信号在经过干扰后产生畸变。当汽车接收到信号时,会发现信号错误,从而不会对当前滚动码进行改变。展示中,同时使用一台射频信号接收设备录制汽车钥匙的正确信号,关闭阻塞信号的发送设备,然后发送完整录制的汽车钥匙射频信号,将阻塞攻击和重放攻击结合起来,成功地完成了对车辆车门和车库自动门的攻击。敲响了汽车和车库安全的警钟。
不过可以放心的一点是这种阻塞+重放攻击的手段最管用的(效果最显著的)是那种开、关指令相同的老式车型,现在的车钥匙就算内部没有滚动码机制也大都是开、关指令不同。更多的就是阻塞,阻塞关门命令就好。
3 中继攻击
中继攻击——这种攻击方式是通过其他无线通讯设备、手机网络或者其他延长信息传递的距离的手段实现。在这种攻击方式中,攻击者首先需要在发送机周围设置射频信号的录制设备完成射频信号的录制,再利用一个可支持远距离通信的设备将录制下来的信号发送给另外一个远距离设备,该设备会将信号还原为录制设备录制的射频信号,然后通过射频信号发送的方式将录制的信号发送给接收机使其执行相应的指令。
在这种攻击方式中,攻击者通过额外的传输设备延长了发送机和接收机之间的距离,从而使用户在不知不觉的情况下,达到远程控制接收机的目的。但是这种攻击方式十分耗时耗力,同时攻击方式也很复杂,技术门槛高,成本高且攻击者需要接触到用户的发送机,攻击实施的基础条件十分苛刻。不过和重放攻击类似,攻击者不需要了解传输中数据包的准确含义,仅仅只需要对信号进行录制发送即可,除此之外攻击范围也不受限制。
4 前向预测攻击
与前面的攻击方式不同,前向预测攻击需要了解射频通信过程中数据的具体含义,同时对下一次通信的内容进行预测,然后伪造数据去骗取接收机的信任达到攻击的目的。这种攻击方式主要针对的是序列码机制,当用户的射频通信中使用了序列码之后,重放攻击会因为序列码不合法而无效化。但是在前向预测攻击中,攻击者通过分析序列码的结构和产生方式,可以分析出下一个序列码的数值,此时攻击者只需要将这个序列码和载荷数据按照格式进行拼接发送,就可以达到攻击的目的。序列码的产生规则如果过于脆弱,那么极其容易遭受到前向预测攻击。
5 字典攻击(很少)
与前向预测攻击相同,字典攻击也是针对序列码机制而产生的一种攻击方式。并且字典攻击又和重放攻击相类似,需要录制发送机和接收机之间的射频通信数据。不同的是,字典攻击需要录制大量的数据,然后将这些数据存储在一个字典中。当获取到足够的数据时,攻击者会将这些数据通过射频信号发送设备不断地发送给接收机,然后根据接收机的状态进行判断,如果接收机对字典中的某一个数据进行了响应,那么就可以找到当前有效的序列码,从而进行相应的攻击。
因为攻击者始终可以通过无线射频信号的录制和发送找到当前的序列码,所以对于序列码个数有限的安全机制来说字典攻击的危害极大。但是字典攻击的缺陷也在于此,攻击者在实施攻击的时候需要不断地录制射频信号并且存储这些信号,最后还要不断发送录制好的射频信号。字典攻击的攻击实施时间很长、成本很高,但是字典攻击的成功概率很大,所以攻击者经常将其作为最后的攻击手段。
3.6 中间人攻击
中间人攻击是所有攻击方式中最难以防范的一种,同时也是实施成本和实施技术要求最高的一种,需要综合运用大量的攻击手段。在发送机发送射频信息的时候,攻击者会使用阻塞攻击使用户的接收机无法收到正确的消息,攻击者同时会去截获射频通信的消息,分析消息的中各项数据的含义和作用,然后再篡改消息中的内容,关闭阻塞攻击后再将修改后的消息发送给接收机执行。
中间人攻击的实施相比其他攻击方式难度更大,但是中间人攻击对于射频信息的传递来说也更难防范。对于明文传递消息的设备,中间人攻击可以轻易地篡改消息中的数据;而对于密文传递消息的设备,如果加密手段被破解,那么安全机制在中间人攻击面前也形同虚设。目前,中间人攻击已经逐渐成为针对射频通信甚至所有通信方式的主要攻击手段。
防范
对当前现状和研究可以发现(两种主要针对射频点对点通信的攻击方式),这两种攻击方式都非常简单同时易于实施,而且攻击成本和技术要求低,仅仅依靠一台价格低廉的无线信号录制和发送设备就可以完成,然而攻击者所造成的危害却不能低估。为此,我简要讲一讲业内的一般抵御以及我自己感觉靠谱的手段。
重放防御
- 序列码
针对重放攻击最有效的措施就是在所发送的消息中附加上序列码,这样可以使每一次发送的消息都有所不同,接收机首先会去验证所接收消息中序列码的正确性,而不是简单地直接执行所接收消息中的指令,这样就可以有效地防范重放攻击。但采用序列码机制需要确保序列码在发射机和接收机之间是相互可验证的,所以需要设计一定序列码产生规则确保接收机和发送机的序列码能够同时正常递变,防止接收机不能正常地接收消息。 - 滚动码
保证滚动码不会被便利所有可能出来,有的滚动码只有36种可能性,攻击者只要有足够的时间便可以攻破。最好滚动码有更多的可能行,同时把加密密钥“做死”在加密芯片中,这种情况下攻击者想单纯通过信号搞定车就很困难了。
阻塞攻击防御
- 应答机制
对于阻塞攻击而言,可以在接收机和发送机之间的通讯过程中进行防范。当接收机正确接收到来自发送机的数据时,会主动向发送机返回一个应答数据包,通知发送机数据已经准确地到达接收机并且被安全地的执行。这样的设计就可以防止阻塞攻击干扰系统运行,同时防止发送机认为指令已经执行,而接收机却没有正常执行的情况出现。
前向预测攻击、字典攻击防御
- 加冗余
仅仅采用序列码的安全机制同样也是不够安全的。简单的序列码产生方式容易遭受前向预测攻击,而有限的序列码数量对于字典攻击而言就十分脆弱。为了抵御这两种攻击手段,首先需要保证序列码的产生规则不容易被破解,同时序列码在发送机和接收机之间产生的大量通讯消息中,能够做到不被重复。这样的设计理念就需要序列码的数量足够大,但同时还需要确保产生规则不会发生混乱,也不能过于简单,这样产生出的序列码才拥有足够大的强度同时防范重放攻击、前向预测攻击和字典攻击。
中间人攻击防御
- 内容加密
对于一个可靠的点对点安全通信机制而言,针对中间人攻击需要采取相应的安全措施。中间人攻击主要通过截获发送机和接收机之间正常通信的数据包,并且对数据包中的内容进行了篡改,然后发送给接收机。分析攻击方式后提出防范中间人攻击的基本思想:首先需要对数据包进行一定的加密,防止攻击者可以直接获取到通信的相关内容。但仅仅加密是不够的,如果加密措施被破解,那么攻击者依然可以发动中间人攻击,所以还需要其他措施来对数据包中的内容进行验证。 - 校验码
在射频通信的过程中,为了防范重放攻击已经使用了序列码机制,基于减少数据传输量的原则以及安全性的考虑,可以将序列码和发送数据结合起来,使得接收机可以通过序列码来验证数据内容是否遭受到篡改。这样的设计就可以有效地中间人攻击进行防范,同时节约接收机和发送机传输的能量和计算资源。
中继攻击防御
中继攻击说到本质上就是前面几个攻击的远距离实现版本,而正是这个远距离给了我们防御者机会。想办法阻断这个远距离,以其人之道还治其人之身。
这篇“再探”文章中可能没有很多例子、代码,只有我做的一个例子和演示视频,但较为详细地讲述了当下射频安全方向常见的内容、思想,还是有点用的至少指明了一些研究方向。望各位师傅稍安勿躁,文章中承诺会讲的可以在下定当尽快搞出,下一篇文章一定是实际落地的技术。
- 本文作者: Mori
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/866
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!