设置保护gnome-terminal免受密钥记录


15

看起来很容易记录同一用户的所有进程的击键。基本的键盘记录程序是“ xinput”。

xinput test-xi2

该命令生成所有按键记录。不幸的是,这包括gnome-terminal中的密码。谷歌搜索建议抓住键盘可能会阻止其他窗口捕获按键。

有没有一种方法可以防止XI2登录gnome-terminal?还是有一个具有此功能的X终端?


一个解决方案吗?
RaduRădeanu2013年

Answers:


13

这是不可能的,因为传递给X服务器的任何击键都可用于xinput /任意程序。(实际上,这是设计的一部分)。诸如Wayland和Mir的新显示服务器正在解决X中的此类安全问题。唯一真正的解决方案是使用Wayland或Mir代替X。博客文章详细介绍了此问题。


因此,输入gksu输入密码也输入xinput吗?
yanychar

1
@yanychar yup,实际上我通过此博客文章发现了这种按键记录方法:theinvisiblethings.blogspot.in/2011/04/…(即使我第一次阅读该博客文章也感到惊讶)
Ramchandra Apte

2
X11实际上有,您可以使用,以防止程序访问“坏”扩展不可信模式- x.org/wiki/Development/Documentation/Security
米哈尔杰林斯基

-1

并不是的。即使您设法以某种方式在X内抓取键盘(我也不知道这样做是否可行,我对此表示怀疑),以root身份运行的keylogger实用程序将始终可以访问键盘。


4
上面的命令在没有root特权的情况下抓住X中的键盘。因此,将键盘记录程序安装到ubuntu桌面很简单。问题是如何避免这种情况。
yanychar 2013年

-3

就像其他人在这里说的那样,仅当您限制标准用户执行任何按键记录程序或停止/暂停任何按键记录程序时,才可能仅保护gnome-terminal或其他终端等程序免受按键记录。

接下来,我将向您展示如何在xinput执行命令的情况下执行这些操作,但是相同的方法可用于任何其他按键记录器。如果按键记录器使用xinput命令,则只要在上应用该方法,就不必在其上应用该方法xinput

1.限制标准用户使用xinput命令

您可以限制标准用户使用xinput命令使用以下命令:

sudo chmod go-x /usr/bin/xinput

2.限制标准用户使用xinputtest-xi2参数的命令

您可以通过为此命令编写包装来限制标准用户使用xinputtest-xi2参数的命令。为此,请进入终端并按照以下说明进行操作:

  • 获取root特权:

    sudo -i
    
  • xinput文件移动到不在任何用户的PATH中的另一个目录中(例如/opt):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • 在以下xinput命令中为命令创建包装器/usr/bin

    gedit /usr/bin/xinput
    

    在其中添加以下脚本:

    #!/bin/bash
    if [ "$@" != "${@/test-xi2/}" -a "$(whoami)" != "root" ]; then
        echo "`basename $0` $@: Permission denied"
    else
        /new/path/to/xinput $@
    fi
    

    保存文件并关闭它。

  • 使新包装器可执行:

    chmod +x /usr/bin/xinput
    

尽管第一种方法是安全的,但是使用第二种方法,如果用户xinput知道其新位置,则仍可以通过直接致电原件来规避它。

3.停止/暂停任何xinput进程

您可以先停止或暂停任何xinput过程,然后再输入密码或不想登录的其他任何内容。为此,请在~/.bashrc文件末尾添加以下bash函数:

processof () {
    xinput_pids=" $(pidof $1) "
    if [ "$xinput_pids" = "  " ]; then
        echo "Nothing to stop/pause/continue. $1: no such process!"
        return
    fi
    for pid in $xinput_pids; do
        case $2 in
        "stop") 
            kill $pid
            echo "$1: stopped"
            ;;
        "pause")
            kill -stop $pid
            echo "$1: paused"   
            ;;
        "continue")
            kill -cont $pid
            echo "$1: continue"
            ;;
        *)
            echo "$1 is runnig"
            ;;
        esac
    done
}

现在,在重新打开终端之后,可以随时使用此功能:

  • 停止/杀死所有xinput进程:

    processof xinput stop
    
  • 暂停所有xinput进程:

    processof xinput pause
    
  • 恢复所有xinput过程:

    processof xinput continue
    

实际上,使用此功能,您可以在执行某项操作(例如输入密码)之前停止/暂停您想要的任何进程:

processof [process_name] [stop|pause|continue]

如果您不知道如何检测如何检测系统上的活动键盘记录程序,请参阅:

这些方法可能不是最好的解决方案,但是我希望给您一个关于您可以做什么的想法。


5
xinput只是键盘记录程序的一个示例。问题是关于保护来自每个可能的键盘记录器的输入。
yanychar

5
任何程序都可以通过套接字和键盘记录连接到X服务器,甚至不需要键盘记录程序使用外部程序。
Ramchandra Apte

3
@RaduRădeanu您的解决方案无效且无用。xinput甚至都不是SUID(-rwxr-xr-x 1 root root 48504 2012年8月15日/ usr / bin / xinput)
Ramchandra Apte

1
@RaduRădeanu因为您不需要xinput到键盘记录。(它不需要外部命令,也不需要SUID就是恶意程序),您的解决方案将只允许一个人控制xinput的执行
Ramchandra Apte

3
证明其无效的最基本示例:从USB记忆棒复制(ubuntu)xinput的普通版本,从Web下载或通过电子邮件将其发送给自己,然后在主文件夹中运行。与使用不受限制的/ usr / bin / xinput相同的效果。
allo
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.