Internet Watch logo
記事検索
バックナンバー
(10)Web閲覧だけで感染するウイルス対策を考える
[2004/1/9]
(9)セキュリティ修正パッチ適用のススメ(後編)
[2003/12/19]
(8)セキュリティ修正パッチ適用のススメ(前編)
[2003/12/12]
(7)人間の対策はできているか
[2003/12/5]
(6)サービスの取捨選択を
[2003/11/28]
(5)モバイルPCの危険
[2003/11/12]
(4)LAN内部からの汚染をさせない工夫〜穴になりやすい無線LAN
[2003/10/29]
(3)汚染エリア・クリーンエリア、切り分けのススメ
[2003/10/24]
(2)パーソナルファイアウォールのススメ
[2003/10/15]
(1)Blasterの教訓からウイルス対策を考える
[2003/10/10]

新しいウイルス対策を考える

(6)サービスの取捨選択を

TEXT:大和 哲

 Blasterタイプのウイルスは、ネットワーク上にあるコンピュータの、ネットワークインターフェイス、それも特定のポートに向けてウイルスデータを投げる。このデータを受け取ったコンピュータがウイルスに感染するわけだ。

 ただし、感染プログラムが正しく動くには、「(1)Blasterの教訓からウイルス対策を考える」でも説明したように、以下の条件が必要となる

  • 特定のサービスが特定のポートで動いている
  • そのサービスにセキュリティホールがある
  • 対象とするマシンのネットワークインターフェイスのポートがネットワーク上から叩ける

 さて、前回までは主に「感染元PCから、自分のPCのポートを見えなくする」という方向でウイルス感染予防の方法を考えてきた。

 しかし、上に挙げた3つの条件がウイルス感染には必要であるということを考えると、このほかにも「サービスを動かさない」「サービスからセキュリティホールをなくす」という方向でも予防ができることがわかるだろう。そこで今回は、こちらの方向からウイルス感染予防を考えてみよう。



サービスとは

 サービスとは、OSのバックグラウンドで実行される裏方的なプログラムだ。しかし、これは非常に重要な機能で、たとえば、ネットワークサーバー的な機能や、クライアント機能、データベースの問い合わせに応えるなどと、特にネットワーク的な機能を多く実現している縁の下の力持ちだ。

 具体的には、Windowsメッセンジャサービスがこのサービスによって動いている。たとえば、他のマシンから、以下のようなコマンドを入力したと考えてみよう。

  net send マシン名 メッセージ内容

 メッセージデータが、コマンド実行マシンから指定したマシンに投げられ、それを受け取ったサービスプログラムがデスクトップ上にメッセージ内容を表示させる。

 なお、ここでいうメッセンジャサービスは、Windows MessengerやMSN MessengerなどのIM(インスタントメッセージング)アプリケーションとはまったく別物である点に注意してほしい。IMアプリケーションでは、メッセンジャサービスは利用していない。

net sendコマンドによって、あるマシン上に表示されたメッセージの例

 この機能を実現しているのがWindowsメッセージングサービスで、このプログラムは常にOSの裏で動いており、ポートにメッセージデータが届くのを待っている。そして、サービスが待ち受けているポートにメッセージデータが投げられると、このデータを受け取って、デスクトップ上にメッセージ内容を表示するのだ。

