パスワードを忘れた? アカウント作成
11898200 story
X

X11のスクリーンロッカーが安全でない理由 42

ストーリー by headless
回避 部門より
本家/.「Why Screen Lockers On X11 Cannot Be Secure」より

Windows NTのセキュリティー機能で誰もが思い出すことの一つとして、ワークステーションのロック解除にCTRL+ALT+DELキーを押すというものが挙げられる(現在でもポリシー設定で有効にできる)。この機能には、他のプログラムが特定のキーの組み合わせに反応できなくすることで、偽のロック画面が表示されることを防止するという目的がある。一方、KDEチームのMartin Gräßlin氏によると、X11は古すぎるためにX11上のスクリーンロッカーでは十分なセキュリティーを確保できないのだという。X11はプロトコルレベルでスクリーンロッカーを認識せず、Xサーバーはスクリーンがロックされているかどうかを判別できない。唯一のスクリーンロッカーとして動作する特権プロセスといったものは存在せず、他のプログラムがスクリーンロッカーと同様の動作をしたり、スクリーンのロックを妨げたりすることも可能だ。たとえば、コンテキストメニューを任意のウィンドウで開くだけで、スクリーンはロックされなくなるとのことだ。つまり、Xサーバーに接続している任意のプロセスがスクリーンロッカーをブロックすることが可能で、偽のスクリーンロッカーとしてふるまうことも可能ということになる。

