Windowsセキュリティ・ワンポイントレッスン

第3回 ソフトウェア制限ポリシーによるマルウェア対策



Windows OSにはマルウェア対策に有効なさまざまな機能が実装されています。そのような機能の一つであるにもかかわらず、あまり一般に利用されていないのが「ソフトウェア制限ポリシー」です。今回はWindowsの標準機能である「ソフトウェア制限ポリシー」を使用したマルウェア感染対策について解説します。




ソフトウェア制限ポリシーとは


ソフトウェア制限ポリシー(SRP:Software Restriction Policies)とは、Windows XP以降に導入された「ソフトウェアの実行を制限する機能」のことです(各ホームエディションは除く)。

例えばみなさんが組織のシステム管理者だったとしましょう。組織内のエンドユーザが自分のWindows PC上に好き勝手なソフトウェアを入れて動かすことができてしまうと、困ってしまいますよね。ゲームソフトを入れて遊ぶくらいならまだましですが、場合によってはライセンス違反につながったり、コンピュータウイルスの感染を引き起こしたり、また不正アクセスツールを社内ネットワーク上で実行することも考えられます。

エンドユーザにそのようなことをさせない、つまりシステム管理者が許可したソフトウェア以外は起動することをシステム的に制限してしまうのがこのソフトウェア制限ポリシーという機能です[1]。


図1 ソフトウェア制限ポリシーの概念


ソフトウェア制限ポリシーでは、以下の4種類の方法で制限をかけることが可能です。

  1. ハッシュの規則
    • ファイルのハッシュ値(MD5またはSHA-1)とファイルサイズ、ハッシュアルゴリズムIDを指定(ファイルを指定することでハッシュ値が自動生成)
    • システムは実行の可否をハッシュ値に基づいて判定
    • ソフトウェアの更新等でファイルが変更された際にはハッシュの値が変化するため、再び規則を登録する必要あり
  2. 証明書の規則
    • コード署名したソフトウェア発行元の証明書を指定
    • 正しく署名されたプログラムファイルのみ実行を許可することが可能
  3. パスの規則
    • フォルダやプログラムファイルのパスを指定
    • フォルダの場合はサブフォルダ以下も含めたプログラムファイルが対象
    • UNCパス、環境変数、「*」「?」といったワイルドカードも使用可能
    • レジストリ値をフォルダパスとして使用するレジストリパス指定(例:%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir% → C:\Program Files)
    • 複数の規則に適合する場合は、最も具体的に指定している規則に従う
  4. インターネットゾーン(ネットワークゾーン)の規則
    • Windowsインストーラパッケージの実行について、Internet Explorerのセキュリティゾーンごとに許可あるいは制限を設定
ソフトウェア制限ポリシーは、動作を許可するソフトウェアを指定する「ホワイトリスト方式」と、動作を許可しないソフトウェアを指定する「ブラックリスト方式」の両方に対応していますが、安全性を重視する場合は前者を選択することが推奨されます。




マルウェア感染対策としての有効性


ウイルスなどのマルウェアの感染経路は多種多様ですが、その主要な一つとして不正なプログラムファイル(EXEやDLL、スクリプトファイル等)の実行があげられます。ユーザが意図的にそのプログラムを実行する場合(トロイの木馬)もあれば、意図せず勝手に実行してしまう場合(システムの脆弱性を利用)もあるでしょう。

つい先日のことですが、ほとんどのWindows OSに影響する「Windowsシェルの脆弱性[2]」が報告されました。この脆弱性は、不正に細工されたショートカットファイル(LNKやPIF)をエクスプローラなどで参照することにより、任意のDLLファイルが自動的にロードされてしまうというものです。現時点(2010年7月)ではセキュリティ更新プログラムはまだ提供されておらず、いわゆるゼロデイ攻撃としてこの脆弱性を利用したマルウェアが出回っています[3]。


図2 Windowsシェルの脆弱性によるマルウェア感染の仕組み(USBメモリ経由の例)


この脆弱性によるマルウェア感染は、USBメモリのみならず、共有フォルダ(WebDAV等)、Webアクセス、Officeドキュメント経由などの可能性も指摘されていますが、いずれにせよこの脆弱性を利用した攻撃が成功するポイントは、不正なDLLファイルがエクスプローラ等によってロードされる点にあります(DLLがロードされた時点で自動的に内部の不正コードが実行するため)。

外部からやってきた不正な実行ファイルが、何らかの脆弱性あるいはユーザの操作により起動してしまうことでマルウェアに感染するケースは、この他にも以下のような例があげられます。

  • USBメモリの自動実行機能(Autorun)による感染(第2回参照)
  • メールソフトの脆弱性により、電子メールの添付ファイルが自動起動
  • Webブラウザの脆弱性により、不正な実行ファイルをダウンロードして実行
  • ファイルのアイコンや拡張子を偽造し、ユーザを騙して実行させる
  • ユーザが持ち込んだソフトウェアが実はトロイの木馬だった
