Wine程序的“ ptrace_scope”解决方法是什么,是否存在任何风险?


37

要在WINE中运行某些Windows程序,您需要以下解决方法:

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope

根据支持网站的说法,这是由于Ubuntu内核中的一个错误导致ptrace和WINE不能很好地配合使用。

使用上面的命令将ptrace设置为0,根据我所做的研究(不要问我哪些网站,我似乎有很多),ptrace与程序之间的交互有关。0设置比1更宽松。

我必须假设,Ubuntu希望ptrace = 1是有充分理由的,因此这使我回到了问题的简短形式。

设置ptrace = 0是否涉及任何风险。安全性较低?调试问题?我没有想到的任何其他人???

PS,对于任何想知道错误原因的人,Windows程序将完全无法打开,在系统监视器中,您会看到许多试图打开该程序的实例,然后它们最终都会退出,并且如果您运行该程序,对于终端,您将收到一条错误消息,提示您已达到最大程序实例数。


这是从PlayOnLinux弹出错误消息链接的描述,该消息会中止.Net 4.5的安装,除非ptrace_scope设置为0:playonlinux.com/en/…–
pabouk

Answers:


41

简短的答案:尚无实际危险,但请继续阅读以寻求更好的方法...


这是什么ptrace的事情呢?

这是由于Ubuntu内核中的错误导致ptrace和WINE不能很好地配合使用。

  • 不,ptrace保护是故意的内核安全措施,最早是在Ubuntu 10.10左右引入的。这不是错误,因此也不会被“修复”。

  • 简单来说,除非第二个进程(子进程)由第一个进程(父进程)启动,否则默认ptrace_scope值将1阻止一个进程检查和修改另一个进程。

  • 这可能会导致Wine下的某些程序出现问题,因为wineserver这些程序可以为这些程序提供“ Windows服务”。

什么是设置的风险ptrace_scope0

  • 这将恢复以前的行为,即使没有父子关系,一个进程也可以“跟踪”另一个进程。

  • 从理论上讲,一种恶意软件可以利用它来损害您/您的计算机。例如,它可以连接到Firefox并记录您的所有URL /密码等。实际上,除非您从随机站点等盲目地安装二进制文件,否则这是极不可能的。

  • 至于调试得好,0设置在所需事实上gdbstrace等等,除非你有更高的权限(须藤)运行它们附着于非儿童。

解决方法有什么问题?

  • 该变通方法有些问题,因为ptrace_scope它是全局值,并且将其设置0为时,系统上的所有进程均不受非子级限制。
  • 如果使用解决方法,请将其放入一个简单的bash脚本中,以启用它,运行Windows程序,然后在退出时禁用(设置为1)。
    • 不要ptrace_scope像论坛帖子所建议的那样使世界可写(666)-这是一个巨大的安全风险,因为现在任何进程都可以随意更改它!

有更好的解决方案吗?

  • 一个更好的解决方案,它是更安全的,不需要反复修改ptrace_scope授予Wineserver ptrace的能力

    • 在终端中:

      须藤apt-get install libcap2-bin 
      须藤setcap cap_sys_ptrace = eip / usr / bin / wineserver
      须藤setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • 这使wineserverwine-preloader二进制文件免于非子级ptrace限制,并允许它们ptrace任何进程。

    • 它只需要执行一次,并且更安全,因为这些二进制文件通常来自受信任的来源-官方存储库或官方Wine PPA,因此它们不会成为恶意软件。

如果您使用的是Crossover

安装libcap2:

sudo apt-get install libcap2-bin;

然后,为Crossover添加一个例外:

须藤setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wineserver;
须藤setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wine-preloader;

最后,将其库添加到ld.so.conf中(否则您将收到“加载共享库时出错:libwine.so.1:无法打开共享库文件:没有这样的文件或目录”):

回声/ opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
须藤/ sbin / ldconfig

我认为它被称为一个错误,因为在对Wine进行补丁以支持它之后,ptrace在10.10中运行良好。它一直在与10.10-11.10一起使用,但在12.04中已回归。
TrailRider 2012年

感谢您接受@TrailRider; 我指的是您的声明,“这是内核中的错误”(不是);它肯定是Wine的一个小问题,并且应该变得:绕了:)有时候,内核中的某些事情肯定会发生变化,通常情况会变得更好,而这取决于软件来修复自身,而不是告诉Linus:“伙计,去恢复自我”:P
ish 2012年

我理解您在这里所说的话并同意,我只是说这是内核中的错误,因为一些支持网站以及Codeweavers都将其称为内核错误。这是上面的codeweavers页面。codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider 2012年

2
我将全局ptrace设置为0,并在几秒钟后启动了应用程序;setcap更加安全,而且不会因为必须一直在sudo而烦人。
Aquarius Power

@izx:感谢您的回答。添加有关“ eip”指代的信息将很有趣(在此处解释:andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux)。另外,我建议在reptyr文档中推荐此方法,在该文档中作者回答说这可能是安全问题:github.com/nelhage/reptyr/pull/27#issuecomment-29486673-很好,如果您可以详细说明在那。
2013年

4

ubuntuforums.org中,我获得了以下链接的答案

https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

这是链接中的粘贴(已添加我的重点)

随着Linux的普及,它将成为恶意软件的攻击目标。Linux进程接口的一个特别令人困扰的弱点是,单个用户能够检查其任何进程的内存和运行状态。例如,如果一个应用程序(例如firefox)遭到破坏,攻击者可能会附加到其他正在运行的进程(例如gpg-agent),以提取其他凭据并继续扩大其攻击范围。

这不是理论上的问题。如果正常允许使用ptrace,则完全有可能进行SSH会话劫持甚至任意代码注入

对于解决方案,某些应用程序使用prctl()专门禁止此类ptrace附件(例如ssh-agent)。更为通用的解决方案是仅允许直接从父进程到子进程的ptrace(即直接gdb和strace仍然起作用),或者以root用户身份(即gdb BIN PID和strace -p PID仍然作为root用户起作用)。

此行为是通过/ proc / sys / kernel / yama / ptrace_scope sysctl值控制的。默认值为“ 1”以阻止非子级ptrace。值为“ 0”将还原以前的更宽松的行为,这对于某些仅具有管理员帐户的开发系统和服务器可能更合适。使用“ sudo”还可以通过CAP_SYS_PTRACE功能临时授予ptrace权限,尽管此方法允许任何进程的ptrace。

因此,我想简短的答案是它的安全性较差,但是受到此类攻击的个人计算机的机壳可能很小。


1

更新以上说明:

sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

自2018年9月15日起,在使用最新稳定版本Wine(v.3.0.1 libcap2)的Ubuntu 18.04.1和PlayOnLinux v.4.2.12上无法使用。

Gnome终端中的错误消息如下:

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

不知道那意味着什么.....但是我想把它放在那里给任何人解释,也许有一个新的,可行的解决方案。

谢谢。

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.