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진수 값 또는 액세스 권한을 나타내는 두 글자 기호 코드 시퀀스로 작성할 수 있습니다.
다음 코드를 사용하여 일반 액세스 권한을 지정할 수 있습니다.
코드 | 일반 액세스 권한 |
---|---|
미국 조지아주 |
모든 일반 |
GR |
읽기 일반적 |
GW |
일반 쓰기 (GENERIC_WRITE) |
GX |
일반 실행 |
다음 코드를 사용하여 특정 액세스 권한을 지정할 수 있습니다.
코드 | 특정 액세스 권한 |
---|---|
RC |
읽기 제어 |
SD |
삭제 |
백색 왜성 |
WRITE_DAC |
WO |
소유자_쓰기 |
GENERIC_ALL ACL을 변경하는 기능을 포함하여 위의 두 테이블에 나열된 모든 권한을 부여합니다.
SID
지정된 액세스 권한이 부여된 SID를 지정합니다. SID는 계정, 별칭, 그룹, 사용자 또는 컴퓨터를 나타냅니다.
다음 SID는 컴퓨터 의 계정을 나타냅니다.
보안 식별자 (SID) | 설명 |
---|---|
SY |
시스템 사용자 모드 구성 요소를 포함하여 운영 체제 자체를 나타냅니다. |
LS |
로컬 서비스 로컬 서비스에 대해 미리 정의된 계정입니다(인증 및 세계에도 속함). 이 SID는 Windows XP부터 사용할 수 있습니다. |
NS |
네트워크 서비스 네트워크 서비스에 대해 미리 정의된 계정입니다(인증 및 세계에도 속함). 이 SID는 Windows XP부터 사용할 수 있습니다. |
다음 SID는 컴퓨터의 그룹을 나타냅니다.
보안 식별자 (SID) | 설명 |
---|---|
학사 |
관리자 컴퓨터의 기본 제공 관리자 그룹입니다. |
부 |
기본 제공 사용자 그룹 모든 로컬 사용자 계정 및 도메인의 사용자를 포괄하는 그룹입니다. |
BG |
기본 제공 게스트 그룹 로컬 또는 도메인 게스트 계정을 사용하여 로그인하는 사용자를 포함하는 그룹입니다. |
다음 SID는 사용자가 인증된 정도를 설명합니다.
보안 식별자 (SID) | 설명 |
---|---|
AU |
인증된 사용자 로컬 컴퓨터 또는 도메인에서 인식되는 모든 사용자입니다. 기본 제공 게스트 계정을 사용하여 로그인한 사용자는 인증되지 않습니다. 그러나 컴퓨터 또는 도메인에 개별 계정이 있는 게스트 그룹의 멤버는 인증됩니다. |
AN |
익명 로그온 사용자 익명 네트워크 세션과 같은 ID 없이 로그온한 모든 사용자입니다. Builtin 게스트 계정을 사용하여 로그인하는 사용자는 인증되거나 익명이 아닙니다. 이 SID는 Windows XP부터 사용할 수 있습니다. |
다음 SID는 사용자가 컴퓨터에 로그인하는 방법을 설명합니다.
보안 식별자 (SID) | 설명 |
---|---|
IU |
대화형 사용자 로컬 로그온 및 원격 데스크톱 로그온과 같은 "대화형"으로 컴퓨터에 처음 로그온한 사용자입니다. |
뉴 |
네트워크 로그온 사용자 대화형 데스크톱 액세스 없이 원격으로 머신에 액세스하는 사용자(예: 파일 공유 또는 RPC 호출). |
백색 왜성 |
세계 Windows XP 이전의 이 SID는 인증된 사용자, 익명 사용자 또는 기본 제공 게스트 계정 등 모든 세션을 다루었습니다. Windows XP부터 이 SID는 익명 로그온 세션을 다루지 않습니다. 인증된 사용자와 기본 제공 게스트 계정만 다룹니다. 신뢰할 수 없거나 "제한된" 코드도 World SID에서 다루지 않습니다. 자세한 내용은 다음 표의 RC(제한된 코드) SID에 대한 설명을 참조하세요. |
다음 SID는 특별한 언급을 받을 자격이 있습니다.
보안 식별자 (SID) | 설명 |
---|---|
RC |
제한된 코드 이 SID는 신뢰할 수 없는 코드로 액세스를 제어하는 데 사용됩니다. RC가 있는 토큰에 대한 ACL 유효성 검사는 토큰의 일반 SID 목록(예: WD 포함)에 대한 검사와 두 번째 목록(일반적으로 RC 및 원래 토큰 SID의 하위 집합 포함)에 대한 두 개의 검사로 구성됩니다. 토큰이 두 테스트를 모두 통과하는 경우에만 액세스 권한이 부여됩니다. 따라서 RC는 실제로 다른 SID와 함께 작동합니다. RC를 지정하는 ACL도 WD를 지정해야 합니다. RC가 ACL에서 WD와 쌍을 이루는 경우 신뢰할 수 없는 코드를 비롯한 모든 사람의 상위 집합이 설명됩니다. 신뢰할 수 없는 코드는 탐색기에서 실행 옵션을 사용하여 시작된 코드일 수 있습니다. 기본적으로 World는 신뢰할 수 없는 코드를 다루지 않습니다. |
UD |
User-Mode 드라이버 이 SID는 사용자 모드 드라이버에 대한 액세스 권한을 부여합니다. 현재 이 SID는 User-Mode 드라이버 프레임워크(UMDF)에 대해 작성된 드라이버만 포함합니다. 이 SID는 Windows 8부터 사용할 수 있습니다. "UD" 약어를 인식하지 않는 이전 버전의 Windows에서는 UMDF 드라이버에 대한 액세스 권한을 부여하려면 이 SID의 정규화된 형식(S-1-5-84-0-0-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;;GA;;;SY)"
SDDL_DEVOBJ_SYS_ALL 커널 모드 코드 외에도 System으로 실행되는 사용자 모드 코드가 액세스하기 위해 디바이스를 열 수 있다는 점을 제외하고 SDDL_DEVOBJ_KERNEL_ONLY 유사합니다.
레거시 드라이버는 이 ACL을 사용하여 엄격한 보안 설정으로 시작하고 SetFileSecurity 사용자 모드 함수를 사용하여 런타임에 해당 서비스가 개별 사용자에게 디바이스를 열도록 할 수 있습니다. 이 경우 서비스는 System으로 실행되어야 합니다.
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을 변경할 수 없습니다(관리자가 먼저 디바이스를 제어해야 합니다.)
모든 사용자(세계 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을 변경할 수 없습니다(관리자가 먼저 디바이스를 제어해야 합니다.)
모든 사용자(세계 SID)에게 읽기 권한이 부여됩니다. 또한 신뢰할 수 없는 코드도 코드에 액세스할 수 있습니다. 신뢰할 수 없는 코드는 탐색기에서 실행 옵션을 사용하여 시작된 코드일 수 있습니다. 기본적으로 World는 제한된 코드를 다루지 않습니다.
또한 통과 액세스 권한은 일반 사용자에게 부여되지 않습니다. 따라서 네임스페이스가 있는 디바이스에 대한 적절한 설명자가 아닐 수 있습니다.
이러한 SDDL 문자열에는 상속 한정자가 포함되지 않습니다. 따라서 디바이스 개체에만 적합하며 파일 또는 레지스트리 키에 사용하면 안 됩니다. SDDL을 사용하여 상속을 지정하는 방법에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.