セキュリティ ウォッチWindows Vista の Services Hardening

Wole Moses

いくつかの強力なウイルスやワームが Windows システムに大きな損害を与え、IT 部門を混乱に陥れ、企業や個人に修復のための多額の出費を強いた直後の 2002 年初頭、マイクロソフトは信頼できるコンピューティング イニシアチブ (Trustworthy Computing Initiative) を発表しました。この中で、マイクロソフトは

これまでのセキュリティ対策の至らなさを認め、充実した機能や使いやすさを強調するソフトウェア開発から、ソフトウェアのセキュリティと整合性に重点を置く開発へと、速やかに正しい方向へ舵を切りパラダイムを変えました。2003 年 8 月に猛威をふるった Blaster ワームが、セキュリティに対するこの方針をさらに推進させました (Blaster 関連の話題については、見出し一覧の「クローンの攻撃」を参照してください)。

信頼できるコンピューティング イニシアチブの柱は、セキュリティ保護のためのコーディング哲学である「設計による安全性確保」 (Secure by Design)、既定の設定で Windows® の各コンポーネントのセキュリティが最大限強化されることを保証する「既定設定による安全性確保」 (Secure by Default)、企業や個人による Windows インフラストラクチャのセキュリティ保護を支援するツールと規範ガイダンスの作成に関連する「導入/展開時の安全性確保」 (Secure in Deployment) です。

全般的に見て、信頼できるコンピューティング イニシアチブは、セキュリティの大幅な向上につながりましたが、残念ながら、イニシアチブ開始の 2 年前にリリースされていた Windows XP はその恩恵を十分に受けることができませんでした (Service Pack 2 (SP2) にはこの哲学が大幅に採用されていますが、Windows XP をこのイニシアチブに沿って完全に作り替えることはできませんでした)。

このため、信頼できるコンピューティングの目標に完全に沿った最初のマイクロソフト オペレーティング システムは Windows Vista™ になります。Windows Vista Services Hardening (図 1 参照) は、信頼できるコンピューティング イニシアチブの既定設定による安全性確保の原則を具体的に実装したものであり、現存する悪意のあるソフトウェアの多くが実行する不適切なサービス動作を防ぐ重要な新機能です。Service Hardening により、マイクロソフトは Windows サービスの既定の動作とセキュリティ プロファイルを変更する点において大きな進歩を遂げました。

Figure 1 既定設定による安全性確保 : Windows サービス

機能 説明 成果
最小限の特権 Windows Vista サービスは、実行に必要な最低限の特権を使用するよう構成されています。 Windows Vista は、Windows サービスに付与される既定のセキュリティ特権のレベルを低くし、悪意のあるソフトウェアによる潜在的な影響を抑えます。
サービスの分離 サービス SID を使用して、サービスを特権の低いアカウントで実行できるようにします。 Windows Vista は、サービスの SID に基づいてリソースへのアクセスを制限することで、悪意のあるソフトウェアによる操作を封じ込めています。
ネットワーク アクセスの制限 すべての Windows Vista サービスでは、ネットワーク制限が既定で実装されています。 Windows Vista では、悪意のあるソフトウェアがサービスを使用して不正なネットワーク アクティビティを実行することを防ぎます。
Session 0 分離 Session 0 はサービス専用に予約されています。 Windows Vista では、悪意のあるソフトウェアは特権の高いサービスと同じセッションで実行できないので、メッセージ ベースの攻撃で特権の高いサービスを乗っ取ることができません。

サービスの危険性

NT サービスとして知られてきた Windows サービスは、稼働期間の長い実行可能アプリケーションであり、専用の Windows セッションで実行されています。サービスは、コンピュータの起動時に自動的に開始でき、一時停止や再開が可能です。また、通常はユーザー インターフェイスは表示されず、ログオンしたユーザーとも既定のコンピュータ アカウントとも違うアカウントのセキュリティ コンテキストで実行できます。このため、Windows サービスは、ある種のアプリケーション開発やそうしたアプリケーションを必要とするエンド ユーザーにとって、非常に便利なものです。その一方で、こうした機能と柔軟性により、従来の Windows サービスは脆弱でもありました。これにはいくつかの理由があります。