Windowsメッセージングサービス

 このWindowsメッセージング機能は、実際にはめったに使われない機能だが、Windows XPやWindows 2000といったWindows NTを基礎としているOSでは、OSをインストールしたデフォルトの状態でサービスプログラムが起動するようになっている(2003 Serverではデフォルトで無効になっている)。

 ちなみに、このようなバックグラウンドでプログラムが動いてネットワークサーバーなどの機能を実現する仕組みは、Windows(NT)系以外のOSでもよくあるもので、たとえばUNIX/Linux系のOSではdeamonプログラムと呼ばれるものがやはりバックグラウンドで実行されている。

 このように、縁の下の力持ち的に役立ってくれているサービスプログラムだが、これには問題もある。Windows系OSでは、あまりにも多くのサービスがデフォルトで起動していることだ。

 まず、ユーザーも知らないままに多くのサービスが起動している。たとえば、さきほどのWindowsメッセージングサービスなどは、多くのユーザーは知らないままに動いているはずだ。メッセージングサービスでは(少なくとも正常に動いていれば)バイナリデータが送りつけられたり、コマンドが実行されることはないものの、サービスの中には、リモートデスクトップサービス、ターミナルサービスのように悪用されたり、そのような危険動作をしかねないものもある。

 さらに問題なのは、プログラムにセキュリティホールがあった場合だ。Blasterの時のように、セキュリティホールめがけてウイルスデータが投げられて、簡単にPCがウイルス感染しかねない。

 逆に言えば、もし、自分にとって不要なサービスがあるなら、あらかじめ止めてしまっておけば、未知のウイルスがそのサービスを悪用することもできなくなるし、サービスのセキュリティホールを利用した感染方法が使われることもなくなる。つまり、不要なサービスはあらかじめ止めてしまうのがウイルス対策としても有効なのだ。

 一般的にサーバー構築の際などに(Windowsに限らず、Linux系のOSでも)指摘されることだが、それほど知識を必要とせずにOSをインストールしただけでどんな機能でも使えるように、と「簡単なOS」を目指すあまり、Windowsを始めとするメジャーなOSでは多くのサービスプログラムをデフォルトで起動させている。

 しかし、これはセキュリティという面で考えるとあまり良いことではない。なぜなら、起動しているサービスが多ければ多いほど、セキュリティホールをさらす原因になる。さらに、ユーザー自身は自分のマシンがどんなサービスをインターネット上にさらしているのか、ということに無自覚なまま無防備にポートをさらしてしまうことになりかねないからだ。

 そこで、セキュリティの必要なサーバー構築の際には、まずサービスやサーバープログラムを最低限だけ動かして、必要なものだけを追加していくという方法を取ることが多い。

 一般ユーザーでそこまでする必要があるかは疑問だが、とりあえず、現在起動しているサービスの一覧を見直してみるくらいはやってみるといいだろう。

 ただ、このサービスを停止することをもってウイルス予防とする方法は、ウイルス対策ソフトを利用することや、ポートを塞ぐ作業と比べるとかなり効果は小さいものとなる。というのも、前述のようにサービスの中には、OSやユーザーの使用するアプリケーションの機能の一部を担っているため、止めることができないサービスも多く存在する。こうした停止できないサービスを狙い撃ちされたらアウトだからだ。従って、サービスの停止のみをもってウイルス対策とするのではなく、ウイルス対策ソフト、ファイアウォールなど他のウイルス対策の手段も合わせて取る必要がある。



サービスを起動をやめるには

 Windowsの仕組みの1つであるサービスの起動をやめさせるには、Windowsのコントロールパネルから設定を行なう。Windows XPの場合、コントロールパネルの「管理ツール」で「サービス」を選ぶことで、サービスの選択画面が表示され、OSで利用できるサービスの一覧が表示される。

管理ツールよりサービスの一覧を表示させる

 一覧には、サービスの名前と説明、状態、スタートアップの種類、ログオンが項目表示される。一覧で表示された名前を選択するとWindows XPのサービスツールの場合、それに対応した説明が左に表示される。

 状態表示が「開始」となっているものが、現在実行中のサービスだ。スタートアップの種類が「自動」になっているサービスは、Windowsの起動と同時に自動的にプログラムがバックグラウンドで動くように設定されているものになる。

 「手動」になっているものは、Windows起動時には自動実行されない。サービスプログラムを起動するには、この画面からサービスを選んで手動で起動させることになる。

 また、「無効」になっているものは、Windows起動時に実行されず、手動起動も、他のサービスからの呼び出しによる起動も行なわれない。このサービスプログラムを起動させるには、手動か自動に変更してから、手動で起動するかOSを再起動することになる。

 つまり、サービスを停止するには、「手動」あるいは「無効」の状態にすればいいことになる。とりあえず「手動」にして様子をみて、問題がなさそうなら「無効」にする方が安全だろう。

 たとえばnet sendで送られたメッセージを表示させるのを止めたいのであれば「Messenger」を選択して「手動」または「無効」にする。

 一覧から「Messenger」を選び、ダブルクリックすると、このサービスのプロパティが表示される。スタートアップの種類は「自動」、現在のサービスの状態は「開始」が表示されているはずだ。これは、サービスがWindows起動と同時に自動起動する設定であること、そして現在実際にバッググラウンドでこのサービスのプログラムが動いていることを示しているわけだ。

「Messenger」を選択、プロパティを表示する

 まず、現在OSのバックグラウンドで動いているサービスプログラムを一旦止めよう。

 「停止」ボタンをクリックする。するとサービスプログラムが止まり。現在のサービスの状態欄の表示が「停止」になる。

 ここで、スタートアップの種類欄を「手動」にするとこのサービスを手動での起動設定に、「無効」にすると再びユーザーが指定するまで動かないような設定にすることができる。



