ネタ元エントリ:
Vista pre-RC1 のフィードバックをまとめて出してみた
仕様ですか。。。
Windows Vista: 迷惑な「学習機能」
Windows Vista: UAC の抜け道を考える
まとめて出した中の、「FeedbackID=192122 UAC 昇格情報が保存されている」も、「仕様による」としてクローズされました。
なんというか。。。
Vista の UAC では、SETUP や INSTALL という文字列を含んだファイル名を持つプログラムは、「セットアッププログラムだから、管理者特権が必要だ」と判断され、Vista が勝手に昇格ダイアログを表示します。
このダイアログで選べるのは、「昇格して実行」か、「実行しない」です。
ここで、このプログラムが "SetupMenu.exe" という名前だったとしましょう。最近のプリンタやスキャナなどのデバイス ドライバの入った CD は、ドライバ以外のアプリケーションも入っていますが、それらのアプリケーションのインストーラを起動するためのメニュープログラム、をイメージしています。
このとき、"SetupMenu.exe" は、ファイル名に "SETUP" という名前を含んでいるため、「インストーラ」と判断されます。実際には「ラウンチャ」なのですが。
そして、Vista はユーザに聞いてきます。
「インストーラを、管理者として実行しますか?それとも、実行せずにいますか?」
ここで、ユーザは「ラウンチャ」を実行したいのですが、あくまで「ラウンチャ」として実行したいのであり、「インストーラ」として実行したくはありません。しかし、そのような選択肢はありません。含めてくださいという提案をしたのですが、すでにレビューされた案件で、過去の資源を利用するために必要なことをしているそうです。
さて、ユーザはラウンチャを管理者権限付きで実行します。せざるを得ません。そうすると、ここからプロセス分岐されるプログラムは、すべて管理者権限付きで実行されます。
"SetupMenu.exe" が管理者権限で動作しているので、ここから起動されるプログラムはすべて管理者権限付きで起動します。したがって、本当のインストーラに対して、昇格ウインドウが表示されることはありません。
また、本当のインストーラが制限されたユーザで動作するように作ってあっても、それは意味をなさなくなってしまいます。もちろん、単体で起動したときには意味があります。
さて、必要なアプリケーションのインストールが済み、ユーザはラウンチャをとじます。しかし、Vista は "SetupMenu.exe" の動向を監視しています。このプロセスが行ったのは、付随するセットアッププログラムを呼び出しただけで、このプロセス自身が何らかのセットアップ動作を行ったわけではありません。そこで親切にも、Vista はユーザに問い合わせます。
「セットアップが正しく実行されていないようですが、もう一度セットアップを実行しますか?」
ここで選べるのは、「もう一度実行します(昇格プロンプトがまた出る)」と、「正しくセットアップは行われました」です。
待ってください。"SetupMenu.exe" の役割は、ユーザにセットアップすることが出来るアプリケーションを選ぶ UI を提供することです。このため、セットアップされるものはありません。もっとも、ユーザからすると、"SetupMenu.exe" を通じてインストーラを起動し、アプリケーションをセットアップしたのですから、「正しくセットアップは行われました」という状態である、ともいえるでしょう。
しかし、ユーザにとまどいを与える可能性がないでしょうか?本当のインストーラは、「正しくインストールが終了しました」と表示したことでしょう。それなのに、「セットアップが行われなかった可能性があります」と表示されるのです。いったいどっちが本当なの?
次に、昇格済みのプロセスから起動されるプロセスは、すでに昇格済みである、ということについて。
Vista の UAC による昇格ダイアログは、マイクロソフトの署名があるもの、その他の署名があるもの、証明書パスに「信頼する証明書発行機関」が含まれないもの、署名がないもの、の4つによって、表示される内容が異なります。
"SetupMenu.exe" は、「信頼する証明書発行機関」から発行された証明書によって署名されているとします。すると、ダイアログの色は「灰色」で、昇格ダイアログの内容も穏やかなものになります(実際に実行したことがないので、詳細不明)。
ここで、"SetupMenu.exe" の昇格がすんでしまったので、ここから起動されるプロセスは昇格の必要がありません。つまり、それらの署名を、ユーザが確認することはなくなります(もちろん、直接実行する場合を除く)。
ここで、悪意のユーザが、この "SetupMenu.exe" を手に入れ、ここから起動されるプロセスと同じ名前の悪意を持ったプログラムを作り、全体をまとめて再配布したとします。
ユーザは、"SetupMenu.exe" を実行するときに、"SetupMenu.exe" に付けられた署名が信頼できるものであることを、マイクロソフトから示されます。昇格ダイアログは灰色です。
そして、その中に列挙されたアプリケーションをインストールしようとします。しかし、悪意によって書き換えられているため、インストールできたことを確認できません。ただ、悪意のプログラムがインストールされただけです。悪意のインストールには、昇格ダイアログが表示されません。すでに昇格済みですから。
この、"SetupMenu.exe" が呼び出すのが DLL であれば、DLL の署名によって確認できます。しかし、"SetupMenu.exe" が呼び出すのは、外部のメーカーが作ったプログラムです。したがって、"SetupMenu.exe" は署名をチェックしないでしょう。
よしんば、今から作る "SetupMenu.exe" は、署名をチェックするように作ったとしても、このインストーラ判定は「過去の資産との互換性を維持する」為に追加されている機能です。「過去の資産」まで変更することは、容易ではありません。ってか、変更しなくても良いように追加されているものだから、変更しないでしょう。
そして、"SetupMenu.exe" が昇格済みであるため、悪意のプログラムのインストーラも昇格済みであり、管理者権限を乗っ取ることが出来てしまいます。
というようなシナリオを考えたのですが、ワタシよりセキュリティについて明るい人が何人も集まって、議論してレビューした後なのだから、きっとそんなことは出来ないのでしょう。
なんにしても、UAC が促すのは「このプログラムの実行を、あなたは意図していますか?」ということです。そのプログラムがどの様な動作をし、その結果どうなるのか、事前に調べておく必要がある、、、ということですかね?
だったらコンパネ中の機能には要らんだろ。意図するからダブルクリックするんだからさ。ユーザが意図的に指示したことについては、意図しているんだから指示しているわけで、確認の必要はないやん。確認の必要があるのは、ユーザの意図が確認できていない場合じゃないかなぁ?
そんなこと考えていると、“開発者がユーザに昇格を指示する”というのも、なんだかなぁ?
ここでは、ユーザが、開発者の意図を確認することは出来ないのです。悪意を持った開発者が、「あんたのコンピュータを乗っ取るけど、昇格して良い?」なんて聞かないのです。ユーザも、そんなこと聞かれたら、もちろん「No!」というでしょう。
そうではなく、「あなたが探していた画像だよ!」と言って、実行ファイルを実行させ、その中で管理者権限を取得するのが問題なんでしょ?それなのに、どうして拡張子をデフォルトで隠すのさ?!
このとき、「便利な機能をインストールするよ!」と、SETUP.EXE を配布すると、Vista が勝手に管理者権限を与えようとしちゃうんですよ。管理者権限を与えずに実行すれば、まだ防げることも、そういう選択肢はないわけです。
ユーザは、「便利な機能」は欲しいのです。でも、それによって「いらない機能」までインストールされるとは思わないのです。
マイクロソフトの回答は、その「「いらない機能」の有無を事前に確認しておくように」ということのような気がするんだけどなぁ。。。
だらだら長くなってきたけどもう一つ。自動判断でインストーラと判断されたプログラムが、インストーラとしての挙動を示さなければ、「もう一度実行しますか?」と聞かれます。このとき、「はい」は、また昇格ダイアログが表示されます。まぁ、プログラムはすでに終了しているんだから、仕方ないかも。
ところが、他のアカウントのホーム パスを見るために表示された昇格ダイアログは、ログアウトしても2回目は表示されません。なんで?仕様だそうです。どんな仕様だよ。
投稿日時 : 2006年9月7日 23:40