まず、これまで、Windows サービスはローカル システム アカウントなどの特権の高い Windows アカウントで実行されるのが一般的でした。ローカル システム アカウントで実行されているサービスが悪意のあるソフトウェアによって悪用されると、システムはそのソフトウェアの意のままに攻撃を受ける可能性が非常に高くなります。たとえば、Windows XP のリモート プロシージャ コール (RPC) サービスはどうでしょう。Windows XP SP2 より前は、RPC サービスはローカル システム アカウントで実行されていたので、Blaster や Welchia などのワームは RPC の脆弱性を悪用して管理タスクを実行できました。

次に、サービスの多くがネットワーク対応なので、悪意のあるソフトウェアが、ネットワーク経由の受信接続を作成することによってサービスを悪用したり、感染したサービスが、送信接続を作成して他のシステムを感染させたりキーストロークを盗んで転送したりするなどの不正行為を働いたりするおそれがあります。今日のほとんどのワームや悪意のあるソフトウェアによる感染は、何らかの形でネットワーク接続を介して発生しています。

最後に、サービスは実行期間が長く、システムが起動されてからシャットダウンされるまで実行されるのが普通です。これは悪意のあるソフトウェアの作成者にとって好都合です。なぜなら、システムが動作している間中サービスの欠陥を探すことができ、不法行為を実行できる時間を十分確保できるからです。

クローンの攻撃

その男は大勝利を目前に控えていました。なにもかも計画どうりに進めば、世界中の数十万の Windows システムを思いのまま動かすことができるようになり、好きな指令を出しては、椅子にゆったり腰掛けて、世界中にあるコンピュータがあらゆる指令に忠実に従うのを眺めていられるのですから。

男がとった方法は、根気が要りますが、発見されづらいものでした。まず、いくつかのコンピュータ システムに探りを入れ、脆弱なエントリ ポイントを探しました。望ましいエントリ ポイントを探すのに、それほど時間はかかりませんでした。既知の脆弱性に対するセキュリティ更新プログラムが適用されていないシステムに侵入する方法を、男は完璧に把握していたのです。

標的となった脆弱性が災いの元となったのは、そこから侵入されると、システムに対する管理権限が男の手に渡ってしまうからでした。普通のアカウントを使えるようになるのとは訳が違います。Windows で最も強力な管理アカウントを操作できるようになったのです。これで、思いつくまま好きなことができるようになりました。

男はしばらく考えてから、セキュリティ更新プログラムが適用されていない脆弱なコンピュータ用に作った悪意のあるコードを試してみました。すると、うまく動作したのです。たったこれだけで、男は侵入したコンピュータに対する無制限の特権を手に入れました。そしてそれを利用して、侵入したコンピュータにトロイの木馬コードをダウンロードしてインストールさせ、レジストリを変更し、コンピュータを再起動させ、感染したシステムを自分に代わって忠実に指示を実行するように仕立て上げました。男が行ったレジストリ変更により、侵入されたコンピュータでは起動されるたびに悪意のあるソフトウェアが実行されるようになりました。

ここで、男の意図がはっきりしてきました。感染したコンピュータは、接続されているネットワーク上に存在する他のすべてのコンピュータについて、特定のネットワーク ポートに探りを入れ始めました。目的のネットワーク ポートが開いていたコンピュータのセキュリティが脆弱だった場合は、そこにトロイの木馬コードがダウンロードされてインストールされました。レジストリも同じように改ざんされました。このサイクルが次々と繰り返され、攻撃クローンの大軍が作り上げられました。その日のうちに、世界中の何千という Windows システムが、男の指示以外にはまったく従わない邪悪なクローン軍に加わりました。

