【さよならXP】第4回 UAC無効化? ちょっと待った!

  by Butameron  Tags :  

いよいよ『Windows XP』のサポート期限が残り2ヶ月を切りました。

読者の皆様はいかがお過ごしでしょうか。OSのアップグレードを検討されている方や、サポート期限終了後もしばらくは『Windows XP』と共に生きようと決意されている方もおられるのではないかと思います。

この連載では、『Windows XP』を使い続けることにどんなリスクがあるのか、また、アップグレードするときにはどのような注意点があるのかなどの情報を取り上げてきました。

第4回 UAC無効化? ちょっと待った!

この連載では、『Windows XP』を使い続けることのセキュリティ上のリスクをお伝えしてきました。しかし、それは重々承知の上で、アプリケーションの互換性を気にして新しいOSへのアップグレードが出来ないという方も少なくありません。

その障壁のひとつは、お節介機能として名高い『UAC』(ユーザーアカウント制御)機能によるアプリケーションの非互換性です。今回はUACについての解説と、UACをオフにせずにトラブルを回避できるかも知れないヒントをご紹介します。

UACとは

UAC(ユーザーアカウント制御)とはご存じの通り『Vista』以降で新たに導入されたセキュリティ機能です。お節介機能としても名高いのですが、アプリケーションが管理者権限を要求した場合のみ管理者権限が与えられるという、近年のOSでは欠かせない機能でもあります。同様の機能は『MacOS』や『Linux』にも存在します。

しかし、『XP』やそれ以前のOS用に開発されたアプリケーションでは、管理者権限で動作することが前提となっているものが多く、管理者権限がなければ書き込めないようなシステムの重要な部分に設定ファイルを保存したりしていました。これは、UACの仕組みにおいては正常に動作しません。

そこは互換性を重視するマイクロソフト。そのようなアプリケーションに対しては、特別な対処を行うようにしました。それが『ファイル仮想化』と『レジストリ仮想化』です。語弊を恐れずに簡単に説明すれば、『Windows』側がアプリケーションに対して嘘をついてその場を丸く収める、という機能です。もし、アプリケーションが管理者権限を要求せずにシステムの重要な部分に変更を加えようとすると、実際には変更を加えず、別の特別な場所に変更結果を保存し、あたかも書き込みが正常に終了したかのように嘘をつきます。しかも、その後そのアプリからそのファイルやレジストリを読み取ろうとすると、アプリケーションに対して特別な場所に保存された方の内容のほうを見せるのです。嘘は墓場まで、ということですね。

ただ、一般論からいって、嘘で塗り固めてもどこかで破綻します。一部のアプリケーションでは『ファイル仮想化』『レジストリ仮想化』があるがために、逆に正常に動作しなくなってしまうことがあるのです。これが、「お節介機能」と呼ばれるひとつの理由です。

「UACを無効化すればいいじゃない」 本当に?

そもそも毎回表示されるUACの画面が鬱陶しい上に、このようにXP以前のアプリケーションにとってはトラブルメーカーであるUACですから、無効にしてしまえば良い、と考える方もおられるようです。「UACをオフにして下さい」と、堂々と開き直りとも言える内容をマニュアルに記載している場合があります。『Vista』が導入された当初は企業や大学でもこの手のアナウンスが流れることが多かったと記憶しています(いまだにこのようなアナウンスを垂れ流している企業や大学もあります)。

もちろんUACは完璧なものではなく、鬱陶しい割に効果は限定的であり、特定のケースでは悪意のあるプログラムがUACを回避してしまうこともあるようです。また、サポートデスクに電話が殺到するのが企業にとって鬱陶しいというのも事実なのですが、安直に無効化して良いというものでもありません。そもそもUACによって不具合が発生するようなアプリケーションは、現在の考え方では設計が良くないのです。そのような一部のアプリケーションのためにせっかくのセキュリティ機能を犠牲にするというのは、明らかにバランスを欠いた考えだといえるでしょう。

無効化するならば危険性を正しく認識した上で行うというのが大原則ですが、実際に無効化している方のうちのどれぐらいが危険性を正しく認識しているといえるのでしょうか。少なくともマニュアルに記載するような内容でないことは明らかです。ちなみに、筆者はUACを無効化せず、むしろ一番高いレベルの設定にして使用しています。

では、UACを無効化せずに、『XP』以前のアプリケーションを正常に動作させるには、どうすれば良いのでしょうか。『ファイル仮想化』『レジストリ仮想化』に注目してそのヒントをご紹介します。

『ファイル仮想化』『レジストリ仮想化』が適用される条件

『ファイル仮想化』『レジストリ仮想化』は既に述べたように、『XP』以前向けに開発されたアプリケーションのための機能です。したがって、適切な措置を施された新しいアプリケーションには適用されません。しかし、それをどのように判定しているのでしょうか。答えは以下の通りです。

1.UAC及びファイル仮想化・レジストリ仮想化が有効となっていること
2.権限が起動時に昇格されないこと 
 (右クリック→「管理者として実行」などで実行されていないこと)
3.マニフェストにUACについての情報が含まれていないこと
4.32ビットアプリケーションであること

これらの条件を全て満たすアプリケーションに対して、『ファイル仮想化』『レジストリ仮想化』が適用されます。逆に言えば、これらの条件のうちの1つでも満たさなければ、適用されないのです。

回避法1: そのアプリケーションの新しいバージョンを使用する

