조건부 ACE에 대한 보안 설명자 정의 언어
ACE(조건 부 액세스 제어 항목 )를 사용하면 액세스 확인이 수행될 때 액세스 조건을 평가할 수 있습니다. SDDL(보안 설명자 정의 언어)은 조건부 API를 문자열 형식으로 정의하는 구문을 제공합니다.
조건부 ACE의 SDDL은 ACE 문자열의 끝에 조건문 구문이 추가된 모든 ACE의 경우와 동일합니다. SDDL에 대한 자세한 내용은 보안 설명자 정의 언어를 참조 하세요.
"#" 기호는 리소스 특성에서 "0"과 동의어입니다. 예를 들어 D:AI(XA; OICI;FA;;; 백색 왜성; (OctetStringType==#1#2#3##)) 는 D:AI(XA)와 동일하고 해석됩니다. OICI;FA;;; 백색 왜성; (OctetStringType==#01020300).
조건부 ACE 문자열 형식
보안 설명자 문자열의 각 ACE는 괄호로 묶습니다. ACE의 필드는 다음과 같은 순서이며 세미콜론(;))으로 구분됩니다.
AceType**;AceFlags;권한;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**
필드는 ACE 문자열에 설명된 대로 다음과 같은 예외가 있습니다.
AceType 필드는 다음 문자열 중 하나일 수 있습니다.
ACE 형식 문자열 Sddl.h의 상수 AceType 값 "XA" SDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE "XD" SDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE ACE 문자열에는 문자열 끝에 괄호로 묶인 하나 이상의 조건식이 포함됩니다.
조건식
조건식에는 다음 요소가 포함될 수 있습니다.
식 요소 | 설명 |
---|---|
AttributeName |
지정된 특성에 0이 아닌 값이 있는지 테스트합니다. |
exists AttributeName |
지정된 특성이 클라이언트 컨텍스트에 있는지 여부를 테스트합니다. |
AttributeName 연산자 값 |
지정된 작업의 결과를 반환합니다. |
ConditionalExpression**||**ConditionalExpression |
지정된 조건식 중 하나가 true인지 여부를 테스트합니다. |
ConditionalExpression &&ConditionalExpression |
지정된 조건식이 모두 true인지 여부를 테스트합니다. |
! (ConditionalExpression) |
조건식의 역방향입니다. |
Member_of{SidArray} |
클라이언트 컨텍스트의 SID_AND_ATTRIBUTES 배열에 SidArray로 지정된 쉼표로 구분된 목록에 모든 SID(보안 식별자)가 포함되어 있는지 테스트합니다. Allow ACE의 경우 클라이언트 컨텍스트 SID에는 일치 항목으로 간주되도록 설정된 SE_GROUP_ENABLED 특성이 있어야 합니다. 거부 ACE의 경우 클라이언트 컨텍스트 SID에는 SE_GROUP_ENABLED 또는 SE_GROUP_USE_FOR_DENY_ONLY 특성 집합이 일치 항목으로 간주되어야 합니다. SidArray 배열에는 SID 문자열(예: "S-1-5-6") 또는 SID 별칭(예: "BA")이 포함될 수 있습니다. |
특성
특성은 클라이언트 컨텍스트에서 AUTHZ_SECURITY_ATTRIBUTES_INFORMATION 배열의 요소를 나타냅니다. 특성 이름에는 영숫자 문자와 모든 문자 ":", "/", ".", "_"가 포함될 수 있습니다.
특성 값은 다음 형식 중 어느 것이든 될 수 있습니다.
값 유형 | 설명 |
---|---|
정수 |
10진수 또는 16진수 표기법의 64비트 정수입니다. |
문자열 |
따옴표로 구분된 문자열 값입니다. |
SID |
SID(S-1-1-0) 또는 SID(BA). MEMBER_OF 또는 Device_Member_of RHS에 있어야 합니다. |
BLOB |
# 뒤에 16진수가 잇습니다. 숫자의 길이가 홀수이면 #은 0으로 변환되어 짝수로 만들어집니다. 또한 값의 다른 위치에 나타나는 #은 0으로 변환됩니다. |
연산자
다음 연산자는 조건식에서 특성 값을 테스트하는 데 사용하도록 정의됩니다. 이러한 모든 연산자는 이진 연산자이며 AttributeName 연산자 값 형식으로 사용됩니다.
Operator | 설명 |
---|---|
== |
기존 정의입니다. |
!= |
기존 정의입니다. |
< |
기존 정의입니다. |
<= |
기존 정의입니다. |
> |
기존 정의입니다. |
>= |
기존 정의입니다. |
포함 |
지정된 특성의 값이 지정된 값의 상위 집합이면 TRUE 이고, 그렇지 않으면 FALSE입니다. |
Any_of |
지정된 값이 지정된 특성 값의 상위 집합이면 TRUE 이고, 그렇지 않으면 FALSE입니다. |
또한 단항 연산자 존재, Member_of 및 부정(!)은 조건식 테이블에 설명된 대로 정의됩니다.
"Contains" 연산자 앞에 공백이 뒤에 와야 하며 "Any_of" 연산자 앞에 공백이 와야 합니다.
연산자 우선 순위
연산자는 다음 우선 순위 순서로 평가되며, 동일한 우선 순위 연산이 왼쪽에서 오른쪽으로 평가됩니다.
- 존재, Member_of
- 포함, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
또한 조건식의 모든 부분을 괄호로 묶을 수 있습니다. 괄호 안의 식이 먼저 계산됩니다.
알 수 없는 값
조건식의 결과는 때때로 알 수 없는 값을 반환합니다. 예를 들어 지정한 특성이 없으면 관계형 작업 중에서 알 수 없음을 반환합니다.
다음 표에서는 ConditionalExpression1과 ConditionalExpression2라는 두 조건식 간의 논리 AND 연산에 대한 결과를 설명합니다.
ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1 &&ConditionalExpression2 |
---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
FALSE |
TRUE |
UNKNOWN |
UNKNOWN |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
UNKNOWN |
FALSE |
UNKNOWN |
TRUE |
UNKNOWN |
UNKNOWN |
FALSE |
FALSE |
UNKNOWN |
UNKNOWN |
UNKNOWN |
다음 표에서는 ConditionalExpression1과 ConditionalExpression2라는 두 조건식 간의 논리 OR 연산에 대한 결과를 설명합니다.
ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1 || ConditionalExpression2 |
---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
TRUE |
UNKNOWN |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
UNKNOWN |
UNKNOWN |
UNKNOWN |
TRUE |
TRUE |
UNKNOWN |
FALSE |
UNKNOWN |
UNKNOWN |
UNKNOWN |
UNKNOWN |
값이 UNKNOWN인 조건식의 부정도 UNKNOWN입니다.
조건부 ACE 평가
다음 표에서는 조건식의 최종 평가에 따라 조건부 ACE의 액세스 확인 결과를 설명합니다.
ACE 유형 | TRUE | FALSE | UNKNOWN |
---|---|---|---|
허용 |
허용 |
ACE 무시 |
ACE 무시 |
거부 |
거부 |
ACE 무시 |
거부 |
예제
다음 예제에서는 지정된 액세스 정책이 SDDL을 사용하여 정의된 조건부 ACE로 표시되는 방법을 보여 줍니다.
-
정책
-
다음 조건이 모두 충족되면 모든 사람에게 실행을 허용합니다.
- 제목 = PM
- Division = Finance or Division = Sales
-
SDDL
-
D:(XA; ; FX;;; S-1-1-0; (@User.Title=="PM" &&&(@User.Division=="Finance" || @User.Division ==" Sales"))
-
정책
-
사용자 프로젝트가 파일 프로젝트와 교차하는 경우 실행을 허용합니다.
-
SDDL
-
D:(XA; ; FX;;; S-1-1-0; (@User.Project Any_of @Resource.Project))
-
정책
-
사용자가 스마트 카드로 로그인하고 백업 운영자이며 Bitlocker를 사용하도록 설정된 컴퓨터에서 연결하는 경우 읽기 액세스를 허용합니다.
-
SDDL
-
D:(XA; ;FR;;; S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))