我应该如何调试错误“无法抓住键盘。恶意客户端可能正在窃听您的会话。”


14

我正在运行安装超过6个月的Ubuntu 14.04安装。大约一周前,我开始收到错误消息:

Could not grab keyboard. A malicious client may be eavesdropping on your session.

我离开了很长一段时间(通常是一整夜)之后,回到计算机上时才看到它。几次它阻止了屏幕在设置超时后锁定(我已经开始主动锁定它,然后再离开)。

我使用的USB键盘(Kinesis Advantage)直接连接到主板上的USB端口。我正在使用无线ELECOM鼠标。

我要在离开前尝试断开鼠标加密狗的连接。我还能如何识别是否有恶意客户端跟踪我的按键或这是连接问题?


1
如果您认为键盘记录在案,请不要发出超指令!!!相反,引导干净的实时介质,然后从那里开始。
j0h 2016年

Answers:


13

这是解决您的奥秘的方法。目标是通过使用标准的Ubuntu实用程序来深入研究系统中任何进程的细节,从而教用户“如何钓鱼”。

步骤1(主要是出于好奇):确定哪个程序给您此错误:

# -- You may need to search under more dirs, YMMV
#    List files (incl. binaries) which contain the warning string

$ sudo grep -ral 'malicious client may be eavesdropping' /usr /bin /lib
/usr/lib/openssh/gnome-ssh-askpass

在我的环境中,唯一包含此警告字符串二进制文件的程序是gnome-ssh-askpass。我可以搜索此特定程序中是否存在错误,甚至可以下载其源代码apt-get source ssh-askpass-gnome(请注意程序包名称与程序名称不同)以进行进一步检查。

但是,我怀疑的根本原因不是gnome-ssh-askpass。由于gnome-ssh-askpass要求您输入密码,它的开发人员只是在未能抓住键盘时采取了谨慎的态度,假设是最坏的情况,并使消息听起来过于偏执。但是请注意,偶然将密码或密码输入某些随机的网站对话框可能不是一个好主意,因此从这种意义上说,gnome-ssh-askpass开发人员进行了正确的选择。

最近,越来越多的网站开始从事显示弹出窗口,使弹出对话框之外的其他所有内容淡化以及积极吸引焦点的实践。这可能是gnome-ssh-askpass未能抓住键盘的根本原因。如果您的浏览器是在此类网站上打开的,则关闭浏览器或离开攻击性网站可能会有所帮助。如果这是原因,则您可能对桌面设置感兴趣,该设置阻止单个进程获取完整的(完整的桌面)焦点。例如,在KDE中,可以在(系统设置->窗口行为->焦点->防止焦点窃取)下找到此设置。如果您真的很偏执,建议您将其设置为HighExtreme。当然,这也可能阻止gnome-ssh-askpass本身,或者更准确地说是:抓住X焦点。

步骤2:确定可疑过程:

知道在Unix中,设备就像文件uder一样出现/dev,下一个问题是什么设备代表文件系统层次结构中的“键盘”。我们可以lsof为此使用(列出打开的文件)实用程序。

# look for processes holding devices open, filter out some common ones:
$ sudo lsof | grep /dev | grep -vE '/(null|urandom|zero)'

请注意,在典型的桌面环境中,大多数打开设备的进程正在打开设备/dev/pts/<N>伪tty)。这些是感兴趣的“设备”。

这里发生的事情的一些背景:

在典型的Linux图形桌面中,进程不会直接与键盘对话。相反,X程序(Xorg)通过设备控制所有键盘事件/dev/input/event<N>X使用事件处理程序(evdev)来处理键盘事件。您还可以通过查看Xlog:提及/var/log/Xorg.0.log位置keyboard来验证这一点。

键盘事件X通过打开的进程标准输入随时从事件处理程序转发到具有鼠标指针焦点的进程/dev/pts/<N>。严格来说:进程实际上并没有“抓住键盘”,而是由握住键盘X,该进程仅具有(或抓住)“焦点”,或者可以将注意力转移到键盘上,X从而X可以通过打开的stdin文件描述符将键盘事件转发给它。/dev/pts/<N>

通过X evdev多路复用的键盘事件图

步骤#3:在任何特定时间Xorg都关注哪个进程?

如何确定在特定时间关注哪个过程?这是一个askubuntu问题,回答这个问题:

找出鼠标下的应用程序

答案的摘要是在终端中运行以下脚本,同时使用鼠标进行导航:

#!/bin/bash
# Print the process tree of the window currently in focus.
# prereqs:
#   sudo apt-get install xdotool psmisc