回避法として紹介するのは間違いかもしれませんが、まず正攻法をご紹介します。
そのアプリケーションに「Vista対応」「7対応」「8対応」などのアップデートがあったり、新しいバージョンが販売されている場合、その新バージョンに乗り変えるのが正攻法です。多少高価であっても、最終的には新しいバージョンを使用するのがセキュリティ的にも安心です。

ちなみに、アプリケーションそのものの仕様を変更せずとも、そこそこの知識をもつ技術者であれば簡単に『ファイル仮想化』『レジストリ仮想化』を回避する対応を入れることが可能です。条件に「マニフェストにUACについての情報が含まれていないこと」とありましたが、これについて「マニフェストにUACの情報を追加する」という対応をすれば良いのです。これだけの対応を施したアップデートが公開されていることもよくあります。

回避法2: そのアプリケーションの64bit版を使用する

『ファイル仮想化』『レジストリ仮想化』が動作するのは「32ビットアプリケーションであること」が条件となっています。フリーソフトであれば古いバージョンであっても64bit版が公開されていることがあります。もし64bit版のOSをお使いで、なおかつ、64bit版のアプリケーションが存在するなら、64bit版を使用するというのも正攻法のひとつです。

回避法3-1: Program Filesフォルダにインストールしない

これは、そもそも『ファイル仮想化』が適用される状況を回避するという方法です。

『XP』以前のアプリケーションでは、設定ファイルを「C:\Program Files\○○」フォルダ(○○はアプリケーション名やメーカー名など)に保存しているものがありました。このフォルダへの書き込みは管理者権限が必要となるため、『ファイル仮想化』が適用されてしまいます。

殆どのアプリケーションでは、インストーラーにインストール先を変更する機能が搭載されています。これを使用して、「C:\Program Files\○○」以外の場所(例えば「C:\XpPrograms\○○」)にアプリケーションをインストールするよう変更すればよいのです。アプリケーションによっては自分のみにインストールする機能が搭載されており、ユーザーのホームフォルダ(「C:\Users\ユーザー名\」)以下のどこかにインストールされるようになっている場合もあります。

このようにしてインストールした場合、少なくともインストールしたユーザーの権限でアプリケーションのフォルダに書き込みができるため、管理者権限も不要であり『ファイル仮想化』が適用されることもないのです。

回避法3-2: Program Filesフォルダ内のアプリケーションのフォルダの権限を変更する

考え方としては回避法3-1と同様なのですが、一部の質の悪いアプリケーションはどこにインストールされようと決め打ちでC:\Program Files\○○フォルダに設定ファイルなどを保存しようとします。

このようなアプリについては、アプリの仕様を変更しない限り、その挙動の修正はできません。したがって、あまりおすすめ出来る方法ではありませんが、『ファイル仮想化』を適用しないようにするためには、C:\Program Files\○○ フォルダに管理者権限なしに書き込めるようにする方法が考えられます。

回避法4:管理者として実行する

管理者権限で起動することが前提のアプリケーションであれば、そもそも管理者権限で起動してしまえば良いという発想です。
『ファイル仮想化』『レジストリ仮想化』が適用される条件である「権限が起動時に昇格されないこと」に対応する回避法です。

ただし、このようにして起動したアプリケーションにはドラッグアンドドロップが受け取れないという制約があり、また、異常動作した場合に最悪『Windows』を破壊してしまう可能性もあるため、強くお勧めすることはできません。

あくまでも、最終手段的手法ではありますが、これで正常に動作しないアプリケーションは、そもそもUACや『ファイル仮想化』『レジストリ仮想化』が異常動作の原因ではないという可能性が考えられます。

まとめ

上記に挙げた回避法により、UACが原因で動作しないアプリケーションは正常に動作するようになるかもしれません。「かもしれない」というと、無責任な言い方かもしれませんが、それでも正常に動かない時は動かないのです。理由は様々ですが、どうしてもVista以降では動作しないアプリケーションについては、第1回で取り上げたように、用途を限定してXPを使い続けるしかありません。

ただ、そのような場合でも工夫すれば正常に使用出来る場合があります。「ソフト名 インストール Windows Vista|7|8」で検索すると情報が見つかるかも知れません。

今回は、あえてUACのあの鬱陶しいダイアログを回避する方法については取り上げませんでした。実際の所、本当に管理者権限が必要な場面というのは限られており、しょっちゅう管理者権限を要求するようなアプリケーションはあまり信頼できないからです。鬱陶しく思わせるところまでがUACの設計である、という話もあるぐらいですから、鬱陶しいと思ったら別のアプリケーションに乗り変えるチャンスなのかもしれません。

それでは1ヶ月後にお会いしましょう。

参考文献

ユーザー アカウント制御 (UAC: User Account Control) がアプリケーションに与える影響 – MSDN
http://msdn.microsoft.com/JA-jp/library/bb384608.aspx [リンク]

連載:さよならXP

第1回 サポート期限終了後もWindows XPを安全に使い続けるには
http://getnews.jp/archives/432529
第2回 ウィルスに感染したら気付くでしょ?  その慢心が命取り
http://getnews.jp/archives/452043
第3回 古いPCにWindows 8をインストール——ダメでした!
http://getnews.jp/archives/473408

画像:次のスクリーンショットを使用しています。
『Windows XP』、『Windows 8.1』 、『EXEpress CX』を使用したインストーラーの画面

「OPAP-JP」というサークルで、情報セキュリティの啓蒙を目的とした自主制作アニメ「こうしす!」を制作中。生産性は低いけど今日も頑張る。(※ 記事執筆活動はButameron個人として行っています。記事はOPAP-JPの公式見解を示すものではありません)

ウェブサイト: http://ch.nicovideo.jp/kosys

Twitter: opap_jp