디바이스 개체용 SDDL
SDDL(보안 설명자 정의 언어)은 보안 설명자를 나타내는 데 사용됩니다. 디바이스 개체에 대한 보안은 INF 파일에 배치 되거나 IoCreateDeviceSecure에 전달되는 SDDL 문자열로 지정할 수 있습니다. 보안 설명자 정의 언어는 Microsoft Windows SDK 설명서에 완전히 설명되어 있습니다.
INF 파일은 전체 SDDL 범위를 지원하지만 언어의 하위 집합만 IoCreateDeviceSecure 루틴에서 지원됩니다. 이 하위 집합은 여기에 정의되어 있습니다.
디바이스 개체에 대한 SDDL 문자열은 "D:P" 형식과 "(A;; 형식의 하나 이상의 식) 형식입니다. 액세스;;; SID)". SID 값은 Access 값이 적용되는 대상(예: 사용자 또는 그룹)을 결정하는 보안 식별자를 지정합니다. Access 값은 SID에 허용되는 액세스 권한을 지정합니다. Access 및 SID 값은 다음과 같습니다.
참고 디바이스 개체에 SDDL을 사용하는 경우 드라이버는 Wdmsec.lib에 연결해야 합니다.
액세스
허용되는 액세스를 결정하는 ACCESS_MASK 값을 지정합니다. 이 값은 "0x 16진수" 형식의 16진수 값으로 작성하거나 액세스 권한을 나타내는 2자 기호 코드 시퀀스로 작성할 수 있습니다.
다음 코드를 사용하여 일반 액세스 권한을 지정할 수 있습니다.
코드 | 일반 액세스 권한 |
---|---|
GA |
GENERIC_ALL |
GR |
GENERIC_READ |
GW |
GENERIC_WRITE |
Gx |
GENERIC_EXECUTE |
다음 코드를 사용하여 특정 액세스 권한을 지정할 수 있습니다.
코드 | 특정 액세스 권한 |
---|---|
RC |
READ_CONTROL |
SD |
DELETE |
Wd |
WRITE_DAC |
Wo |
WRITE_OWNER |
GENERIC_ALL ACL 변경 기능을 포함하여 위의 두 테이블에 나열된 모든 권한을 부여합니다.
Sid
지정된 액세스 권한이 부여된 SID를 지정합니다. SID는 계정, 별칭, 그룹, 사용자 또는 컴퓨터를 나타냅니다.
다음 SID는 컴퓨터 의 계정을 나타냅니다.
SID | Description |
---|---|
SY |
시스템 사용자 모드 구성 요소를 포함하여 운영 체제 자체를 나타냅니다. |
LS |
로컬 서비스 로컬 서비스에 대해 미리 정의된 계정입니다(인증 및 세계에도 속함). 이 SID는 Windows XP부터 사용할 수 있습니다. |
NS |
네트워크 서비스 네트워크 서비스에 대해 미리 정의된 계정입니다(인증 및 세계에도 속함). 이 SID는 Windows XP부터 사용할 수 있습니다. |
다음 SID는 컴퓨터의 그룹을 나타냅니다.
SID | Description |
---|---|
BA |
관리자 컴퓨터의 기본 제공 관리자 그룹입니다. |
BU |
기본 제공 사용자 그룹 모든 로컬 사용자 계정 및 도메인의 사용자를 포함하는 그룹입니다. |
BG |
기본 제공 게스트 그룹 로컬 또는 도메인 게스트 계정을 사용하여 로그인하는 사용자를 포함하는 그룹입니다. |
다음 SID는 사용자가 인증된 정도를 설명합니다.
SID | Description |
---|---|
AU |
인증된 사용자 로컬 컴퓨터 또는 도메인에서 인식되는 모든 사용자입니다. 기본 제공 게스트 계정을 사용하여 로그인한 사용자는 인증되지 않습니다. 그러나 컴퓨터 또는 도메인에 개별 계정이 있는 게스트 그룹의 구성원은 인증됩니다. |
AN |
익명 로그온 사용자 익명 네트워크 세션과 같은 ID 없이 로그온한 모든 사용자입니다. 기본 제공 게스트 계정을 사용하여 로그인하는 사용자는 인증되거나 익명이 아닙니다. 이 SID는 Windows XP부터 사용할 수 있습니다. |
다음 SID는 사용자가 머신에 로그인하는 방법을 설명합니다.
SID | Description |
---|---|
IU |
대화형 사용자 로컬 로그온 및 원격 데스크톱 로그온과 같이 처음에 컴퓨터에 "대화형으로" 로그온한 사용자입니다. |
NU |
네트워크 로그온 사용자 대화형 데스크톱 액세스 없이 원격으로 머신에 액세스하는 사용자(예: 파일 공유 또는 RPC 호출). |
Wd |
World Windows XP 이전의 이 SID는 인증된 사용자, 익명 사용자 또는 기본 제공 게스트 계정 등 모든 세션을 다루었습니다. Windows XP부터 이 SID는 익명 로그온 세션을 다루지 않습니다. 인증된 사용자와 기본 제공 게스트 계정만 다룹니다. 신뢰할 수 없거나 "제한된" 코드도 World SID에서 다루지 않습니다. 자세한 내용은 다음 표의 RC(제한된 코드) SID에 대한 설명을 참조하세요. |
다음 SID는 특별한 멘션 받을 자격이 있습니다.
SID | Description |
---|---|
RC |
제한된 코드 이 SID는 신뢰할 수 없는 코드로 액세스를 제어하는 데 사용됩니다. RC를 사용하는 토큰에 대한 ACL 유효성 검사는 두 개의 검사로 구성됩니다. 하나는 토큰의 일반 SID 목록(instance WD 포함)과 두 번째 목록(일반적으로 RC 및 원래 토큰 SID의 하위 집합 포함)에 대한 검사입니다. 토큰이 두 테스트를 모두 통과하는 경우에만 액세스 권한이 부여됩니다. 따라서 RC는 실제로 다른 SID와 함께 작동합니다. RC를 지정하는 모든 ACL은 WD도 지정해야 합니다. RC가 ACL에서 WD와 쌍을 이루는 경우 신뢰할 수 없는 코드를 포함한 모든 사람의 상위 집합이 설명됩니다. 신뢰할 수 없는 코드는 Explorer 실행 옵션을 사용하여 시작된 코드일 수 있습니다. 기본적으로 World는 신뢰할 수 없는 코드를 다루지 않습니다. |
Ud |
User-Mode 드라이버 이 SID는 사용자 모드 드라이버에 대한 액세스 권한을 부여합니다. 현재 이 SID는 UMDF(User-Mode Driver Framework)에 대해 작성된 드라이버만 다룹니다. 이 SID는 Windows 8 시작해서 사용할 수 있습니다. "UD" 약어를 인식하지 못하는 이전 버전의 Windows에서는 UMDF 드라이버에 대한 액세스 권한을 부여하려면 이 SID의 정규화된 형식(S-1-5-84-0-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;; 조지아;;; SY)"
SDDL_DEVOBJ_SYS_ALL 커널 모드 코드 외에도 System으로 실행되는 사용자 모드 코드가 모든 액세스에 대해 디바이스를 열 수 있다는 점을 제외하고 SDDL_DEVOBJ_KERNEL_ONLY 유사합니다.
레거시 드라이버는 이 ACL을 사용하여 엄격한 보안 설정으로 시작하고 SetFileSecurity 사용자 모드 함수를 사용하여 런타임에 해당 서비스가 개별 사용자에게 디바이스를 열도록 할 수 있습니다. 이 경우 서비스가 System으로 실행되어야 합니다.
SDDL_DEVOBJ_SYS_ALL_ADM_ALL
"D:P(A;; 조지아;;; SY)(A;; 조지아;;; BA)"
SDDL_DEVOBJ_SYS_ALL_ADM_ALL 커널, 시스템 및 관리자가 디바이스를 완벽하게 제어할 수 있습니다. 다른 사용자는 디바이스에 액세스할 수 없습니다.
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R
"D:P(A;; 조지아;;; SY)(A;; GRGWGX;;; BA)(A;; Gr;;; WD)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R 커널 및 시스템이 디바이스를 완벽하게 제어할 수 있도록 합니다. 기본적으로 관리자는 전체 디바이스에 액세스할 수 있지만 ACL을 변경할 수는 없습니다(관리자가 먼저 디바이스를 제어해야 함).
모든 사용자(세계 SID)에게 읽기 권한이 부여됩니다. 신뢰할 수 없는 코드는 디바이스에 액세스할 수 없습니다(신뢰할 수 없는 코드는 Explorer 실행 옵션을 사용하여 시작된 코드일 수 있습니다. 기본적으로 World는 제한된 코드를 다루지 않습니다.)
또한 통과 액세스 권한은 일반 사용자에게 부여되지 않습니다. 따라서 네임스페이스가 있는 디바이스에 대한 적절한 설명자가 아닐 수 있습니다.
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R
"D:P(A;; 조지아;;; SY)(A;; GRGWGX;;; BA)(A;; Gr;;; WD)(A;; Gr;;; RC)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R 커널과 시스템이 디바이스를 완벽하게 제어할 수 있도록 합니다. 기본적으로 관리자는 전체 디바이스에 액세스할 수 있지만 ACL을 변경할 수는 없습니다(관리자가 먼저 디바이스를 제어해야 함).
모든 사용자(세계 SID)에게 읽기 권한이 부여됩니다. 또한 신뢰할 수 없는 코드도 코드에 액세스할 수 있습니다. 신뢰할 수 없는 코드는 Explorer 실행 옵션을 사용하여 시작된 코드일 수 있습니다. 기본적으로 World는 제한된 코드를 다루지 않습니다.
또한 통과 액세스 권한은 일반 사용자에게 부여되지 않습니다. 따라서 네임스페이스가 있는 디바이스에 대한 적절한 설명자가 아닐 수 있습니다.
위의 SDDL 문자열에는 상속 한정자가 포함되지 않습니다. 따라서 디바이스 개체에만 적합하며 파일 또는 레지스트리 키에 사용하면 안 됩니다. SDDL을 사용하여 상속을 지정하는 방법에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.