由于个人子网的性质(外部强化,内部信任/天真),我正在我的网络内启动一个项目(由带有 OpenVPN 公共/本地流量加密的 Ubuntu 15.04 桌面路由),其中我的目标是完全偏执和可能过度的安全性,以防止内部漏洞(安装在 LAN 客户端感染子网的恶意软件)。
我即将参与的无数其他项目之一是“智能键盘”。我的目标是防止某些基于 HID 的攻击,例如硬件键盘记录器和 BadUSB 漏洞。为了做到这一点,我正在修改标准键盘,拆除驱动板并安装微控制器(例如 Teensy)以读取输入电压,使用 rsa/ecdsa 或其他非对称密码对计算机进行身份验证,并使用与计算机同步的滚动码以 AES 加密按键,以避免重放攻击的可能性。
硬件方面似乎很简单,数据的加密和解密也很简单。我需要帮助的部分是缺乏对 HID 设备如何与系统(即 Ubuntu)通信的理解(标准 HID 设备可以读取哪种数据?),以及如何附加进程来处理数据解密。
我读过一些 /etc/udev/ 的内容,似乎脚本的执行通常不适合这类长时间运行的应用程序。我该如何执行键盘的“处理程序”,该脚本是否只接收数据,或者它是否只是读取 stdin,因为它是用户空间脚本,而 HID 设备由内核处理?
最后,我是否应该为 Teensy 打开一个“通道”,而不是将其作为 HID 设备来处理?我不愿意这样做,因为这会使键盘在启动时无法使用。
我不一定在寻找直接的答案,但可能是学习资源。我只是需要有人给我指明正确的方向。
问候,
Lisenby
答案1
据我所知,我不是专家,最好的方法是为你的新加密键盘制作一个新的驱动程序(内核模块)。
这是一个很小且易于理解的项目。
全名:Linux Microdia 键盘芯片组驱动程序
简称:aziokbd
作者:Colin Svingen (Swoogan)
项目主页:https://bitbucket.org/Swoogan/aziokbd它使用 DKMS,因此不需要重建 Linux 内核。
我缺乏有关加密工具的知识,所以我无法帮助处理加密数据流。
udev
简而言之,它是 的守护进程的一部分systemd
。它有助于进行动态设置/配置,并在条件匹配时(无论是创建、更改或从内核树中删除设备节点)运行自定义脚本。(/sys
是显示内核中当前相同树的虚拟 FS)。它会对您有所帮助,但这不是您想要的。
另一个选项是使用用户空间驱动程序/守护程序。在这种情况下,您必须使用 访问 USB 设备
libusb
。与xboxdrv
(xbox 控制器驱动程序)和xsane
(扫描仪工具)相同的方式。