ソフトウェア制限ポリシーによってシステム管理者が許可したプログラムファイル以外は実行(DLLの場合はロード)できないようにしておけば、ユーザが意図するかしないかにかかわらず、このようなタイプのマルウェア感染の多くは未然に防ぐことが可能になります。


図3 許可されていないソフトウェアの実行を防ぐことでマルウェア感染を予防


ただしソフトウェア制限ポリシーができることは、許可されていないプログラムファイルの起動(あるいはDLLファイルのロード)の防止に限られます。例えば文書ファイルや画像ファイルを利用したバッファオーバーフロー攻撃など、起動を許可されたプログラムに不正なプログラムコードを送り込んで実行させるような攻撃は防ぐことができません。




ソフトウェア制限ポリシーの設定例


ソフトウェア制限ポリシーは、ドメイン環境下ではグループポリシーでドメインメンバーに展開することができますし、スタンドアローン環境下でもローカルセキュリティポリシーで設定することが可能です。

以下に、Windows 7のスタンドアローン環境での設定例を示します。

  1. ソフトウェア制限ポリシーの生成

      「管理ツール」から「ローカルセキュリティポリシー」を開き、「ソフトウェアの制限のポリシー」を右クリックして「新しいソフトウェアの制限のポリシー」を選択します。

      図4 ソフトウェア制限ポリシーの生成


  2. セキュリティレベルの既定値の設定

      左ペインで「セキュリティレベル」を選び、右ペインで「許可しない」のプロパティを開いて「既定値として設定」します。これにより、指定したソフトウェア以外は実行できないホワイトリスト方式になります。

      図5 セキュリティレベルの既定値の設定


  3. 規則の追加

      左ペインで「追加の規則」を選び、右ペインを右クリックして新しい規則を設定することにより、実行を許可するソフトウェアを指定します。デフォルトとして以下二つの「パスの規則」が設定されています。
      %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot% → 制限しない(許可)
      %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir% → 制限しない(許可)
      
      これらの規則は、システムルートフォルダ(例:C:\Windows)やプログラムファイルフォルダ(例:C:\Program Files)の下にあるソフトウェアの実行を許可するためのものです。外部媒体やネットワークドライブ、ユーザごとの一時フォルダなどが除外されますので、マルウェア感染対策の観点でいえばこのデフォルトの規則のみでもかなりの効果が期待されます。

      図6 規則の追加


  4. 強制の設定

      左ペインで「ソフトウェアの制限のポリシー」を選び、右ペインで「強制」のプロパティを開いて、以下の設定を行います。
      ソフトウェアの制限のポリシーの適用 → ソフトウェアのファイルすべて
      ソフトウェアの制限のポリシーの適用ユーザー → ローカルの管理者を除くすべてのユーザー
      
      「ソフトウェアのファイルすべて」を指定することにより、DLLを含むすべての実行ファイルがチェックされるようになります。不正なDLLのロードを防ぐためにはこの選択が必要になりますが、一方でプログラム起動時にロードされるDLLファイルすべてが検査されるためシステムのパフォーマンスに影響するといわれています。

      「ローカルの管理者を除くすべてのユーザー」の指定により、ローカル管理者権限でログオンしたユーザをソフトウェア制限ポリシーの適用外にすることができます。

      図7 強制の設定


  5. ファイルの種類の設定

      右ペインで「指定されたファイルの種類」のプロパティを開いて、実行可能コードとみなすファイルの種類を設定します。デフォルトで各種の標準的な実行可能コードのファイルタイプが登録されています。

      デフォルトで登録されているファイルタイプの中には「ショートカット」(拡張子LNK)がありますが、パスの規則でプロファイルフォルダの実行が制限されている場合、デスクトップやスタートメニューのショートカットからプログラムが起動できないという問題が発生します。その場合はこのウィンドウで拡張子「LNK」を選択し、「削除」することで対応できます。ショートカットをソフトウェア制限ポリシーの検査対象から除外することは、ある種のリスクを伴いますが、リンク先の実行ファイルが適切に制限されている限り通常は問題ないでしょう。

      図8 ファイルの種類の設定





ソフトウェア制限ポリシーの使用上の注意点


どのようなセキュリティ機能についてもいえることですが、ソフトウェア制限ポリシーは万能ではありません。設定や運用に不備があると有効性が限定されたり、利便性が著しく損なわれたりします。ここではソフトウェア制限ポリシーを使用する上での注意点をいくつか述べたいと思います。


