Wineプログラムの「ptrace_scope」回避策とは何ですか?また、リスクはありますか?


37

WINEで特定のWindowsプログラムを実行するには、この回避策が必要です。

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

サポートWebサイトによると、これはUbuntuカーネルのバグが原因で、ptraceとWINEが適切に再生されないためです。

上記のコマンドを使用して、ptraceを0に設定しました。これは、私が行った調査によると(どのWebサイトを尋ねないで、多くのサイトのようです)、ptraceはプログラム間の相互作用に関係しています。0の設定は1よりも寛容です。

Ubuntuがptrace = 1を必要としていた正当な理由があったと仮定しなければならないので、これは質問の短い形式に戻ります。

ptrace = 0の設定に伴うリスクはありますか。低いセキュリティ?デバッグの問題?私が考えていない他の何か?

PSこれを読んでいる人がバグの原因を知り、Windowsプログラムがまったく開かない場合は、システムモニターでプログラムの多くのインスタンスを開こうとしているのがわかります。端末では、プログラムインスタンスの最大数に達したことを通知するエラーが表示されます。


ptrace_scopeが0に設定されていない限り、.Net 4.5のインストールを中止するPlayOnLinuxポップアップエラーメッセージからリンクされた説明を次に示します。playonlinux.com
en

回答:


41

簡単な答え:実用的な危険はまだありませんが、より良い方法を読み進めてください...


とにかくこのptraceのことは何ですか?

これは、Ubuntuカーネルのバグが原因で、ptraceとWINEがうまく一緒に再生されないためです。

  • いいえ、ptrace保護はUbuntu 10.10で最初に導入された意図的なカーネルセキュリティ対策です。これはバグではないため、「修正」されることはありません。

  • 簡単に言え、2番目のプロセス(子)が最初のプロセス(親)によって開始されない限り、1つのプロセスが別のプロセスを検査および変更することptrace_scope1ブロックするデフォルト値です。

  • これはwineserver、これらのプログラムに「Windowsサービス」を提供する方法が原因で、Wineの一部のプログラムで問題を引き起こす可能性があります。

に設定ptrace_scopeする際のリスクは何0ですか?

  • これにより、親子関係がなくても、あるプロセスが別のプロセスを「トレース」できる古い動作が復元されます。

  • 理論的には、マルウェアの一部がこれを使用してユーザー/コンピューターに損害を与える可能性があります。たとえば、Firefoxに接続して、すべてのURL /パスワードなどをログに記録できます。実際には、ランダムサイトなどからバイナリdebを盲目的にインストールしない限り、これは非常にまれです。

  • デバッグに関する限り0、実際には設定を昇格された特権(sudo)で実行しない限り、子供などにアタッチするにgdbstrace、などが必要です。

回避策の問題は何ですか?

  • 回避策はptrace_scope、グローバルな値であり0、システムのすべてのプロセスが子以外の制限から免除されているため、やや問題があります。
  • 回避策を使用する場合は、それを有効にし、Windowsプログラムを実行し、終了時に無効にする(1に設定する)単純なbashスクリプトに入れます。
    • しないでください作るptrace_scopeフォーラムのポストが推奨するよう(666)誰でも書き込める-今どのプロセスが意志でそれを変更することができますので、巨大なセキュリティ上のリスクであります!

より良い解決策はありますか?

  • より安全で、ptrace_scopeを繰り返し変更する必要のない、より優れたソリューションは、Wineserverにptrace機能付与することです。

    • ターミナルで:

      sudo apt-get install libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • これにより、wineserverwine- preloaderのバイナリが子以外のptrace制限から除外され、任意のプロセスをptraceできるようになります。

    • これらのバイナリは通常、信頼できるソース(公式リポジトリまたは公式Wine PPA)からのものであるため、1回実行するだけで済み、安全です。したがって、マルウェアにはなりません。

クロスオーバーを使用している場合

libcap2をインストールします。

sudo apt-get install libcap2-bin;

次に、クロスオーバーの例外を追加します。

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

最後に、そのライブラリをld.so.confに追加します(または、「共有ライブラリのロード中にエラーが発生します:libwine.so.1:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません」):

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig

WineをサポートするためにWineにパッチを適用した後、ptraceは10.10で正常に機能していたため、バグと呼ばれていると思います。10.10-11.10で動作していましたが、12.04で退行しました。
TrailRider

@TrailRiderを受け入れてくれてありがとう。私は「それはカーネルのバグである」(そうではない)というあなたの声明に言及していました。それは確かにWineの一種のバグであり、打撃を受けるはずです:)カーネル内の状況は確かに時々、通常はより良くなり、Linusに「よ、男自分自身を元に戻す」:P
ish

ここであなたが言っていることを理解し、同意します。いくつかのサポートWebサイトとCodeweaversがカーネルバグと呼んでいるので、それはカーネルのバグだと言っただけです。ここにコードウィーバーのページがあります。codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider

2
グローバルptraceを0に設定し、アプリケーションが起動して数秒後に1に戻しました。setcapは非常に安全で、常にsudoを実行する必要があるので迷惑ではありません。thx vm!
アクエリアスパワー

@izx:この答えをありがとう。「eip」が何を指すかについての情報を追加することは興味深いでしょう(ここで説明:andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux)。また、私は著者が、それはセキュリティ上の問題がある可能性がありますと答えたreptyrドキュメント、この方法を推奨示唆している:github.com/nelhage/reptyr/pull/27#issuecomment-29486673 -あなたは手の込んだことができれば、それは、素晴らしいことですその上。
13

4

ubuntuforums.org私は、次のリンクで答えを得ました

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

ここにリンクからの貼り付けがあります(私の強調が追加されています)

Linuxの人気が高まるにつれて、Linuxはマルウェアの標的になります。Linuxプロセスインターフェイスの特に厄介な弱点の1つは、1人のユーザーが任意のプロセスのメモリと実行状態を調べることができることです。たとえば、1つのアプリケーション(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;

Ubuntu 18.04.1およびPlayOnLinux v.4.2.12では、v.3.0.1 libcap2がすでにインストールされている最新の安定バージョンWineを使用して、2018年9月15日の時点では機能しません。

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

それが何を意味するのかはわかりませんが、だれかが解釈し、おそらく新しい、実行可能なソリューションを手に入れることができると思いました。

ありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.