在用户使用计算机时,键盘是信息输入的主要媒介,键盘输入包含大量的私人机密信息,包括帐号密码等,所以键盘侦听被各种攻击者所大量采用,成为一种普遍但是破坏力强大的攻击方式。键盘侦听主要通过键盘记录器来实现,所以大部分杀毒软件都把键盘记录器识别为恶意文件,各种高安全要求的网站例如网上银行等,也都要安全ActiveX安全模块来抵御键盘记录器的威胁。
和传统的有线键盘不同,在使用无线键盘时,用户信息不再直接输入到用户的计算机中,而是先在键盘内将用户的输入信息转化为相应的射频消息,然后将消息发送给适配器。适配器在接收到消息之后,会将消息按照规则转化为用户的输入递交给计算机进行处理。在无线键盘的使用过程中,可以发现在键盘和适配器的射频通讯如果被攻击者进行侦听,就会导致用户输入的泄露。与传统的键盘侦听手段不同,直接监听射频消息的攻击过程十分隐秘,用户完全无法察觉。
实验准备
在对无线键盘侦听的过程中,需要使用接收装置接收射频消息,这里选择使用的是 Hackrf来对用户输入进行侦听,实验平台为 kali Linux 。
在上一次对无线键盘研究中,已经确定无线键盘和适配器的通信频率为 2.4GHz,所以我们需要对这个频段对射频消息进行监听。在上一次使用重放攻击对用户输入进行干扰的过程中,我们已经获得了一些按键的射频消息,我们在上次的基础上展开。
实验过程
信号录制完成之后,需要对信号进行观察。在对无线电信号的研究中,我们发现Audicty作为一款音频处理软件,在处理无线电信号时也有十分优秀的效果,该软件是免费的,同时也有绿色版本,可供使用。这里首先使用Audicty导入录制好的按键射频信息。
选择导入的文件之后,会出现如下的界面,让用户设置文件导入的格式。由于audicity本身是一个音频处理软件,所以需要对采样率,编码格式,声道等信息进行重新设置。
成功对导入格式进行设置之后,audicity就开始导入数据了,导入数据的时间会根据计算机的性能和文件的大小有所变化,所以可能需要耐心等待,但一般来说正确设置导入格式之后,文件导入时间不会超过1分钟。
成功导入数据之后如下图所示,可以观察到信号在图中的具体变化情况,从图中可以观察到一系列的按键信号(红色圈出的信号)。
放大来看就可以看到具体的编码了。具体的编码如下图所示,从图中可以发现在正常的适配器的维持信号中出现了其他信号(红色圈出的信号),经过分析可以确认这些是按键的信号:
确定按键信号。由于在上一次实验中我们可以使用重放攻击直接对无线键盘进行攻击,所以可以确认,在无线键盘和适配器通讯过程中,没有使用到序列码等安全机制,所以进行以下操作。首先我们使用inspectrum进行对信号的处理。在监听信号之前,我们首先需要获取到不同按键的基准信号作为对原始信号的参考标准,同时对基准信号的分析,也可以找出无线键盘的通信协议的格式。下面例举一个按键B信号的处理过程。
在对基准信号进行处理的时候,可以使用inspectrum。Inspectrum是一个开源的无线电处理软件,可以用来对射频信号的分析,功能强大,可以在github上面找到。在kali上面可以使用下述方法安装:
sudo apt-get installqt5-defaultlibfftw3-dev cmake pkg-config
mkdir build
cd build
cmake ..
make
sudo make install
可以在终端中直接使用inspectrum命令打开inspectrum软件,如下图所示:
然后选择需要导入要处理的文件,如下所示:
导入成功之后,可以看到和audicity一样的信号图,不同的是在inspectrum上面信号的显示更加清晰。同时用不同的颜色标注出更多的信息,比如说信号集中的频率等。如下所示:
为了对信号的进一步分析,需要通过inspectrum的强大功能导出信号的振幅图。导出方式为在信号图上点击鼠标右键选择导出的无线电信号图即可。如下所示:
接下来是对导出的振幅图对信号进行处理。使用inspectrum软件的功能以等间隔的方式分隔振幅图:
使用inspectrum导出不同振幅数据,这些数据十分重要是后面处理的关键。振幅数据如下所示:
得到振幅数据之后,需要对振幅数据进行相应的处理转化为01码才能进行按键信息的分析。我们使用相应的脚本对信号进行转化。脚本如下所示:
#!/bin/python
fileread=open("w",'r')
filewrite=open("w1",'w+')
s=fileread.read()
fileread.close()
i=0
rows=s.split(',')
for row in rows:
#print row
if(row==""):
print(num)
i=i+1
ifnum>-0.99:
filewrite.write("1")
else:
filewrite.write("0")
filewrite.close()
print str(i)+"data has been deal"
转化后的数据如下所示:
通过相同的方式获取同一个按键的多条数据之后,就可以获得了按键B的基准信号。我们对其他按键可以用相同的方法进行处理,简化起见,这里只处理了有限的基准信号,获得这些基准信号。就可以实施无线键盘的侦听攻击。
首先使用hackrf录制用户正常的按键信号,然后使用处理按键基准信号的方法,使用inspectrum处理用户的输入的射频数据,获取到用户输入的01序列,然后使用脚本将用户输入的01序列进行比对,比对成功之后,就可以确定用户按下的按键为那一个。由于射频信号接收的不稳定,即使同一个信号在接收到的时候也存在误差。所以在比对过程中需要设定可容忍出错的阈值,来减小接收误差带来的影响。但是这个阈值不能过大,防止出现按键的误判。所以在写判断脚本时,阈值的设置非常重要。成功设定阈值之后,就可以对按下的按键进行判断。在本次实验中只对字母按键进行了有限的测试。测试结果显示,按键侦听的成功概率大约在50%到70%之间。下面是对按键B的实验结果:
按键B判断正确:
按键B判断错误:
按键B判断正确:
威胁分析:
在研究中发现,目前已有不少针对无线键盘的窃听攻击,但是大多需要破解键盘和适配器之间的通讯协议。但是在本文的攻击方式中,直接针对无线电信号进行分析,对于没有使用序列码的无线键盘,信号本身不会存在变化,所以普通的加密手段没有作用。同时通过无线电侦听用户无线键盘输入的信息窃取方式十分隐蔽,不容易被发现,所以对用户的个人信息有很大的安全威胁。
安全建议:
对于无线键盘的生产厂商来说,直接分析无线电信号的攻击方式可以通过添加序列码来解决。使用了序列码之后,每一次按键按下的无线电信号都会有所不同,这回增加攻击者实施攻击的难度和成本。同时生产厂商还可以使用加密的手段来加强防御。在序列码的基础上添加加密手段之后,可以防止攻击者直接接触到序列码,通过大量数据分析出序列码的产生规则,进而伪造出正常的无线键盘数据,来欺骗适配器进行相应的操作。通过序列码和加密的手段,可以提高无线键盘的安全性,保证用户的数据安全。
对于普通用户而言,防御无线键盘攻击最根本的手段就是不使用无线键盘,这样可以彻底根绝射频信号泄漏用户输入的现象,可能这样的行为看上去有点因噎废食,但却是最根本的办法。其次在挑选无线键盘的时候,用户可以尽量选择大厂商的无线键盘,因为大厂商往往在无线键盘采用了相应的安全措施,可以保障无线键盘和适配器之间的通信安全需求。最后,在使用无线键盘的时候,尽量少输入关键的个人信息,防止攻击者的窥探,比如在输入密码的时候,尽量使用手机扫码登录的手段,这样不仅可以防止无线键盘泄漏用户密码,也可以防止电脑中恶意软件的窃听密码。
如果想要了解更多网络空间安全知识,请访问 网络安全通,或者搜索 SecTown 。