web-dev-qa-db-ja.com

X11は危険ですか?

私はX11を初めて使用するので、インターネットで言うほど本当に危険かどうかを知りたいのです。

これを理解する方法を説明します。現在のユーザーの下から起動されたアプリケーションは、キーボード、マウス、ディスプレイ(スクリーンショットを撮るなど)にアクセスできますが、これは好ましくありません。しかし、公式リポジトリ(たとえば、Debianの場合)からプログラムをインストールする場合、キーロガーなどが含まれている可能性は低いため、危険は誇張されているようです。私が間違っている?

はい、別のサーバーでアプリケーションを開くことができます(たとえば、Xephyr)ですが、共有クリップボードがないため、これは不便です。 tmpファイルに基づいてクリップボードを作成することも不便です。

25
Dstart

現在のユーザーの下から起動されたアプリケーションはすべて、キーボード、マウス、ディスプレイ(スクリーンショットを撮るなど)にアクセスできますが、これは好ましくありません。

デスクトップ上のすべてのX11クライアントは、任意のウィンドウのコンテンツの取得、変更、任意のウィンドウのクローズ、他のクライアントへのキーおよびマウスイベントの偽装、任意の入力デバイスの取得など、相互に詳細にアクセスできます。

X11プロトコルの設計は、クライアントはすべて信頼され、協力するという考えに基づいています。お互いのつま先を踏むことはありません(後者は、Firefoxなどの最新のアプリによって完全に破壊されますChromeまたはJava)。

しかし、キーロガーなどを含む可能性が低い公式リポジトリ(Debianなど)からプログラムをインストールする場合、危険性の問題は明らかに誇張されます。私が間違っている?

プログラムにはバグがあり、悪用される可能性があります。 X11サーバーとライブラリが最新でない可能性があります。たとえば、すべてのX11クライアントは、無害なXkbリクエストを介して、現在のバージョンのDebian(Buster 10)のXサーバーをクラッシュできます。 (それは上流のソースでは fixed でしたが、Debianではまだ実現していませんでした)。クラッシュする可能性がある場合は、X11サーバーの特権(ハードウェアへのアクセスなど)を使用してコードを実行することもできる可能性があります。

Xwayland(およびDebianの通常のXorg Xserver)での緩い認証の問題については、 この答え の末尾の注記を参照してください。

はい、アプリケーションを別々のサーバー(Xephyrなど)で開くことができますが、共有クリップボードがないため、これは不便です。 tmpファイルに基づくクリップボードの作成も不便です。

追加の手順を実行しない限り、Xephyrはデフォルトで任意のローカルユーザーがそれに接続できることに注意してください。それについての議論は this を参照してください。

複数のX11サーバー間で共有クリップボードを作成することは興味深い問題であり、これを混合するのではなく、独自のQ&Aに値します。

43
mosvy

同じユーザーアカウントで同じマシン上で実行されるアプリケーションは、ptraceシステムコールを使用して互いのプロセスメモリを変更できるため、X11はここでの最も便利な攻撃面ではありません。

完全に信頼していないアプリケーションの場合、最初にそれらを別のユーザーIDで実行する必要があります(Androidはさまざまなベンダーのアプリケーションで使用できます)。XSECURITY拡張機能を使用して、 Xサーバーへの「信頼されていない」アクセストークン。これにより、アプリケーションのX11へのアクセスが制限されます。

  • 自分のウィンドウに向けられていない入力イベントにアクセスできない
  • xTEST拡張機能へのアクセスなし
  • 透明な窓なし

X11の入力イベントには、入力イベントが入力デバイスから生成されたものか、別のプログラムから送信されたものかを示すSyntheticフィールドがあり、受信プログラムは、合成イベントの処理方法を決定します。たとえば、xterm無視します。 XTEST拡張機能を使用すると、テスト目的でソフトウェアからSynthetic以外のイベントを生成できます。そのため、信頼されていないクライアントは、その拡張機能を使用できません。

9
Simon Richter