Gräßlin氏はPlasmaの脆弱性修正に伴ってこの問題を認識し、Waylandベースのプロトコルを使用して問題を解決したとのことだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 攻撃にはスクリーンロッカーをブロックするプロセスが必要ということですよね。
    それには、攻撃プログラムを起動できる脆弱性か、Xサーバーに許可なく遠隔で接続させうる脆弱性が必要になると思います。

    そのような脆弱性が有るなら、スクリーンロッカーをいじらずとも、何でも可能な状態なのではないでしょうか。
    • by Anonymous Coward

      スクリーンロックを解除するためにはパスワード入力が必要です。
      確かに何らかのプログラムが必要ですが、単に何らかのプログラムを起動しただけではパスワードを知ることは出来ません。
      しかしロック画面を表示することで自然な形でパスワードを収集出来ます。
      また一般ユーザ権限のプロセスでも、管理者ユーザのロック画面などに偽装することで、管理者権限を得ることが可能かもしれませんし、
      共用PCならばログイン画面に偽装して他ユーザのパスワードを収集することも可能かもしれません。
      #そういった画面に偽装しなくても騙される人はいるからパスワード収集は可能ですが、偽装できればさらに効率は上がるでしょう。
      #ブラウザのアドレスバーやダイアログの偽装とかも類型と言えるかな?

      NT系でCTRL+ALT+DELキーが必要なのは、これがプロセスによりトラップするなどで無効化できないものであるからです。
      #ということをユーザが知らなければ意味がないのですけれどね。

      • 異なる機能のものを比較しても意味があるとは思えません。「NT系でCTRL+ALT+DELキーが必要」というのはローカルの話で、X は基本的にネットワークベースです。

        Windows であってもリモートデスクトップ越しにスクリーンロッカーに見えるものを解除する時、Ctrl + Alt + End を受け取ったローカル側のプロセスが、正しいリモートデスクトップなのか、そういった画面に偽装したパスワード収集ソフトなのかを判別できないのではないでしょうか。

        親コメント
        • by Anonymous Coward on 2015年01月31日 19時46分 (#2753576)

          windowsはCtrl+Alt+Delのトラップを無効化してるので
          偽のスクリーンロックを見破れますって話でしょ

          親コメント
        • by Anonymous Coward

          ええとですね、2015年の今現在Xをネットワークに生で流すことは推奨されていないのです。
          XはデフォルトではUnixDomainしかlistenせず、tcp:6000を開けるならsshのポートフォワードを使うことが強く推奨されています。
          Xはネットワークベース?古き良き時代はそうでした。今はローカルのレンダラですよ。

          • ええとですね、2015年の今現在Xをネットワークに生で流すことは推奨されていないのです。

            ロックされているように見える画面に対し、パスワードを入力する前に、正しい相手かどうかの識別を CTRL-ALT-DEL という特定のキーコンビネーションに反応するかどうかで判断する、というのはローカル OS などキーボードに対し絶対的な権限をもつものの設計としてしか意味がないのでは、という話です。Windows のリモートデスクトップにせよ、X にせよ、(X サーバと通信する)クライアントプロセスがロック解除のためのパスワードを処理するならば、ローカルのキーボードに頼ることはそもそもできないでしょう。

            Wayland で UI を握って云々という話は、CTRL-ALT-DEL や Windows キー+電源ボタン並になることはあっても、本質的な解決とは思えません。

            そもそも、問題の本質は、ユーザである人間が、パスワードを教えて良い正しいプロセスかどうかを「認証」するにはどうしたら良いか、ということです(別に認証が正しくてもキーロガー等で「盗聴」されているかも、という問題もありますが)。(ネットワークや多様なハードウェアを想定した)ハードウェアの仮想化、例えば Windows や iOS 上のアプリケーションから利用する、そもそも物理キーボードがない場合などを考えると、抜本的にはパスワードを使わずにGoogle Authenticator [wikipedia.org]などで TOTP 認証にするなど、別に「鍵」を用意するぐらいしか無いのは無かろうか。

            親コメント
            • by Anonymous Coward

              本質的にはそうかもしれませんが、次善の策として、rootで動き基本的にキーボードやディスプレイを握るXサーバが何らかの手立てを準備しても良いかと思います。
              まあ、後段にも近いですが、ローカル、すなわちハードを触れる環境であれば間にロガーとかプロキシ的なハードを噛ますことが可能であり、OS含めソフトが絶対的権限を持ちえないともいえます。
              UNIXはそういう観点に近かった気がします。

      • なるほど、攻撃プログラムを起動されても、スクリーンロッカーへの偽装を防げば、ユーザのパスワードが守られるという事ですね。
        キー入力や画面の内容をキャプチャされない、特権モードのウィンドウがあればいいのかな。

        ただ、それにはユーザが以下の事を理解して実行する必要があり、かなりの教育が必要になりそうですね。

        1. パスワードを要求するウィンドウは「特権モード」である必要がある。
        2. 特権モードでウィンドウを作成できるのは、あらかじめ設定されたプログラムだけ。
        3. ウィンドウが特権モードかどうかは、ユーザが「特権を確認する操作」を行ない判断できる。
        4. ユーザはスクリーンロッカーなどの、パスワードを要求するウィンドウには必ず「特権を確認する操作」を行なった上で、パスワードを入力しなければならない。


        (パスワードを守ることで守られる物は何か、という問題もあります。
        攻撃プログラムを実行された時点で、パスワードで守りたかった物があらかた盗られている可能性もあります。)
        親コメント
        • by Anonymous Coward
          偽装パスワード入力画面を表示できるプロセスは、そんなモン使わなくても透明な全画面ウィンドウを表示してキーロガー的にあらゆるイベントをフックできるはず。
          • 現状はそうですよね。
            そういったキーロガー的なプロセスにもフックされない「特権モード」を新に作れば解決するのかな、と思った次第です。
            「特権モード」ウィンドウに対するイベントはキャプチャできないので、パスワードは盗れません。
            「特権モード」ウィンドウのふりをしても、ユーザが「特権を確認する操作」をした時点でバレます。
            親コメント
        • by Anonymous Coward

          まず、WindowsはNTの時代から上記4点は実現されています。
          そして、この話はオレンジブックなどにも載っているセキュリティの基礎、教科書レベルの話であって、今更議論するような内容ではありません。

          Xは明らかに脆弱で時代遅れです。誤魔化すのはやめましょう。別にXやLinuxを攻撃する意図はありません。事実を受け入れましょうと言っているだけです。
          我々にできることは現状を過信せず、Waylandのような新しいプロジェクトが頓挫しないようできることをするだけです。

          • > まず、WindowsはNTの時代から上記4点は実現されています。

            「特権を確認する操作」として、Ctrl+Alt+Del があるという事でしょうか。
            ユーザが理解して使っている限り、いい機能だと思います。

            ただ「特権を確認する操作」は、本質的に難しいものだと思います。
            パスワードを入力できるほど信用できるプログラムと、信用できないプログラムを、信用できないプログラムを起動してから見分けるという事ですから。
            Ctrl+Alt+Del のような機能を、スクリーンロックだけでなく端末で sudo にパスワードを聞かれた時などにも適用しなければいけません。

            私は X を擁護しているのではありません。
            現状、信用できないプログラムの実行や接続を許した時点で、もう駄目だろうと思うだけです。

            Xが時代遅れなのは事実でしょうね。Waylandなどには期待しています。
            親コメント
  • Wayland (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2015年01月31日 19時30分 (#2753570)

    Waylandの意義ってX serverというmiddle-manを無くすだけじゃなくて、こういったX protocolの危険性からより安全なプロトコルやコンポジタを作ろうってことにもあるから積極的にWaylandに移行してほしい。(KDEもGnomeもWaylandへの移行に積極的)

    • by Anonymous Coward
      問題は、互換性がないとされるMirとの分裂なんですよねえ。
      エディタやメディヤプレイヤーなら、派生して競争したり
      自分好みにカスタマイズしてもいいですが、こういう基本的なところに関わるものは
      統一しておかないとまずいんじゃないかなと思います。
      派生させたのはCanonicalなので、Waylandを責めるつもりはありませんが。
      • by Anonymous Coward

        まともに動くものさえ出来ればどっちでもいいよ。そういう意味じゃどっちも失格じゃね?

        • by Anonymous Coward

          FedoraやArch使ってるならGNOME 3.14がWaylandでさらにWaylandサポートが改善されて、クラッシュしたり使えないっていうことはなくなりましたが、それでも失格ですか? (あら削りなのは認めるが)

        • by Anonymous Coward

          正直Mirの分裂は痛いよね。
          Canonicalには彼らの都合があるから仕方がないとしても、Ubuntuの離脱の影響は少なくはない。
          足並みをそろえてWayland/Westonに移行してもらうのが、ユーザにとっても一般の開発者にとっても良かったと思うわ。

  • してないんだったら、loginの安全性はX11程度ってことね。

    最初は間違ったパスワードを入れるっていう解法もあるが。
    • by Anonymous Coward

      まあ、それは結局Ctrl-Alt-Del打つ意味理解してないと意味ない対策だし、ほかにパスワード搾取する方法はいくらでもあるし、ってことで、あまり重要ではないってことですね。
      #ただ、それを行う事が出来るかどうか、ってのはあるけど。

      ちなみに、そもそもログインプロンプトを偽装してパスワード搾取する方法なんですが、もともとはUNIXのマルウェアというか、ログインスクリプトにログインプロンプト偽装するコード入れるって方法で、
      正規のログインプロンプト→ユーザが正しいアカウント・パスワード入力→ログイン成功でログインスクリプトが走る→偽装されたログインプロンプト表示→ユーザは入力ミスと勘違いして再び正しいアカウント・パスワード入力→奪取成功
      って流だったり。これだと「最初は間違ったパスワードを入れるっていう」のは解法じゃなかったり。
      ま、CLIだからの事でGUIだとそうはいかないけど。

  • by Anonymous Coward on 2015年01月31日 19時25分 (#2753563)

    かなーり前のred hatからtcp:6000のlistenは止められていたし、
    相変わらずMagic-Cookieしかセキュリティ機構と呼べるものはないし、

    知ってて使ってるわけじゃなかったのか。

    • by Anonymous Coward

      これ。
      X11に設計からどうだとか言われても、セキュリティ的にも使用帯域的にもLAN内部でしか使わない想定で作られたモノに対して設計思想が不味いなんて言い出したらどーしようもない。
      sshのトンネリングがなければ経路の暗号化だってない。
      XDMCP以外では、自分でXクライアントの起動を行えるインタフェースがないので、他のリモートアクセスプロトコルに依存しないといけない。自分でコントロールできないというのも設計上のセキュリティホールになりうる。

      スクリーンロックだって、ロックされていることをXサーバが知らないというのが全て。CtrlAltDelとはレベルが違う。

  • by Anonymous Coward on 2015年01月31日 17時53分 (#2753529)

    仕事中に便所に行かなければいいだけのことだ。

    • Re:くだらない (スコア:5, おもしろおかしい)

      by Anonymous Coward on 2015年01月31日 17時57分 (#2753531)

      くだらなければたしかにそれもできますが、くだっちゃったらそうも言ってられないですよね。

      親コメント
      • by Anonymous Coward

        便所で仕事すればいいんだよ。

    • by Anonymous Coward
      貴様ボトラーか!
    • by Anonymous Coward

      クソみたいな職場だな。

  • by Anonymous Coward on 2015年01月31日 18時01分 (#2753533)

    くだらない

    • by Anonymous Coward on 2015年01月31日 20時04分 (#2753587)

      Linuxだけの問題ではなく、Unix全般の問題だと思いますが…。
      まぁ、ハイエンドのワークステーションもUnixからLinuxへの置き換えが進んでますけども。

      親コメント
      • by Anonymous Coward

        若干出遅れてる感じですが学術向けではUNIXからMacに移行してるってのをどこかで見た記憶

    • by Anonymous Coward

      しかしそれでは目的を果たせないかもしれない。

      ここは Windows 上で Xサーバを動かす方向で。

  • by Anonymous Coward on 2015年01月31日 19時58分 (#2753584)

    1980年代はXサーバーにXのクライアントをたくさんぶら下げて使うとか、流行りましたねぇ。今でもXming [osdn.jp]とかもあるようですが。脆弱性? いまどき xhost + しなきゃいいんじゃないの?

    それとも、xhost + させて他人に使わさせているような UNIX機を、今回の指摘が問題になるようなクリティカルな用途で使うものかね?

    そもそも、XだのKDEが無けりゃ操作できないようなド素人にサーバーを管理させている時点でセキュリティー的に安全じゃないだろうけど。そういう人間はおとなしく自分専用のマシンでOpenOffice + Firefox + Thunderbird 程度を使っとけばいいんじゃないの?

    • by Anonymous Coward on 2015年01月31日 21時25分 (#2753627)

      なんかずれてる。

      1980年代はXサーバーにXのクライアントをたくさんぶら下げて使うとか、流行りましたねぇ。

      今でもアプリ(Xクライアント)は複数使うのが普通ですが。
      まあ、クライアントじゃなくホストなんでしょうけど。

      それとも、xhost + させて他人に使わさせているような

      普通それは自分で使うためにしてると思うけど。

      これはxhostの様に別プロセス(アプリ)経由でなければ端末たるXサーバに働きかける手段がないってことかと。
      せっかくUIデバイス握ってるのに。

      親コメント
      • by Anonymous Coward

        ずれてるんじゃなくて、多分基礎が分かってない。
        X端末を多数つなげるのを「XサーバーにXのクライアントをぶら下げて使う」って思ってるんでしょ
        Xを使ったことがある程度の初心者でこのトピックを理解するために必要な知識がないと思うよ

      • by Anonymous Coward

        確かに xhost を設定した覚えは無いですが、確認したところ
        % xhost
        access control enabled, only authorized clients can connect
        INET:192.168.0.11 (←自分のIP)
        INET:localhost
        LOCAL:となりましたが、自分で使うのだから特におかしくはないと思いますが。

        ところで元の Why screen lockers on X11 cannot be secure には

        While I personally disagree, it just doesn’t hold for X11. If only clients of one user were connected to the X server one could say so. But X11 allows clients from other users and even remote clients.

        とあって、Xは1台の

        • by Anonymous Coward

          違う要素がかぶってる気がするな。

          一つはXサーバが走ってるマシン(あなたはそれと物理的につながったディスプレイやマウス・キーボードで操作している)にリモートからログインしてる別のユーザがいて、さらにXサーバの設定が、

          INET:192.168.0.11 (←自分のIP)
          INET:localhost

          これだとそのログインしてる別ユーザは自由にそのマシンのXサーバにアクセスできる=つながってるディスプレイになんでも自由に表示でき、表示された内容を取得できる状態。
          xhostによる制御にはユーザの概念がないので。
          ただ、ウィンドウマネージャがあるので、そっちの制御を回避したりオーバーライドできるのかまでは分からない。
          これはW

    • by Anonymous Coward

      ストーリで言ってるのは、 localhost で動いてるプロセスがロック中でも動作できる、ということでそ。それってウイルスが入った後にどうやって悪さするかという話だと思うんだけど、云々して意味があるのかな…

      • by Anonymous Coward

        偽のログイン画面で生のパスワード盗めるってのは大きいと思います。
        まぁそれいうとgksudoだっけ、GUIのsudoなんかもあれなんだろうけど。
        昇格とかの動作をユーザレベルの処理と切り替える機能が足りてない的な感じ?
        WindowsだとUACでユーザアプリの操作を受け付けないモードに入って処理したりできるが、ああいう方面でちと弱いんじゃないかな。

  • by Anonymous Coward on 2015年02月02日 4時19分 (#2754100)

    別にX11ベースでも、Xサーバーが認識できる拡張プロトコルを新設すればいいだけのような...
    互換性を保った上で拡張する仕組みはもとからあるわけだし。

typodupeerror

計算機科学者とは、壊れていないものを修理する人々のことである

読み込み中...