計画性を持って十分にテストしてから展開する


ソフトウェア制限ポリシーを導入する際には、ユーザに対しどのようなソフトウェアの実行を許すかについて、あらかじめ明確にしてポリシー設計する必要があります。ユーザが使用するPC環境の標準化を行い、アプリケーションソフトのインストール先や、ログオンスクリプトの設置場所などの統一化を図ることが、効率的なポリシー展開には欠かせないでしょう。

また事前に十分テストを行い、不具合が発生するソフトウェアがないかどうか、ユーザの利便性が適切に確保されているかどうかを確かめることも重要です。ソフトウェア制限ポリシーには詳細なログを記録する機能があります。このログを見ればどのプロセスが何を起動しようとして成功/失敗したという情報がわかりますので、テストする際には非常に有効な手段となります[4]。


利用者は一般ユーザとしてログオンする


システムの利用者は、基本的に一般ユーザ権限でログオンしてシステムを使用することが求められます。利用者に管理者権限でのログオンを許した場合、ソフトウェア制限ポリシーの設定が変更されてしまうかも知れません。また管理者権限でログオンすれば、パスの規則を回避することは極めて容易です。


「パスの規則」の思わぬ落とし穴(その1)


ソフトウェア制限ポリシーのパスの規則は、「実行が許可されたフォルダやファイルには利用者は書き込めない」ということが前提になっています。パスの規則で実行を許可したフォルダの配下に利用者が書き込める場所があった場合、利用者は規則を回避するためそこに実行させたいプログラムファイルをコピーして起動させることが考えられます。

例えばパスの規則で「C:\Windows」以下の実行を許可したとしましょう。「C:\Windows」の下は基本的には一般ユーザはファイルを作成できないようなアクセス許可の設定がされているのですが、一部のフォルダ(「C:\Windows\Temp」等)は一般ユーザでもファイルの作成や実行ができてしまいます。このようなフォルダについては、個別にパスの規則を設定し、ソフトウェアの実行を制限させる必要があります。

また「C:\Program Files」配下についても、インストールされたアプリケーションによっては一般ユーザに書き込み許可を与えたフォルダを作成する場合があるので注意が必要です。このような場合はフォルダのアクセス許可の設定を見直した方が良いかも知れません。


「パスの規則」の思わぬ落とし穴(その2)


さらにパスの規則では、特定の拡張子を許可する設定を追加した場合、実行可能ファイルを当該拡張子に変更すると起動できてしまうという問題があります。

例えばショートカット(拡張子「LNK」)の実行を許可するために「*.lnk」 ⇒ 「制限しない」というパスの規則を追加したとします。これで確かにショートカットは問題なく動作するようになりますが、ユーザが持ち込んだ実行ファイル(拡張子「EXE」)の拡張子をLNKに変更すると、その実行ファイルも起動可能になってしまいます。

元来ソフトウェア制限ポリシーは、拡張子が変更されていてもファイル自体が実行ファイルであれば拡張子にかかわらず正しく判断するように作られています。しかしパスの規則で特定の拡張子を許可した場合、まず拡張子で判断し、「制限しない」になっているため実行を許してしまうのでしょうね。



ソフトウェア制限ポリシーを厳密に運用することは、特に大きな組織ではいろいろと難しい点も多いと考えられます。しかしWindowsの標準機能を用いたプロアクティブなマルウェア対策として、非常に優れた効果を発揮することは間違いありません。多層防御の一つとして、ぜひ導入を検討していただければと思います。

Windows 7以降、ソフトウェア制限ポリシーの後継機能としてアプリケーション制御ポリシー(AppLocker)が追加されました(UltimateおよびEnterpriseエディション)。AppLockerはソフトウェア制限ポリシーをさらに強化し、より使いやすくしたものです。AppLockerについてはまたの機会に紹介しましょう。



[1]  Windows XPセキュリティガイド
     第6章 Windows XPクライアントのソフトウェア制限ポリシー
     http://technet.microsoft.com/ja-jp/library/dd347746.aspx

[2]  マイクロソフト セキュリティ アドバイザリ(2286198)
     Windowsシェルの脆弱性により、リモートでコードが実行される
     http://www.microsoft.com/japan/technet/security/advisory/2286198.mspx

[3]  Preempting a Major Issue Due to the LNK Vulnerability - Raising Infocon to Yellow
     http://isc.sans.edu/diary.html?storyid=9190

[4]  ソフトウェア制限ポリシーを使用したアプリケーションのロックダウン
     http://technet.microsoft.com/ja-jp/magazine/2008.06.srp.aspx


2010年7月執筆
塩月 誠人
ネットワークセキュリティコンサルタント
合同会社セキュリティ・プロフェッショナルズ・ネットワーク