web-dev-qa-db-ja.com

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

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の設定に伴うリスクはありますか?低いセキュリティ?デバッグの問題?私が考えていない他の???

追伸これを読んでバグの原因を知りたければ、Windowsプログラムはまったく開かず、システムモニターではプログラムの多くのインスタンスが開かれ、その後すべて終了し、プログラムを実行すると端末では、プログラムインスタンスの最大数に達したことを通知するエラーが表示されます。

37
TrailRider

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


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

これは、ptraceとWINEが適切に連携できないUbuntuカーネルのバグが原因です。

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

  • 簡単に言えば、ptrace_scopeのデフォルトの1値は、あるプロセスが別のプロセスを検査および変更することをブロックしますnless最初のプロセス(親)によって2番目のプロセス(子)が開始されました。

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

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

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

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

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

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

  • ptrace_scopeはグローバル値であり、0に設定されている間、システム上のすべてのプロセスは子以外の制限から免除されるため、回避策はやや問題があります。
  • 回避策を使用する場合は、それを有効にし、Windowsプログラムを実行し、終了時に無効にする(1に設定する)単純なbashスクリプトに入れます。
    • しないNOTフォーラム投稿が推奨するようにptrace_scope world-writable(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
      
    • これにより、wineserverおよびwine-preloaderバイナリが非子ptrace制限から除外され、任意のプロセスをptraceできます。

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

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

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
40
ish

buntuforums.org で、次のリンクで回答を得ました

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

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

Linuxの人気が高まるにつれて、Linuxはマルウェアの標的になります。 Linuxプロセスインターフェイスの特に厄介な弱点の1つは、1人のユーザーが任意のプロセスのメモリと実行状態を調べることができることです。たとえば、あるアプリケーション(例:firefox)が侵害された場合、攻撃者は実行中の他のプロセス(例:gpg-agent)にアタッチして追加の資格情報を抽出し、攻撃の範囲を拡大し続けることができます。

これは理論的な問題ではありません。 ptraceが正常に許可されている場合、SSHセッションハイジャックおよび任意のコードインジェクションさえ完全に可能です

解決策として、一部のアプリケーションはprctl()を使用して、このようなptrace接続を具体的に禁止します(例:ssh-agent)。より一般的な解決策は、親プロセスから子プロセスへのptraceのみを直接許可することです(つまり、直接gdbとstraceは引き続き機能します)。

この動作は、/ proc/sys/kernel/yama/ptrace_scope sysctl値を介して制御されます。デフォルトは「1」で、非子ptraceをブロックします。 「0」の値は、以前のより寛容な動作を復元します。これは、管理者アカウントのみを持つ一部の開発システムおよびサーバーにより適している場合があります。 「Sudo」を使用すると、CAP_SYS_PTRACE機能を介して一時的にptrace権限を付与することもできますが、この方法ではすべてのプロセスのptraceが許可されます。

したがって、簡単な答えは安全性は低いが、そのような種類の攻撃にさらされる可能性のあるパーソナルコンピュータのフードはかなりスリムになるということだと思います。

4
TrailRider

UPDATE上記の手順:

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

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

ありがとう。

1