X权限绕过

时间:2009-08-19 11:26:26

标签: linux security xserver

我正在尝试编写一个作为守护进程和监视器运行的应用程序 运行X会话。现在我正在努力寻找文件 关于X安全模型。具体来说,我正在尝试 连接到我的守护程序进程中运行的X显示。调用 XOpenDisplay(dispName)不起作用,我猜是因为我的过程 没有权限连接到此显示器。过了一会儿 研究,看起来我需要用xauth做点什么。

在我的测试环境中,X服务器的启动方式如下:

/usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-QBEVDj

该文件包含一个条目,如下所示:

#ffff##:  MIT-MAGIC-COOKIE-1  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

通过使用相同的十六进制密钥向~/.Xauthority添加条目,我可以 连接到X服务器。但是,这很难,因为我需要 以编程方式查找X服务器正在使用的auth文件( 我想它的位置会从发行版改为发行版,而且 可能从一个启动到下一个),然后查询它,然后写一个新的 auth文件。如果进程作为守护程序运行,则它可能没有 主目录,那我怎么知道在哪里写新条目?

理想情况下,我正在寻找的是一种绕过需要的方法 ~/.Xauthority中的xauth cookie,甚至可以知道cookie的内容 所有。我意识到这不太可能 - 安全模型有什么用处 如果它很容易被绕过?但我希望这份名单上有人可能有 一些好主意。有没有办法指定我的流程 特权,因此应自动获得任何权限 在本地机器上显示?

2 个答案:

答案 0 :(得分:1)

如果指定XAUTHORITY环境变量,则不必使用主目录,该变量指定.Xauthority文件的位置。阅读xauth手册页。

但是,一般来说,由于你提到的原因,很难找到auth文件;此外,这种“钓鱼认证令牌”方法仅适用于本地展示。

关于让root(或其他一些用户)不知不觉地连接到X服务器,你可能需要修改源代码来执行此操作,并且必须使用类似{{1}的内容获取连接用户的uid / gid(这只适用于Unix域套接字,无论如何我认为它是用于本地连接的类型)。

答案 1 :(得分:1)

Xauth不是X

的唯一安全机制

还有另一个(不太安全)只执行基于IP的身份验证 (见xhost)。

因此,如果您将X服务器切换到这种不太安全的模式,它将信任所有连接 来自定义的IP集。

这样您根本不需要处理Xauthority。