AccessCheck 작동 방식

스레드가 보안 개체에 액세스하려고 하면 시스템에서 액세스 권한을 부여하거나 거부합니다. 개체에 DACL(임의 액세스 제어 목록)이 없으면 시스템에서 액세스 권한을 부여합니다. 그렇지 않으면 시스템에서 스레드에 적용되는 개체의 DACL에서 Access Control 항목(API)을 찾습니다. 개체의 DACL에 있는 각 ACE는 사용자 계정, 그룹 계정 또는 로그온 세션일 수 있는 수탁자에게 허용되거나 거부된 액세스 권한을 지정합니다.

DACL

시스템은 각 ACE의 수탁자를 스레드의 액세스 토큰에서 식별된 수탁자와 비교합니다. 액세스 토큰에는 사용자와 사용자가 속한 그룹 계정을 식별하는 SID( 보안 식별자 )가 포함됩니다. 토큰에는 현재 로그온 세션을 식별하는 로그온 SID 도 포함됩니다. 액세스 검사 동안 시스템은 사용하도록 설정되지 않은 그룹 SID를 무시합니다. 사용, 사용 안 함 및 거부 전용 SID에 대한 자세한 내용은 액세스 토큰의 SID 특성을 참조하세요.

일반적으로 시스템은 액세스를 요청하는 스레드의 기본 액세스 토큰 을 사용합니다. 그러나 스레드가 다른 사용자를 가장하는 경우 시스템은 스레드의 가장 토큰을 사용합니다.

시스템은 다음 이벤트 중 하나가 발생할 때까지 각 ACE를 순서대로 검사합니다.

  • 액세스 거부 ACE는 스레드의 액세스 토큰에 나열된 수탁자 중 하나에 대해 요청된 액세스 권한을 명시적으로 거부합니다.
  • 스레드의 액세스 토큰에 나열된 수탁자를 위한 하나 이상의 액세스 허용 AES는 요청된 모든 액세스 권한을 명시적으로 부여합니다.
  • 모든 ACE가 확인되었으며 명시적으로 허용되지 않은 요청된 액세스 권한이 하나 이상 있으며, 이 경우 액세스가 암시적으로 거부됩니다.

다음 그림에서는 개체의 DACL이 다른 스레드에 대한 액세스를 거부하면서 한 스레드에 대한 액세스를 허용하는 방법을 보여 줍니다.

다른 스레드에 다른 액세스 권한을 부여하는 dacl

스레드 A의 경우 액세스 거부 ACE가 스레드의 액세스 토큰에 있는 사용자에게 적용되므로 시스템에서 ACE 1을 읽고 액세스를 즉시 거부합니다. 이 경우 시스템은 AES 2 및 3을 검사 않습니다. 스레드 B의 경우 ACE 1이 적용되지 않으므로 시스템은 쓰기 액세스를 허용하는 ACE 2와 읽기 및 실행 액세스를 허용하는 ACE 3으로 진행됩니다.

요청된 액세스 권한이 명시적으로 부여되거나 거부될 때 시스템에서 ACE 검사를 중지하기 때문에 DACL의 API 순서가 중요합니다. 예제에서 ACE 순서가 다른 경우 시스템에서 스레드 A에 대한 액세스 권한을 부여했을 수 있습니다. 시스템 개체의 경우 운영 체제는 DACL에서 기본 API 순서를 정의합니다.