Windowsサービス(Service)は、Windowsの背景で実行されるPCプログラムを指します。Windowsサービスプログラムは一般的なアプリケーション(APP)とは作成方法が異なり、Windowsサービスコントロールマネージャーのインターフェース規則とプロトコルに従う必要があります。
Windowsサービスは背景で長時間実行でき、Windowsの起動段階でも動作可能です。これは一般的なアプリケーションの実行方法とは異なります。
一般的なアプリケーションは、ユーザがWindowsにログインしている状況でユーザによって起動されます。しかし、Windowsサービスは一度登録されると、起動段階、ユーザがWindowsにログインする段階、ユーザがログアウトする段階、シャットダウン段階でも実行されます。ログインやログアウト前に初期化を行う必要がある場合は、Windowsサービスを使用する必要があります。一般的なアプリケーションはログインしているユーザに紐付けられますが、Windowsサービスはシステムサービス、ネットワークサービス、ローカルサービスの3種類のWindowsの内蔵システムアカウントに紐付けられます。ユーザがWindowsにログインしていなくても、サービスは正常に動作します。
一般的に、WindowsサービスはPCの起動時に自動的に開始され、一時的に停止したり再起動したりすることができます。これらの操作はユーザインターフェースに表示されません。
以上の特性に基づき、Windowsサービスはサーバでの使用に非常に適しています。一般的なサーバにはディスプレイがなく、長時間稼働する必要があるため、特定のWindowsサービスをサーバに設定し、他のユーザに提供することができます。例えばリモートRPCサービス、Webサービスなどです。
Windowsサービスの権限
前述の通り、Windowsサービスは3種類のWindowsの内蔵システムアカウント環境で実行されます。これらのアカウントは一般的なユーザログインアカウントとは異なり、Windowsに内蔵されている高い権限を持つシステムアカウントです。新しいサービスをインストールするには、システム管理者(Administrator)に相当する権限が必要です。これはドライバプログラムと同様にシステム管理者(Administrator)の権限を要し、Microsoftの署名承認を経てからインストールできます。
サービスプログラムは高い権限で実行されるため、インストールと使用には特に注意が必要です。サービスプログラムに問題があると、Windowsの安定性とセキュリティに影響を与える可能性があります。
タスクマネージャーを呼び出して上部の「サービス」タブをクリックすると、どのサービスプログラムが実行されているか確認できます。

ここではサービスの名前および以下について確認することができます。
- 一般的なプログラムと同様に、ランダムにPID(プロセスID)が付与されています。PIDはプログラム終了後に回収されるますが、次回新しいプログラムが実行されるかサービスが起動されると再度同じPIDが付与される可能性があります。つまり、PIDが同じでも時間が異なれば、異なるプログラムである可能性があります。
- ハッカーが偽装したサービスは問題があるかどうか判断しにくいことがあります。Windowsの正式なサービスやフォーラムの情報を参照して、サービスが異常かどうかを確認できます。
- 怪しいサービスが実行中である場合、それを停止できます。
- サービスをグループに分けて管理し、特定の目的やIT担当者の管理を容易にします。
よく使用されるサービス管理ツール
- SC.EXE
CMDまたはPowerShellでSC.EXE(Service Control)を使用すると、ローカルおよびリモートのWindows Service Control Managerにコマンドを送信できます。SC.EXEを直接入力すると使用例が表示されます。 - PC管理
[開始]メニューを右クリックして[PC管理]を起動し、[PC管理]の左下の[サービス]をクリックするか、DOSコマンドでservices.mscを入力します。詳細な情報が必要な場合は、[PC管理]の右側で監視したいサービスプログラムを選択し、右クリックして[プロパティ]でサービスの詳細を確認し、開始、停止などの操作ができます。 - EventLog
サービスには通常UIがなく、ユーザとのインタラクションがありません。重要なイベントや実行中のエラーはRegisterEventSourceなどのAPIを通じてEventLogに書き込みます。EventLogはセキュリティ調査の重要な手がかりとなります。 - EXE
Windowsタスクマネージャーを開くと、SVCHOST.EXEが多数実行されていることがよくあります。SVCHOST.EXEは動的リンクライブラリ(DLL)をサービスとして実行するために使用されます。SVCHOST.EXEを利用して作成したDLLを読み込み、DLLをサービスのように背景で実行させます。一部のウイルスはSVCHOST.EXEをローダーとして利用します。これはProcess Explorerを使用して観察することができます。疑わしいSVCHOST.EXE(例:実行時間が長すぎる、リソースを大量に消費している)を見つけた場合は、手動でサービスを停止することができます。 - サービス設定ファイルはどこにあるか?
前述のツールの他に、レジストリエディター(RegEdit)を使用してサービスを観察することもできます。パスは「コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\」です。この場所にはサービスとドライバプログラムが混在しています。キーの値「Start = 0」はブート段階での読み込みを示し、「= 1, 2」は順番に読み込み、「= 3」は手動読み込み、「= 4」は無効を示します。
下図の例では、AcpiDevのキーの値は「3」で、手動読み込みに設定されています。(現在は起動していません)興味を持った方は前述のサービスツールの表示値と比較してみてください。