止めてもいいサービスはどれなのか?

 さて、サービスの止め方はわかったが、どのサービスを止めればいいだろうか。

 繰り返しになるが、Windows XP/2000といったNT系OSにおいては、サービスプログラムは必須だったり、重要な位置を占めるものも多く、全てのサービスを止めてしまうことはできない。止めてしまえば、それはそのままOSの機能不全、つまり、おおざっぱにいえば「PCがマトモに動かない」状態に陥ってしまうからだ。

 従って、サービスは本当に不必要なものだけを選んで止める必要がある。

 インターネット上で「Windows XP サービス」などのキーワードで検索すると、Web上で「無効にするのをお勧めするサービス」の一覧などがよく載っているので、それを参考にするといいかもしれない。

 代表的なものとしては、デフォルトが自動起動になっているものでは以下のようなサービスがだいたい共通して「止めてしまってもよいリスト」に挙げられているようだ。

  • DHCPClient
     インターネットプロトコル(TCP/IP)でIPアドレスを自動的に取得するになっている場合に利用されるサービス。たとえば、デスクトップでIPアドレスを指定して使っている場合は止めても大丈夫だろう。

  • Error Reporting Service
     システムのエラーが起きた場合にマイクロソフトへエラー報告を送信する際に使われる。毎回「送信しない」ユーザーの場合は無効にしてしまってかまわないだろう。

  • Help and Support
     ヘルプとサポートセンターを利用しない場合は、手動、無効でもかまわないだろう。

  • Portable Media Serial Number
     メモリーオーディオプレーヤーをPCに接続したときに、著作権保護情報を読み出しするときなどに使われるようだ。この手のプレーヤーを使わないならば無効にしてかまわない。

  • Messenger
     例に挙げたメッセンジャサービス。ネットワーク経由で広告メッセージを送るなどで、悪用されることも多い。プリンタサーバーからのメッセージを受け取るなどで使っていなければ無効にしてもいいだろう。

  • Remote Registry
     ネットワークを介してレジストリを操作するために使うサービスだ。もし悪用された場合、たとえばウイルスプログラムを常にシステムが立ち上がると同時に起動するようにするなどの目的で利用される可能性が高い。ネットワーク経由でレジストリを操作する必要がなければ無効とすべきだ。

  • Smart Card
     セキュリティ機能を搭載したICカード「スマートカード」へのアクセスを管理している。使っていない場合は(少なくとも現在使っている人はかなり少数派だと思うが)、手動、無効でもかまわないだろう。

  • Secondary Logon
     ログオフせずに「ユーザーの切り替え」をする場合に利用される。自分専用のパソコンでユーザー切り替えが必要なければ止めてしまっていいだろう。

     また、デフォルトでは手動起動の設定となっているサービスの中では、ClipBook、Remote Desktop Help Session Manager、Terminal Services、NetMeeting Remote Desktop Sharingあたりはきっぱり無効にしてしまったほうがいいかもしれない。

     「ClipBook」はネットワーク経由でクリックブックに保存した情報を他のPCと共有させるための仕組みで、リモートアシスタントなどの機能で使われる。

     「Remote Desktop Help Session Manager」も同様にリモートアシスタントなどで、外部からPCを操作させるためのもの。

     「Terminal Services」は他のPCのデスクトップを表示して操作するTerminal機能を提供するためのもの。

     「NetMeeting Remote Desktop Sharing」はNetMeetingのリモートデスクトップ機能で使われるサービスだ。

     これらを一言で表現すると「ほとんど使わない、“ネットワーク越しにPCを操作する”機能」だ。悪用されると自分のPCを勝手に操作される可能性が高いので、リモートアシスタンスのようにネットワーク越しに操作をする/してもらう必要がないなら、起動しない方が無難だろう。

     なお、実際に止めるサービスを考えるときに注意してほしいのは、人によってPCの用途が違うということだ。たとえば、例に挙げたメッセンジャサービスは止めてしまってもいいサービスの代表例的な扱いをよく受けている。しかし、環境によっては、たとえばプリンタサーバーが印刷完了を知らせるメッセージ用に利用していることもある。このメッセージの表示を使いたいのであれば、メッセンジャサービスを止めてしまうわけにはいかないわけだ。

     また、一般的にはあまり使われないと思われるサービスでも、ユーザーの使っているアプリによっては必須になるものもある。そのほか、一見、名前からは意味がなさそうに見えるサービスが、他のサービスから依存される関係になっていて、それを止めると必須のサービスが動かなくなるというような場合もある。サービスを止めるには、PCの持ち主それぞれが本当に使わないサービスを見極める必要があるので、注意してほしい。

    (2003/11/28)

    大和 哲
    1968年生まれ東京都出身。88年8月、Oh!X(日本ソフトバンク)にて「我ら電脳遊戯民」を執筆。以来、パソコン誌にて初歩のプログラミング、HTML、CGI、インターネットプロトコルなどの解説記事、インターネット関連のQ&A、ゲーム分析記事などを書く。兼業テクニカルライター。ホームページはこちら
    (イラスト : 高橋哲史)

    - ページの先頭へ-

    Internet Watch ホームページ
    Copyright (c) 2003 impress corporation All rights reserved.