セキュリティ記述子定義言語 (SDDL) は、セキュリティ記述子を表すために使用されます。 デバイス オブジェクトのセキュリティは、 INF ファイルに配置 されるか 、IoCreateDeviceSecure に渡される SDDL 文字列によって指定できます。 セキュリティ記述子定義言語は、Microsoft Windows SDK ドキュメントに完全に記載されています。
INF ファイルは SDDL のすべての範囲をサポートしていますが、 IoCreateDeviceSecure ルーチンでは言語のサブセットのみがサポートされます。 このサブセットはここで定義されています。
デバイス オブジェクトの SDDL 文字列は、"D:P" という形式の後に、"(A;; という形式の 1 つ以上の式が続きます。Access;;;SID)"。 SID 値は、Access 値の適用先 (ユーザーやグループなど) を決定するセキュリティ識別子を指定します。 Access 値は、SID に対して許可されるアクセス権を指定します。 Access と SID の値は次のとおりです。
デバイス オブジェクトに SDDL を使用する場合、ドライバーは Wdmsec.lib に対してリンクする必要があります。
アクセス
許可されるアクセスを決定する ACCESS_MASK 値を指定します。 この値は、"0x16 進数" 形式の 16 進数の値として、またはアクセス権を表す 2 文字のシンボリック コードのシーケンスとして書き込むことができます。
次のコードを使用して、汎用アクセス権を指定できます。
コード | 汎用アクセス権 |
---|---|
ジョージア州 (GA) |
全般的_すべて |
GR |
GENERIC_READ |
ゴールデンウィーク |
GENERIC_WRITE |
GX |
GENERIC_EXECUTE |
次のコードを使用して、特定のアクセス権を指定できます。
コード | 特定のアクセス権 |
---|---|
RC |
読み取り制御 |
SDカード |
削除 |
WD |
WRITE_DAC |
WO |
所有者書き込み |
GENERIC_ALLは、ACL を変更する機能を含め、上記の 2 つの表に記載されているすべての権限を付与します。
SID
指定したアクセス権を付与される SID を指定します。 SID は、アカウント、エイリアス、グループ、ユーザー、またはコンピューターを表します。
次の SID は、マシン上 のアカウント を表します。
SID | 説明 |
---|---|
SY |
システム ユーザー モード コンポーネントを含む、オペレーティング システム自体を表します。 |
LS |
ローカル サービス ローカル サービスの定義済みアカウント (Authenticated と World にも属)。 この SID は、Windows XP 以降で使用できます。 |
NSの |
ネットワーク サービス ネットワーク サービスの定義済みアカウント (Authenticated と World にも属)。 この SID は、Windows XP 以降で使用できます。 |
次の SID は、マシン上の グループ を表します。
SID | 説明 |
---|---|
文学士 |
管理者 マシン上の組み込みの Administrators グループ。 |
BU |
組み込みのユーザー グループ すべてのローカル ユーザー アカウントとドメイン上のユーザーをカバーするグループ。 |
BG |
組み込みのゲスト グループ ローカルまたはドメインのゲスト アカウントを使用してログインするユーザーを対象にするグループ。 |
次の SID は、ユーザーが認証された範囲を示しています。
SID | 説明 |
---|---|
オーストラリア |
認証済みユーザー ローカル コンピューターまたはドメインによって認識されるユーザー。 組み込みゲスト アカウントを使用してログインしたユーザーは認証されません。 ただし、コンピューターまたはドメイン上の個々のアカウントを持つゲスト グループのメンバーは認証されます。 |
ひとつ |
匿名ログオン ユーザー 匿名ネットワーク セッションなど、ID なしでログオンしたユーザー。 組み込みゲスト アカウントを使用してログインするユーザーは、認証も匿名もされません。 この SID は、Windows XP 以降で使用できます。 |
次の SID では、ユーザーがコンピューターにログインした方法について説明します。
SID | 説明 |
---|---|
IU |
対話型ユーザー ローカル ログオンやリモート デスクトップ ログオンなど、最初にコンピューターに "対話形式で" ログオンしたユーザー。 |
ニュー |
ネットワーク ログオン ユーザー 対話型のデスクトップ アクセス (ファイル共有や RPC 呼び出しなど) なしで、コンピューターにリモートでアクセスするユーザー。 |
WD |
世界 Windows XP より前の SID では、認証されたユーザー、匿名ユーザー、または組み込みのゲスト アカウントに関係なく、すべてのセッションがカバーされました。 Windows XP 以降、この SID は匿名ログオン セッションを対象としません。認証されたユーザーと組み込みのゲスト アカウントのみが対象となります。 信頼されていないコードまたは "制限された" コードも、World SID の対象ではありません。 詳細については、次の表の制限付きコード (RC) SID の説明を参照してください。 |
次の SID は特別な言及に値します。
SID | 説明 |
---|---|
RC |
制限付きコード この SID は、信頼されていないコードによるアクセスを制御するために使用されます。 RC を使用したトークンに対する ACL 検証は、2 つのチェックで構成されます。1 つはトークンの通常の SID リスト (たとえば WD を含む) に対して、もう 1 つは 2 つ目のリスト (通常は RC と元のトークン SID のサブセットを含む) に対して行われます。 アクセスは、トークンが両方のテストに合格した場合にのみ付与されます。 そのため、RC は実際には他の SID と組み合わせて動作します。 RC を指定する ACL でも WD を指定する必要があります。 ACL で RC が WD とペアになっている場合は、信頼されていないコードを含む Everyone のスーパーセットが記述されます。 信頼されていないコードは、エクスプローラーの [実行] オプションを使用して起動されるコードである可能性があります。 既定では、信頼されていないコードは World でカバーされません。 |
UD |
User-Mode ドライバー この SID は、ユーザー モード ドライバーへのアクセスを許可します。 現在、この SID は、User-Mode Driver Framework (UMDF) 用に記述されたドライバーのみを対象としています。 この SID は、Windows 8 以降で使用できます。 "UD" の省略形を認識しない以前のバージョンの Windows では、UMDF ドライバーへのアクセスを許可するには、この SID の完全修飾形式 (S-1-5-84-0-0-0-0) を指定する必要があります。 詳細については、User-Mode Driver Framework ドキュメントの デバイス アクセスの制御 を参照してください。 |
デバイス オブジェクトの SDDL の例
このセクションでは、Wdmsec.h で見つかった定義済みの SDDL 文字列について説明します。 これらをテンプレートとして使用して、デバイス オブジェクトの新しい SDDL 文字列を定義することもできます。
SDDL_DEVOBJ_KERNEL_ONLY
"D:P"
SDDL_DEVOBJ_KERNEL_ONLYは "空" ACL です。 ユーザー モード コード (システムとして実行されているプロセスを含む) は、デバイスを開けません。
PnP バス ドライバーは、PDO を作成するときにこの記述子を使用できます。 その後、INF ファイルは、デバイスのセキュリティ設定を緩く指定できます。 この記述子を指定することで、バス ドライバーは、INF が処理される前にデバイスを開く試行が成功しないようにします。
同様に、WDM 以外のドライバーは、この記述子を使用して、適切なユーザー モード プログラム (インストーラーなど) がレジストリの最終的なセキュリティ記述子を設定するまで、そのデバイス オブジェクトにアクセスできないようにすることができます。
いずれの場合も、既定値は厳密なセキュリティであり、必要に応じて緩めます。
SDDL_DEVOBJ_SYS_ALL
"D:P(A;;GA;;;SY)"
SDDL_DEVOBJ_SYS_ALLはSDDL_DEVOBJ_KERNEL_ONLYに似ていますが、カーネル モード コードに加えて、System として実行されているユーザー モード コードは、任意のアクセスのためにデバイスを開くこともできます。
レガシ ドライバーでは、この ACL を使用して厳密なセキュリティ設定から開始し、 SetFileSecurity ユーザー モード関数を使用して、そのサービスが実行時に個々のユーザーに対してデバイスを開く場合があります。 この場合、サービスはシステムとして実行されている必要があります。
SDDL_DEVOBJ_SYS_ALL_ADM_ALL
"D:P(A;;GA;;;SY)(A;;GA;;;BA)"
SDDL_DEVOBJ_SYS_ALL_ADM_ALLでは、カーネル、システム、および管理者がデバイスを完全に制御できます。 他のユーザーはデバイスにアクセスできない。
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R
"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GR;;;WD)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_Rでは、カーネルとシステムがデバイスを完全に制御できます。 既定では、管理者はデバイス全体にアクセスできますが、ACL を変更することはできません (管理者は最初にデバイスを制御する必要があります)。
すべてのユーザー (World SID) に読み取りアクセス権が付与されます。 信頼されていないコードはデバイスにアクセスできません (信頼されていないコードは、エクスプローラーの [実行] オプションを使用して起動されたコードである可能性があります。既定では、World は制限付きコードに対応していません)。)
また、トラバーサル アクセスは通常のユーザーには付与されません。 そのため、これは名前空間を持つデバイスに適した記述子ではない可能性があります。
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R
"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GR;;;WD)(A;;GR;;;RC)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_Rでは、カーネルとシステムがデバイスを完全に制御できます。 既定では、管理者はデバイス全体にアクセスできますが、ACL を変更することはできません (管理者は最初にデバイスを制御する必要があります)。
すべてのユーザー (World SID) に読み取りアクセス権が付与されます。 さらに、信頼されていないコードもコードにアクセスできます。 信頼されていないコードは、エクスプローラーの [実行] オプションを使用して起動されるコードである可能性があります。 既定では、World は制限付きコードに対応していません。
また、トラバーサル アクセスは通常のユーザーには付与されません。 そのため、これは名前空間を持つデバイスに適した記述子ではない可能性があります。
これらの SDDL 文字列には、継承修飾子は含まれません。 そのため、これらはデバイス オブジェクトにのみ適しており、ファイルやレジストリ キーには使用しないでください。 SDDL を使用した継承の指定の詳細については、Microsoft Windows SDK のドキュメントを参照してください。