SPN通信 2011年4月16日

Windowsオブジェクトのアクセス権を表示するAccessChk


みなさん、こんにちは。 SPNの塩月です。

前回のSPN通信ではWindowsの各種オブジェクトにおける「整合性レベル」でのアクセス制御の仕組みについてお話しましたが、今回は整合性レベルを含むオブジェクトのアクセス権の状態を表示するツール「AccessChk」をご紹介したいと思います。

AccessChkはマイクロソフトのWindows Sysinternalsツールの一つです。「Sysinternals」というのは、元々、Bryce Cogswell氏とMark Russinovich氏が運営していたサイトの名称(開設当初はNTInternalsという名前でした)で、彼らはそこで数多くの非常に優れたWindows OS向けユーティリティツールを公開していました。2006年にそれらすべては彼らの会社(Winternals Software)ごとマイクロソフトにより買収され、現在、Sysinternalsの各種ツールはマイクロソフトのWebサイトにて無償で公開されています。

  AccessChk
  http://technet.microsoft.com/ja-jp/sysinternals/bb664922
VistaやWindows 7にはアクセス権を表示/編集する「icacls」コマンドが標準で用意されていますが、このコマンドが対象としているオブジェクトはファイルやディレクトリのみです。一方AccessChkは表示する機能しかないものの、ファイル、ディレクトリ、レジストリキー、プロセス、サービス、グローバルオブジェクトといった各種のオブジェクトに対応しているため、AccessChkによりさまざまなオブジェクトのアクセス許可や整合性レベルを確認することが可能になります。

AccessChkには多くのオプションがあり、オプションの組み合わせなどがやや複雑ですので、少し整理して解説しましょう。AccessChkではまず表示させたいオブジェクトの種類を以下のオプションで区別します。

  なし → ファイルやディレクトリを指定(aaa.txt、c:\windows、等)
  -k   → レジストリキーを指定(hklm\software、等)
  -p   → プロセスを指定(プロセスID/プロセス名、または「*」)
  -c   → サービスを指定(サービス名、または「*」)
  -o   → オブジェクトマネージャー名前空間のオブジェクト名を指定
オブジェクトにディレクトリやレジストリキーを指定した場合は、通常はその直下のオブジェクトに関するアクセス権の情報が列挙されます。当該ディレクトリあるいはレジストリキー自体の情報を表示したい時は「-d」を追加する必要があります。
  accesschk -d  c:\windows     → windowsディレクトリ自体の情報を表示
  accesschk -kd hklm\software  → hklm\softwareキー自体の情報を表示
また下位のディレクトリ/ファイルやレジストリキーを再帰的に表示させたい場合は「-s」オプションを指定します。
  accesschk -s  c:\windows     → windowsディレクトリ以下を再帰的に表示
  accesschk -ks hklm\software  → hklm\softwareキー以下を再帰的に表示
さてAccessChkはデフォルトでは「R(Read)」や「W(Write)」という記号で簡略化されたアクセス許可の情報のみを表示します。以下は「c:\config.sys」というファイルの情報を表示した例です。
  accesschk c:\config.sys

  c:\config.sys
    RW BUILTIN\Administrators
    RW NT AUTHORITY\SYSTEM
    R  BUILTIN\Users
より詳細な情報を表示したい場合は「-v」を追加しますが、このオプションを指定することにより、当該オブジェクトの整合性レベルが以下のように表示されます。
  accesschk -v c:\config.sys

  C:\config.sys
    High Mandatory Level [No-Write-Up]
    RW BUILTIN\Administrators
          FILE_ALL_ACCESS
    RW NT AUTHORITY\SYSTEM
          FILE_ALL_ACCESS
    R  BUILTIN\Users
          FILE_EXECUTE
          FILE_READ_ATTRIBUTES
          FILE_READ_DATA
          FILE_READ_EA
          SYNCHRONIZE
          READ_CONTROL
ここで「High Mandatory Level(高レベル)」とあるのがこのファイルの整合性レベルです。アクセスポリシーは「No-Write-Up(下位からの書き込みを拒否)」が設定されています。

プロセスについては前述の通り「-p」オプションを用いますので、例えば実行中の「notepad.exe(メモ帳)」のアクセス権を確認する場合は次のようなコマンドラインになります。

  accesschk -pv notepad.exe

  [1576] notepad.exe
    Medium Mandatory Level [No-Write-Up, No-Read-Up]
    RW win7\admin
          PROCESS_ALL_ACCESS
    RW NT AUTHORITY\SYSTEM
          PROCESS_ALL_ACCESS
オブジェクトの整合性レベルは、すべてのオブジェクトに明示的に設定されているわけではありません。ファイルやディレクトリ、レジストリ、サービスなどは多くの場合、整合性レベルが設定されておらず、デフォルトのレベルとポリシーが適用されます。AccessChkの「-v」オプションでは、このようなデフォルトの整合性レベルについても「Default」の表示と共に出力してくれます。以下は「Browser」サービスのアクセス権を表示した例ですが、ここではデフォルトの整合性レベルとアクセスポリシーが表示されていることがわかります。
  accesschk -cv Browser

  Browser
    Medium Mandatory Level (Default) [No-Write-Up]
    RW NT AUTHORITY\SYSTEM
          SERVICE_ALL_ACCESS
    RW BUILTIN\Administrators
          SERVICE_ALL_ACCESS
    R  NT AUTHORITY\INTERACTIVE
          SERVICE_QUERY_STATUS
          SERVICE_QUERY_CONFIG
    .....
AccessChkには他にも、完全なアクセス制御リストを表示する「-l(エル)」オプション、プロセストークン情報を表示する「-f」オプション、あるユーザが読み取り権限を持つ、あるいは書き込み権限を持つオブジェクトのみを表示する「-r」「-w」オプションなど多彩な機能がありますので、いろいろと試しながら使いこなしていただければと思います。

それではみなさん、またお会いしましょう。

合同会社セキュリティ・プロフェッショナルズ・ネットワーク
代表社員 塩月誠人