グループ ポリシーを用いたデバイスのアクセス制御について

 

Windows テクノロジー サポートの奥原です。

情報漏えい等の観点から、リムーバブル デバイスへのアクセス制限を行いたいといったお問い合わせが多く寄せられますが、アクセス制御はどのような方法があるのかをご説明させて頂きます。

USB ストレージデバイスなどといったリムーバブル デバイスを特定のユーザや端末でアクセス制限を設けたい場合、グループ ポリシーを用いてアクセス制限を行うことができます。
アクセス制限の方法は、大きく分けて以下の 2 種類があり、それぞれの機能について説明します。

- デバイスのインストール制御
- リムーバブル記憶域へのアクセス制御

デバイスのインストール制御
このポリシーは、Windows Vista 以降で有効であり、デバイスドライバのインストールを制限します。
動作するタイミングは、デバイス接続時のプラグ アンド プレイ (PnP) の処理で実行され、制限対象のデバイスであれば、ドライバのインストールを行わず終了します。
制限方法としては、以下の方法があります。

- デバイス セットアップ クラスでの制御
---------------------------------
デバイス セットアップ クラスとは、デバイスのグループであり、FDD、CD/DVD、USB、1394 といったデバイスに対し、それぞれにデバイス セットアップ クラス GUID が割り当てられています。
割り当てられている GUID は、以下のサイトにございますのでご参照頂ければと存じます。
また、デバイス セットアップ クラスは、デバイス ドライバー パッケージの .inf ファイルを見るか、現在インストールされているデバイスのプロパティを見ることで判別できます。

System-Defined Device Setup Classes Available to Vendors
https://msdn.microsoft.com/en-us/library/ff553426(VS.85).aspx

※ MTP, PTP デバイスについて
デジタルカメラ (PTP デバイス) やオーディオプレーヤー (MTP デバイス) については、 Windows Portable Devices として認識されます。
これらのデバイスを制限するには、以下のデバイス セットアップ クラスを使用します。

 Windows Portable Devices (WPD)
 ClassGuid = {eec5ad98-8080-425f-922a-dabf3de3f69a}

デバイスのインストール禁止設定について
~~~~~~~~~~~~~~~~~~~~~~~
Windows 7 環境では、インストール済みデバイスに対しても “禁止” 設定を適用することが可能です。

対象ポリシー
これらのデバイス ID と一致するデバイスのインストールを禁止する
これらのデバイス セットアップ クラスと一致するドライバーを使用したデバイスのインストールを禁止する

設定方法は、ポリシーを開き、「既にインストール済みの一致するデバイスにも適用されます。」のチェックを入れます。
※なお、「他のポリシー設定で記述されていないデバイスのインストールを禁止する。」は、既存デバイスに対して制限を適用することはできません。
このため、以下のようなスクリプトを用いて、OS 起動時 (スタートアップ) にスクリプトを実行し、未接続デバイスをあらかじめ削除しておくことで、禁止設定ポリシーを適用させることが可能です。

スクリプト例
本スクリプトは、devcon ツールを使用しますので、予め入手しておきます。

devcon ツールの入手
デバイス マネージャーとして機能する DevCon コマンド ライン ユーティリティ
https://support.microsoft.com/kb/311272/ja
~~~~~~~~~~~~~~~~
Set objShell = CreateObject("WScript.Shell") Set objWMIService = GetObject ("winmgmts:\\.\root\cimv2")
' devcon findall コマンドを実行します。
Set outExec = objShell.Exec("devcon findall usb\*") Set outStream = outExec.StdOut

' Win32_PnPEntity の情報を取得します。
Set colServices = objWMIService.ExecQuery ("Select * From Win32_PnPEntity")

WScript.Echo "未接続デバイス"
Do While Not outStream.AtEndOfStream
strLine = outStream.ReadLine()
arrFields = Split(strLine," ")
FLG = 0
For Each objService in colServices
' Win32_PnPEntity の結果と devcon findall コマンドの結果を比較します。
IF arrFields(0) = objService.DeviceID Then
FLG = 1
Exit For
End If
Next
' 比較後、一致する情報が無い (未接続デバイス) 場合、ドライバの削除を行います。
If FLG = 0 Then
WScript.Echo arrFields(0)
objShell.Run "devcon remove @" & chr(34) & arrFields(0) & chr(34)
End If
Loop
WScript.Echo ""
WScript.Echo "削除終了"
~~~~~~~~~~~~~~~~
上記スクリプトは、あくまでも参考例でございますので、必要に応じて変更頂ければと思います。

- デバイス ID による制御
---------------------------------
各デバイスの ハードウェア ID もしくは、互換性 ID を指定します。
ハードウェア ID もしくは、互換性 ID もデバイス ドライバー パッケージの .inf ファイルを見るか、現在インストールされているデバイスのプロパティを見ることで判別できます。
参考までに、以下の USB メモリの場合を例にあげて説明いたします。

