hacktricks/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md
2024-02-10 21:30:13 +00:00

14 KiB

ACLs - DACLs/SACLs/ACEs


Trickest를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 액세스하세요:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요!

HackTricks를 지원하는 다른 방법:

접근 제어 목록 (ACL)

접근 제어 목록 (ACL)은 객체와 해당 속성에 대한 보호를 지시하는 순서가 지정된 접근 제어 항목 (ACE)의 집합으로 구성됩니다. 본질적으로 ACL은 주어진 객체에서 어떤 보안 주체 (사용자 또는 그룹)에 의해 어떤 작업이 허용되거나 거부되는지를 정의합니다.

두 가지 유형의 ACL이 있습니다:

  • Discretionary Access Control List (DACL): 객체에 대한 액세스 권한을 가진 사용자 및 그룹을 지정합니다.
  • System Access Control List (SACL): 객체에 대한 액세스 시도의 감사를 관리합니다.

파일에 액세스하는 프로세스는 시스템이 객체의 보안 설명자를 사용자의 액세스 토큰과 비교하여 액세스가 허용되어야 하는지 및 해당 액세스의 범위를 결정하는 것을 포함합니다. 이는 ACE와 보안 주체의 SID를 비교하여 액세스 자격을 결정합니다.

주요 구성 요소

  • DACL: 객체에 대한 사용자 및 그룹의 액세스 권한을 부여하거나 거부하는 ACE를 포함합니다. 이는 액세스 권한을 지시하는 주요 ACL입니다.

  • SACL: 객체에 대한 액세스 감사를 위해 사용되며, ACE는 보안 이벤트 로그에 기록될 액세스 유형을 정의합니다. 이는 무단 액세스 시도를 감지하거나 액세스 문제를 해결하는 데 매우 유용합니다.

ACL과 시스템 상호 작용

각 사용자 세션은 해당 세션에 관련된 보안 정보 (사용자, 그룹 식별 및 권한)를 포함하는 액세스 토큰과 연결됩니다. 이 토큰에는 세션을 고유하게 식별하는 로그온 SID도 포함됩니다.

로컬 보안 권한자 (LSASS)는 액세스 요청을 처리하여 액세스를 시도하는 보안 주체와 일치하는 ACE를 DACL에서 검사함으로써 객체에 대한 액세스 요청을 처리합니다. 관련 ACE가 없는 경우 액세스가 즉시 허용됩니다. 그렇지 않은 경우, LSASS는 액세스 토큰의 보안 주체의 SID와 ACE를 비교하여 액세스 자격을 결정합니다.

요약된 프로세스

  • ACL: DACL을 통해 액세스 권한을 정의하고, SACL을 통해 감사 규칙을 정의합니다.
  • 액세스 토큰: 세션에 대한 사용자, 그룹 및 권한 정보를 포함합니다.
  • 액세스 결정: DACL ACE를 액세스 토큰과 비교하여 결정하며, 감사를 위해 SACL을 사용합니다.

ACEs

**세 가지 주요 유형의 접근 제어 항목 (ACE)**이 있습니다:

  • 액세스 거부 ACE: 이 ACE는 특정 사용자 또는 그룹에 대한 객체 액세스를 명시적으로 거부합니다 (DACL에서).
  • 액세스 허용 ACE: 이 ACE는 특정 사용자 또는 그룹에 대한 객체 액세스를 명시적으로 허용합니다 (DACL에서).
  • 시스템 감사 ACE: 시스템 액세스 제어 목록 (SACL) 내에 위치한 이 ACE는 사용자 또는 그룹에 의한 객체 액세스 시도에 대한 감사 로그를 생성합니다. 액세스가 허용되었는지 거부되었는지 및 액세스의 성격을 문서화합니다.

각 ACE에는 네 가지 중요한 구성 요소가 있습니다:

  1. 사용자 또는 그룹의 보안 식별자 (SID) (또는 그래픽 표현에서의 주체 이름).
  2. ACE 유형 (액세스 거부, 허용 또는 시스템 감사)을 식별하는 플래그.
  3. 자식 객체가 부모로부터 ACE를 상속할지 여부를 결정하는 상속 플래그.
  4. 객체에 부여된 권한을 지정하는 **액세스 마스크**로, 32비트 값입니다.

액세스 결정은 다음과 같이 각 ACE를 순차적으로 검사하여 수행됩니다:

  • 액세스 거부 ACE가 액세스 토큰에서 신뢰자에게 요청된 권한을 명시적으로 거부합니다.
  • 액세스 허용 ACE가 액세스 토큰의 신뢰자에게 모든 요청된 권한을 명시적으로 허용합니다.
  • 모든 ACE를 확인한 후에도 요청된 권한 중 명시적으로 허용되지 않은 권한이 있다면 액세스는 암묵적으로 거부됩니다.

ACE의 순서

ACE (누가 무엇에 액세스할 수 있는지 또는 할 수 없는지를 지정하는 규칙)가 DACL이라는 목록에 배치되는 방식

GUI 예시

여기에서 가져온 예시

이것은 ACL, DACL 및 ACE를 보여주는 폴더의 클래식 보안 탭입니다:

http://secureidentity.se/wp-content/uploads/2014/04/classicsectab.jpg

고급 버튼을 클릭하면 상속과 같은 추가 옵션을 얻을 수 있습니다:

http://secureidentity.se/wp-content/uploads/2014/04/aceinheritance.jpg

그리고 보안 주체를 추가하거나 편집하는 경우:

http://secureidentity.se/wp-content/uploads/2014/04/editseprincipalpointers1.jpg

