디바이스 개체용 SDDL

SDDL(보안 설명자 정의 언어)은 보안 설명자를 나타내는 데 사용됩니다. 디바이스 개체에 대한 보안은 INF 파일에 배치 되거나 IoCreateDeviceSecure에 전달되는 SDDL 문자열로 지정할 수 있습니다. 보안 설명자 정의 언어는 Microsoft Windows SDK 설명서에 완전히 설명되어 있습니다.

INF 파일은 전체 SDDL 범위를 지원하지만 언어의 하위 집합만 IoCreateDeviceSecure 루틴에서 지원됩니다. 이 하위 집합은 여기에 정의되어 있습니다.

디바이스 개체에 대한 SDDL 문자열은 "D:P" 형식과 "(A;; 형식의 하나 이상의 식) 형식입니다. 액세스;;; SID)". SID 값은 Access 값이 적용되는 대상(예: 사용자 또는 그룹)을 결정하는 보안 식별자를 지정합니다. Access 값은 SID에 허용되는 액세스 권한을 지정합니다. AccessSID 값은 다음과 같습니다.

참고 디바이스 개체에 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 설명서를 참조하세요.