それでもまだ不満だったようで、男は照準をマイクロソフトの Windows Update サイトに合わせ、2003 年 8 月 15 日に、世界中のコンピュータが脆弱性修正プログラムをダウンロードできなくするサービス不能攻撃をしかけるよう、クローンに命じました。ちなみに、その脆弱性修正プログラムは、公開されてから数か月以上経っていたものでした。

ここまでお話すれば、これが 2003 年 8 月に世界中の Windows コンピュータを襲った MS Blaster ワーム大流行の顛末であることにお気付きでしょう。Blaster による攻撃は、Windows に対する最も深刻な攻撃の 1 つに数えられており、何十億ドルという損害を与えました。MS Blaster は感染したコンピュータに対して絶大な力を持つのですが、皮肉なことに、その実装は実にシンプルでした。

Blaster のしくみ

Blaster とその派生物は、Windows RPC サービスの脆弱性を使用してバッファ オーバーフローを引き起こします。この脆弱性を突くことに成功した攻撃者は、感染したシステムでローカル システム権限を使用してコードを実行して、プログラムをインストールしたり、データを表示、変更、または削除したり、完全な特権を持つ新しいアカウントを作成したりできるようになります。

Blaster は、ネットワークを自動的にスキャンして、TCP ポート 135 が開いているコンピュータを探します。そうしたコンピュータが見つかると、Blaster は RPC の脆弱性の悪用を試みます。成功すると、そのコンピュータのポート 4444 に接続し、Trivial File Transfer Protocol (TFTP) を起動させ、感染したシステムから MSBLAST.EXE という自身のコピーをダウンロードさせます (TFTP は、Windows 2000、Windows XP、および Windows Server 2003 にオペレーティング システムの一部として含まれています)。攻撃元の感染したシステムは、新たに感染したコンピュータに MSBLAST.EXE を起動するよう指令し、感染したコンピュータは攻撃側に加わります。また、Blaster はコードを HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run レジストリ キーにも書き込み、そのコンピュータが起動されるたびに自身が実行されるようにします。

Services Hardening

Windows Vista では、サービスの最小限の特権での実行、サービスの分離、ネットワーク アクセスの制限、Session 0 分離という 4 つの方法でサービスのセキュリティを強化しています。以下でそれぞれについて説明します。

最小限の特権での実行 多くの Windows サービスが、Windows で最も強力なアカウントであるローカル システム アカウントのコンテキストで実行されていました。ローカル システム アカウントのユーザー権限や特権を使用すると、ほとんどすべてのシステム オブジェクトや他のユーザーのプロファイルにアクセスしたり、ユーザーを偽装したり、HKLM\SECURITY などの重要なレジストリ キーを開いたり、コンピュータの資格情報をリモート サーバーに送信したりできます。悪意のあるソフトウェアの作成者はこのレベルで Windows に対してアクセスと制御ができることを好むので、ローカル システム セキュリティのコンテキストで実行されているあらゆるサービスが魅力的な標的になります。

現実には、多くの Windows サービスがローカル システム アカウントで実行されるよう構成されていますが、そのほとんどは、ローカル システム アカウントにしかない特権のうちの一部だけを必要としています。残念ながら、Windows XP や以前のバージョンの Windows は「全部かゼロか」で動作するので、必要な特権だけを選択するメカニズムはありません。こうして、多くの Windows サービスが、不要なセキュリティ特権を持ったまま実行されています。

Windows Vista Service Hardening では、この問題に対応するため、最小限の特権という概念をサービスの構成に導入しています。最小限の特権を使用することで、サービスは、ログオンに使用するアカウントに割り当てられている既定の特権をすべて持つのではなく、機能するために必要最小限の特権だけを持って実行されるようになります。