마지막으로 감사 탭에서 SACL을 확인할 수 있습니다:

http://secureidentity.se/wp-content/uploads/2014/04/audit-tab.jpg

간단히 설명하는 접근 제어

폴더와 같은 리소스에 대한 액세스를 관리할 때, 우리는 액세스 제어 목록 (ACL) 및 액세스 제어 항목 (ACE)이라고 하는 목록과 규칙을 사용합니다. 이들은 특정 데이터에 누가 액세스할 수 있는지 또는 할 수 없는지를 정의합니다.

특정 그룹에 대한 액세스 거부

Cost라는 폴더가 있다고 상상해보세요. 마케팅 팀을 제외한 모든 사람들이 액세스할 수 있도록 하려면 어떻게 해야 할까요? 올바른 규칙을 설정하여 마케팅 팀에 대한 액세스를 명시적으로 거부한 후 다른 모든 사람들에게 액세스를 허용함으로써 이를 보장할 수 있습니다. 이를 위해 마케팅 팀에 대한 액세스 거부 규칙을 모든 사람들에게 액세스를 허용하는 규칙보다 먼저 배치합니다.

거부된 그룹의 특정 구성원에 대한 액세스 허용

마케팅 팀이 일반적으로 액세스 권한을 갖지 않아야 하지만 마케팅 디렉터인 Bob은 Cost 폴더에 액세스해야 한다고 가정해 봅시다. 우리는 Bob을 위해 액세스를 허용하는 특정 규칙 (ACE)을 추가하고, 이를 마케팅 팀에 대한 액세스 거부 규칙보다 먼저 배치할 수 있습니다. 이렇게 하면 Bob은 팀의 일반적인 제한에도 불구하고 액세스를 얻을 수 있습니다.

액세스 제어 항목 이해하기

ACE는 ACL 내의 개별 규칙입니다. 이들은 사용자 또는 그룹을 식별하고, 허용되거나 거부되는 액세스를 지정하며, 이러한 규칙이 하위 항목에 적용되는 방식 (상속)을 결정합니다. ACE에는 다음과 같은 두 가지 주요 유형이 있습니다:

  • 일반 ACE: 이들은 일반적으로 적용되며, 모든 유형의 개체에 영향을 미치거나 컨테이너 (폴더와 같은)와 비컨테이너 (파일과 같은)만을 구분합니다. 예를 들어, 사용자가 폴더의 내용을 볼 수 있지만 내부 파일에는 액세스할 수 없는 규칙입니다.

  • 개체별 ACE: 이들은 더 정확한 제어를 제공하며, 특정 유형의 개체 또는 개체 내의 개별 속성에 대한 규칙을 설정할 수 있습니다. 예를 들어, 사용자 디렉토리에서 사용자가 전화번호를 업데이트할 수 있지만 로그인 시간은 업데이트할 수 없는 규칙입니다.

각 ACE에는 규칙이 적용되는 대상 (보안 식별자 또는 SID), 규칙이 허용되거나 거부되는 내용 (액세스 마스크) 및 다른 개체에 상속되는 방식과 같은 중요한 정보가 포함되어 있습니다.

ACE 유형 간 주요 차이점

  • 일반 ACE는 단순한 액세스 제어 시나리오에 적합하며, 동일한 규칙이 개체의 모든 측면 또는 컨테이너 내의 모든 개체에 적용되는 경우에 사용됩니다.

  • 개체별 ACE는 더 복잡한 시나리오에서 사용되며, 특히 Active Directory와 같은 환경에서는 개체의 특정 속성에 대한 액세스를 다르게 제어해야 할 수 있습니다.

요약하면, ACL과 ACE는 정확한 액세스 제어를 정의하여 민감한 정보나 리소스에 대한 액세스를 가진 개인 또는 그룹에게만 허용하며, 액세스 권한을 개별 속성이나 개체 유형 수준까지 맞춤 설정할 수 있도록 도와줍니다.

액세스 제어 항목 레이아웃

ACE 필드 설명
유형 ACE의 유형을 나타내는 플래그입니다. Windows 2000 및 Windows Server 2003은 모든 보안 가능한 개체에 연결되는 세 가지 일반 ACE 유형과 Active Directory 개체에 발생할 수 있는 세 가지 개체별 ACE 유형을 지원합니다.
플래그 상속 및 감사를 제어하는 비트 플래그 세트입니다.
크기 ACE에 할당된 메모리의 바이트 수입니다.
액세스 마스크 개체에 대한 액세스 권한에 해당하는 비트가 있는 32비트 값입니다. 비트는 켜거나 끌 수 있지만, 설정의 의미는 ACE 유형에 따라 다릅니다. 예를 들어, 읽기 권한에 해당하는 비트가 켜져 있고 ACE 유형이 거부인 경우, ACE는 개체의 권한을 읽을 수 없도록 거부합니다. 동일한 비트가 켜져 있지만 ACE 유형이 허용인 경우, ACE는 개체의 권한을 읽을 수 있도록 허용합니다. 액세스 마스크의 자세한 내용은 다음 표에서 확인할 수 있습니다.
SID 이 ACE에 의해 제어되는 사용자 또는 그룹을 식별합니다.

액세스 마스크 레이아웃

비트 (범위) 의미 설명/예시
0 - 15 개체별 액세스 권한 데이터 읽기, 실행, 데이터 추가
16 - 22 표준 액세스 권한 삭제, ACL 쓰기, 소유자 쓰기
23 보안 ACL에 액세스할 수 있는지 여부
24 - 27 예약됨