这是概念验证的Wayland键盘记录程序,我写这本书的目的是演示缺乏沙箱(chroot,cgroups ...)和强制访问控制(SELinux)的典型Linux桌面的基本不安全性。键盘记录程序只需要安装用户级访问权限即可。安装非常简单:只需将库放在主文件夹中的某个位置,然后从〜/ .profile(或也许〜/ .bashrc)LD_PRELOAD即可,如下所示:
这仅仅是概念上的证明,它只会将按键/释放事件打印到stderr(您的终端)上。使按键记录程序不可见并将按键操作写入文件相对容易。
我花了75分钟编写了这个键盘记录程序,而没有任何对Wayland协议的真正了解。这应该使您了解编写此代码有多容易。它基于ElfHacks(由Pyry Haulos编写,与该项目无关)和SSR-GLInject的一部分(由我编写,也无关)。
有很多方法可以破坏此键盘记录器-它不是设计成健壮的,因为这并不是目标。但是,为了以任何可能的方式打破它,我也可以添加对策。应用程序可以使用' getenv'检查是否设置了LD_PRELOAD,但是我可以覆盖' getenv'隐藏该变量的存在。应用程序可以扫描/ proc文件系统,但是我可以再次覆盖相关的系统功能以将其隐藏。我认为这显然不是一个安全的系统-安全的系统将完全阻止攻击,而不是在发生攻击后立即尝试进行检测。存在这样的安全机制:即使是一些基本的SELinux规则也可以完全消除此安全问题。
我要说明的重点是,我们应该专注于真正有效的真实安全机制,而不是创建只会给人一种错误的安全感(并烦扰用户)而又不会真正使台式机更加安全的新机制。
该程序绝不是对Wayland项目的批评。它只是说明创建一个安全的桌面不仅需要几个服务器端限制。
顺便说一下,这种固有的弱点根本不是Linux所特有的。类似的技术也将在Windows和Mac以及基本上没有沙箱应用程序的任何平台上起作用。