たとえば、あるサービスでは、オペレーティング システムの一部として動作する必要があるが、セキュリティ トークンを作成する必要がないとします。最小限の特権を使用すると、トークン作成特権を除外できます。これにより、後でサービスに脆弱性が見つかるような事態になっても、攻撃による被害が抑えられます。開発では、SC.exe (図 2 参照) などのツールを使用したり、プログラム的な方法を使用するなどして、個々のサービスで必要となる特権を定義および指定できます。Windows Vista のすべてのインストール済みサービスでは、既定で特権が最小限になっています。特別な構成をする必要はありません。

図 2 SC コマンド オプションは Windows Vista のサービス特権を定義します。

図 2** SC コマンド オプションは Windows Vista のサービス特権を定義します。 **(画像を拡大するには、ここをクリックします)

サービスの分離 Windows Vista より前の Windows では、サービスで特権オブジェクト (重要なレジストリ キーやファイルなど) にアクセスする必要が生じた場合、サービスがアクセス権を取得する方法には次の 3 つがありました。ローカル システム アカウントを使用してオブジェクトにアクセスする方法、レジストリ キーまたはファイルのセキュリティを低くして特権レベルの低いアカウントでもアクセスできるようにする方法、およびサービス専用のアカウントを作成して、オブジェクトへのアクセスをそのアカウントだけに許可する方法です。

どの方法も機能しますが、それぞれに基本的な問題があります。最初の 2 つはそもそも危険性が高く、最後の 1 つも新しいアカウントのパスワードを手動で管理する必要が生じることが頭痛の種になります。

たとえば、ウイルス対策プログラムが、ウイルス シグネチャ ファイルやウイルス対策ソフトウェア関連のレジストリ エントリなど、重要なシステム オブジェクトにアクセスする必要があるサービスをインストールするとします。ウイルス対策ソフトウェアが、必要なオブジェクトにアクセスするのに、ローカル システム アカウントや、その他の組み込みセキュリティ アカウントを使用するよう構成されていた場合、こうしたアカウントを使用する Windows サービスが悪意のあるソフトウェアによって感染すると、悪意のあるソフトウェアが、ウイルス対策シグネチャ ファイルにアクセスして書き換えたり、レジストリ設定を変更してウイルス対策ソフトウェアの動作に影響を及ぼしたり、ウイルス対策サービスそのものをシャットダウンしたりする可能性があります。現実にも、今日の悪意のあるソフトウェアはまさにこうしたテクニックを使用して機能したり自身の存在を隠したりしています。

Windows Vista では、セキュリティや管理に対するこうした懸念にサービスの分離で対応しています。サービス セキュリティ ID (SID) を含むアクセス制御エントリを使用して、ファイルやレジストリ キー アクセスなどのリソースのセキュリティを保護することで、サービスがオブジェクトを排他的に使用できるようになります。上記の例で説明したウイルス対策サービスは、特権レベルの低いアカウントで実行されても、重要なシグネチャ ファイルやレジストリ キーへのアクセスを確保できます。こうしたアクセスを実現するには、(特権の低いアカウントで実行されている) ウイルス対策サービスに Windows Vista によって SID が割り当てられる必要があります。SID が割り当てられると、ウイルス対策プログラムは、ファイル システムとレジストリ オブジェクトのアクセス制御リスト (ACL) を変更して、ウイルス対策サービスに排他的なアクセス権を付与できます。

もう 1 つ例を示します。2003 年のことですが、Welchia ワームが RPC の脆弱性を悪用して、自身を %System%\Wins\Dllhost.exe に書き込みました。また、感染した Windows システムに自身のサービスをインストールするために、キーを HKLM\SYSTEM\CurrentControlSet\Services に追加しました。しかし、Windows Vista であれば、どちらの場所にも特定の適切なサービスしかアクセスできないようにし、サービスにはアクセス用に特権の低いアカウントを付与することで、Welchia を封じることができたでしょう。

