別の資格情報を用いた安全な起動方法 の続き
Windows Service ですが、default では 'NT AUTHORITY\SYSTEM' で起動するように構成されるのが多いわけですが、'NT AUTHORITY\SYSTEM' 以外の account で起動できるのもご存知の方は多いでしょう。
'NT AUTHORITY\SYSTEM' は password が無い特殊な account なので例外として、その他の account で Windows Service を起動する場合、他の process を起動する場合と同様に password が必須になるわけです。
結局、password を保持しいて、必要に応じてそれを取り出して、それを用い別の資格情報で process を起動するというところは変わらないわけですが、とりあえず Windows Service の起動を見てみましょう。
- Windows が起動する際に 'winlogon.exe' が SCM(Service Control Manager: 'services.exe') を呼び出す。
- SCM は Service の起動を要求されると 'lsass.exe' に対しその Service が起動されるべき account の username と password を取り出すよう要求する。
- 'lsass.exe' は暗号化され、かつ security 保護された場所から username, password を取得し、SCM に返す。
- SCM は受け取った username, password を使い対象の service process を起動する。
これだけじゃ何が安全かわからないですね。
実は重要なのは、上記であげた process がすべて 'NT AUTHORITY\SYSTEM' で起動していることなんです。
Password の動きを考えください。保存する場所はもともと 'NT AUTHORITY\SYSTEM' のみ扱える場所に保存されていますし、それを渡すのは user の process ではなく、SCM なわけです。
つまり、password は 'NT AUTHORITY\SYSTEM' の手から外には渡らないということになります。
別の資格情報で process を起動したり、偽装する場合でより高い security を求めるには、このあたりを意識する必要があると思います。