while true; do
   pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")
   sleep 2
done

步骤#4:深入研究流程活动

一旦确定了可疑过程,最后一步就是调查此单个过程。为此,您可以转向Linux /proc文件系统(man 5 proc)。

您可能想知道有关流程的几乎所有内容/proc。实际上,诸如lsof(列出打开的文件)之类的程序,检查进程状态的调试器以及诸如ps或之类的进程列表实用程序top都依赖于/proc由内核填充的程序来获取数据。

使用,proc您可以找到进程可执行程序在磁盘上的位置(例如,标准系统目录之外的任何程序,尤其是试图将其隐藏在“不要关注我”这种名称下的人),然后使用调试器或系统调用跟踪程序,您可以检查它们在系统调用级别上到底在做什么(即使您没有源代码)。

步骤2和步骤3应该为您提供所有PID可能正在读取键盘的进程ID 。对于这些PIDS中的每一个(我们都将其表示为$pid),您可以:

将$ pid映射到其完整的命令行:

cat /proc/$pid/cmdline

将$ pid映射到其磁盘可执行文件:

ls -l /proc/$pid/exe

将$ pid映射到其当前工作目录:

ls -l /proc/$pid/cwd

将$ pid映射到其原始环境

cat /proc/$pid/environ | tr '\000' '\012'

实时跟踪$ pid(及其子进程)系统调用活动:

strace -f -p $pid

(更多内容:请参见man 5 proc

如果您看到一个陌生的过程,它通过将每个键存储到文件中(通过write)或通过网络将其发送到via 来对每个按键做出反应sendto,则可能是您发现了一个键盘嗅探器。

您还可以检查哪些进程打开了(tcp + udp)网络端点:

# See 'man netstat' for details on all options used below
$ sudo netstat -tunapee

底线:

造成此错误的最可能原因不是恶意软件,而是试图同时获得键盘控制的多个进程。两者gnome-ssh-askpass之一(打印错误的一个)。另一个可能是网站上的打开浏览器,带有激进的获取焦点对话框。

即使您实际上确实安装了一些恶意软件的机会很少,但好消息是,由于您使用的是Linux,因此所有过程对于您进行研究和检查都是透明的。恶意软件很难真正对您隐藏,或者阻止您使用上述技术轻松找到它,杀死其进程并删除其所有文件,这非常困难。


在第2步中,我看不到有多个进程持有/dev/pts/7(只有3个唯一的pid值)。滚动浏览结果,似乎最搁置的设备/dev/pts/15虽然有些在握1, 3, 12, 16, 17, 21, 22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34。键盘总是7吗?我如何确定我的键盘是哪个?
史蒂文·C·豪威尔

可以是上述任何一种。物理键盘的设备是Xorg的实际打开(/usr/bin/X)作为/dev/input/eventN在这里你可以找到你N通过看串evdev/var/log/Xorg.0.log。然后,Xorg将每个键盘单击“前进”到该特定时刻具有鼠标指针“焦点”的单个进程。当我运行时,ssh-askpass我看到它已经/dev/pts/3打开,但是在任何环境中它都可以是任何伪tty设备。因此,您中的任何一个都/dev/pts/N可能与此处相关。
arielf

@ stvn66我添加了一个小脚本,该脚本反复告诉您哪个进程具有“焦点”(请参见askubuntu上的相关问题)。HTH。
arielf

在运行脚本以识别哪些进程在握住鼠标后,如何识别可疑的进程?似乎是我选择的任何应用程序,例如,从运行脚本的终端启动,在{firefox}单击firefox时切换到,{thunderbird}在选择雷鸟时再次切换到。没有什么比预期的要突出。也许这是您的底线:问题不是来自抓住键盘的问题。我希望确定此通知没有意义或可以消除它。
史蒂文·霍维尔

@ stvn66我听到了您的声音:)您无法及时回溯并弄清最初关注的过程。从那时起,该过程可能已经退出。要真正肯定的是,你需要能够重现。我最好的猜测是您浏览器(firefox)在访问带有引人注意的弹出窗口的网站时。除非您定期从可疑(非规范)来源下载并安装软件,否则我非常怀疑您是否在Ubuntu上意外安装了键盘嗅探器。有点偏执是件好事,但是没有必要过度加汗。
arielf

1

我的问题是由于两个并发gnome-ssh-askpass窗口。我有两个通过SSH到同一服务器的rsync作业,并且都尝试询问SSH证书的密码。将它们分组(和链接)可以为我解决!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.