ネットワーク アクセスの制限 Windows Vista には、Windows XP SP2 ファイアウォールで実装された機能の上に構築された新しいファイアウォールが導入されています。主な新機能には、送信フィルタと IPsec 統合があります。また、新しいファイアウォールは Windows Vista Services Hardening と統合されており、悪意のあるソフトウェアが改ざんされた Windows サービスを使用して不適切なネットワーク アクティビティを実行することが困難になっています。

Windows Vista ファイアウォールでは、サービスの動作に制限を加えるネットワーク ファイアウォール ポリシーが Windows サービスに割り当てられます。たとえば、プラグ アンド プレイのようなサービスには、ネットワーク ポートを介した通信が不要なので、「ネットワーク アクセスなし」の制限が割り当てられます。この制限が適用されていると、そのようなサービスを標的にした改ざんでは、ネットワーク ベースのアプローチでは目的のサービスに到達できません。制限が適用されたサービスで通信しようとしても、それが送信でも受信でも、ファイアウォールによってブロックされます。ネットワークへのアクセスが必要なサービスについては、特定のポートだけを使用するよう構成できます。開発では、この機能を利用して、サービスのネットワーク アクセスを制限できます。

ネットワーク関連の制限を Service Hardening と組み合わせることで、サービス ベースの潜在的な攻撃に対する堅牢な防御を実現できます。これは、Windows の以前のバージョンに比べて大きな進歩です。これまでの Windows には、どのサービスがどのような方法でどこからネットワークと通信できるかを指定する方法がありませんでした。一方、Windows Vista Firewall Network 制限を RPC サービスに適用することで、Blaster、Sasser、Welchia などのウイルスが、感染したサービスを使用して他のコンピュータと通信することはできなくなります。

Session 0 分離 Windows XP のユーザーの簡易切り替えでは、各ユーザーを異なる Windows セッションに割り当てることで、ユーザーの同時ログオンを実現しています。Session 0 は起動時に作成され、その後も必要に応じてセッションが追加されます。サービスは常に Session 0 で実行されますが、Windows Vista より前では、ユーザー アプリケーションも Session 0 で実行できます。しかし、ユーザー アプリケーションと Windows サービスが同じセッションで実行されるということには、セキュリティ リスクが伴います。なぜなら、サービスは特権レベルで実行されているので、悪意のあるソフトウェアが自身の特権レベルを上げる手段として標的にするからです。

Windows Vista では、こうしたセキュリティ リスクに対応するため、Session 0 をサービス専用にしてアプリケーションは別のセッションで実行し、また Session 0 を非対話型にしました (つまり、サービスは、ユーザーがアクセスできるダイアログ ボックスやプロンプトなどのユーザー インターフェイスを作成できません)。こうした変更を伴うので、Session 0 の分離は、Windows サービスまたはドライバの開発においてアプリケーションの互換性に影響を与えます。

まとめ

Windows Vista は、マイクロソフトがリリースする初めての完全な信頼できるコンピューティング デスクトップ オペレーティング システムで、Windows ユーザーの保護を目指して進歩していくことでしょう。当然のことながら、コンピュータ セキュリティはますます重要になり、悪意のあるソフトウェアの作成者は Windows を悪用する新たな方法を探したり、試したり、研究したりし続けることでしょう。それでも、Windows Vista の新しい Service Hardening 機能により、既定のセキュリティ設定の強化や攻撃を受ける可能性を低減することで、敷居は一段と高くなっています。これらの大幅な機能強化の詳細については、https://www.microsoft.com/japan/whdc/system/vista/Vista_Services.mspx を参照してください。

Wole MosesMicrosoft Regional Windows Lead で、在籍 8 年のベテランです。現在 Wole は、トルコのイスタンブールを拠点に、急速に拡大する中東およびアフリカ市場の顧客に対し、IT インフラストラクチャの最適化と最大限のセキュリティを両立させるため、マイクロソフト ベースのソリューションの構想と設計を支援しています。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.