例. ABC 社製 USB Flash Disk 1234メモリのハードウェア ID (互換性 ID を含む)
------------------------
USBSTOR\ABC_USB_Flash_Disk__1234
USBSTOR\ABC_USB_Flash_Disk__
USBSTOR\ABC_
USBSTOR\GenDisk
GenDisk
------------------------
許可するデバイス ID は、このリストで表示されるハードウェア ID のいずれかを指定します。

例えば、"USBSTOR\ABC_USB_Flash_Disk__1234" を指定した場合、ABC 社製 USB Flash Disk 1234 のみを制御対象とします。

"USBSTOR\ABC_" を指定した場合、ABC 社の USB ストレージすべてを制御対象とします。

このことから、メーカ、種類 (USB メモリ) 、モデルなどを指定する方法や、特定メーカの USB メモリのみといった指定が可能です。

このポリシーは「許可」と「禁止」設定があり、それぞれに同一のデバイスを指定した場合、「禁止」の設定が優先されます。
また、「許可」設定で特定デバイスのインストールを許可し、「他のポリシー設定で記述されていないデバイスのインストールを禁止する」を有効にすることで、指定されたデバイス以外はインストールを禁止することが可能です。

 

リムーバブル記憶域へのアクセス制御
このポリシーは、Windows Vista 以降で有効であり、リムーバブル デバイスとして認識されたデバイスに対し、書き込み、読み取り、実行の制限をかけることができます。
グループ ポリシーで、リムーバブル記憶域へのアクセス制限をかけた場合、グループ ポリシー サービス(Gpsvc) からの通知を受けて、Portable Device Enumerator Service (WPDBusEnum) サービスが、設定の必要なデバイスを特定し、デバイスのアクセス コントロール リスト (ACL) を設定することにより行われます。

アクセス制限を行うことができるリムーバブル デバイスとしては、以下のデバイスが対象となり、それぞれのデバイスごとに制限をかけることが可能です。

  CD/DVD ドライブ
  FD ドライブ
  リムーバブル ディスク
  テープドライブ
  WPD デバイス
  上記以外のデバイス (カスタムクラスで指定)

※注意 !!
========================================

製品の不具合に起因した問題として、以下の事象が報告されています。

- リムーバブル記憶域へのアクセス制御ポリシーを設定しても正しく適用されない (Windows 7)
- リムーバブル デバイスへのアクセス制御ポリシーを設定後、光学デバイス (DVD, CD) ドライブがエクプローラ等から見えなくなる (Windows Vista、Windows 7)
- アクセス制御ポリシーを設定していないにも関わらず、監査ポリシーを設定するとリムーバブルデバイスへのアクセスが拒否される。(Windows 8、Windows Server 2012 のみ)

========================================

そのため、デバイスのアクセス制御を設定いただく場合は、事前に以下の対応を行うことをお奨めします。

 

1.  光学デバイス (DVD, CD) ドライブがエクプローラ等から見えなくなる現象に対する対応 (Windows Vista、Windows 7)
=====================

Windows Vista をご利用の場合は以下の技術情報の更新プログラムを適用します。

文書番号: 979621
A removable storage device is disabled when you enable a Group Policy to deny write access or to deny read access to the device on a computer that is running Windows Vista or Windows Server 2008
https://support.microsoft.com/kb/979621/en-us

Windows 7 をご利用の場合は項番 2 にて紹介しております技術情報番号: 2738898 の更新プログラムを適用します。

次に、レジストリー エディターにて以下のレジストリを追加します。
なお、一度、光学デバイスが無効化されてしまうと、デバイス マネージャーから光学デバイスの削除を行い、再度デバイスを認識させる必要があります。

追加するレジストリ

-------------------------
キー
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\RemovableStorageDevices
ApplyPolicyOnUserLogoff
種類 : REG_DWORD
値 : 0x00000000
----------------------------- 

なお、更新プログラムの適用前にレジストリーを追加しておいても問題ございませんが、更新プログラムが適用されるまでは ApplyPolicyOnUserLogoff の値は無視されます。
更新プログラムとレジストリー追加後は再起動を実施します。

2. ポリシーが適用されない不具合に対する対応 (Windows 7)
======================

Windows 7 をご利用の場合は以下の技術情報の更新プログラムを適用します。

文書番号: 2738898

Users cannot access removable devices after you enable and then disable a Group Policy setting in Windows Server 2008, in Windows 7 or in Windows Server 2008 R2

https://support.microsoft.com/kb/2738898/en-us

更新プログラム適用後は、再起動を実施します。

 
3. Windows 8 および、Windows Server 2012 で、監査ポリシーを設定するとリムーバブルデバイスへのアクセスが拒否される現象の対応
======================
以下のロールアップパッケージをインストールします。

Windows 8 および Windows Server 2012 の更新プログラムのロールアップ (2013 年 4 月)
https://support.microsoft.com/kb/2822241/ja

参考情報
Issues when the Audit object access policy is enabled on Removable Storage in Windows 8 or Windows Server 2012
https://support.microsoft.com/kb/2811670

今回、デバイスのアクセス制御について説明させて頂きましたが、デバイスのインストールで制限、認識されたデバイスに対する読み書きの制限、または両方を活用することで、より柔軟な制御が可能になると思います。
このブログが情報漏えい等の対策としてお役にたてれば幸いです。