小时候,我是个逃课去黑网吧的小学生。传说网吧老板,会在电脑背后的USB接口上安装一个小玩意,记录小学生们的网游账号。现在我知道了,那是个硬件的键盘记录器。
硬件键盘记录器
和软件的键盘记录器一样,它会记录下用户在键盘上的所有输入,比如账号密码、网址、手机号等等。
硬件版本的独特之处在于:即使现在各种防御措施,已经能防御大多数软件键盘记录器,但是基于硬件的键盘记录器,对于操作系统来说是无感知的,毕竟它就是一个标准的输入设备。识别和防御也就变得十分困难了。
图中有一个设备是键盘记录器,你能找到吗?
本文我们来讲讲硬件键盘记录器的原理。并从PCB和固件起,做一个可以通过Wi-Fi远程控制的硬件键盘记录器。
二、原理硬件键盘记录器在国内外的电商上有很多成品,就是价格略贵。开源设计有spacehuhn的wifi_keylogger(https://github.com/spacehuhn/wifi_keylogger),Freebuf上的@anymous的作品(https://www.freebuf.com/geek/58895.html)等等。
我们以wifi_keylogger为例,它是一个基于Arduino的键盘记录器。带有Wi-Fi功能,可以存储记录到的键盘输入,并可以通过其发出的Wi-Fi网络查看记录数据
wifi_keylogger
不过,可能您会觉得它不太实用:它太大了,很难安装在电脑后面。
究其原因,是因为USB键盘使用了HID协议。对于Arduino来说,它的速度太快,没办法读取。所以除了Arduino,还得加上其它用于读取HID协议的设备。
wifi_keylogger的解决方法是使用了一个USB Host Shield模块(图中白色的部分),@anymous的方法是用转接器将USB键盘转成PS2键盘,分析PS2的协议。
这些解决方案有两个缺点:一个是大,再者是这些方案会对键盘造成一些影响,比如多媒体键用不了、不同键盘布局兼容性有问题等等。
要做到更紧凑和兼容的设计,就得换用其它芯片,并且重新设计PCB了。最好是能将HID协议转换、键盘数据解析记录、Wi-Fi功能做在一块板上,而且体积较为小巧。
本文就设计制作了这样的一个键盘记录器。
三、设计本文中的键盘记录器,实现了USB键盘输入的分析和记录,并提供Wi-Fi功能。本章我们具体分析各部分的设计。
Wi-Fi部分在渗透场景下,植入了硬件设备,过几天又回来取,可能会使您锒铛入狱。如果键盘记录器带有Wi-Fi功能,就能在远程读取键盘记录了,甚至可以配置它连接到目标办公室的Wi-Fi,直接把键盘记录传回攻击者的控制服务器。
通过Wi-Fi读取记录
Wi-Fi部分,我们使用著名的ESP8266芯片——廉价而功能强大的Wi-Fi SOC,广泛应用在物联网领域。本文中使用了ESP8266-07S模块,它非常小,而且引出了常用的引脚,可以满足本文所需。
ESP8266-07S模块
键盘记录部分首先需要CH9350芯片,用于将HID协议转换为UART协议,以便分析记录键盘数据。后端的数据分析和记录在ESP8266上实现。
CH9350
CH9350是南京沁恒微公司生产的USB键鼠转串口通讯控制芯片,它可以将HID协议和UART协议互相转换,而且完成度很高,开发简单。
我们将要使用CH9350将USB键盘的HID协议转为UART协议,使用ESP8266解析和记录键盘输入内容,并且提供WI-FI访问功能。
电路整体设计整个电路的原理图如图所示: