본문 바로가기

진리는어디에

ACL을 이용한 적절한 사용 권한 설정

1. ACL이 중요한 이유는?

ACL(Access Control List)은  개개의 사용자들이 디렉토리나 파일과 같은 특정 시스템 개체에 접근할 수 있는 권한을 설정해 놓은 표이다.

  • 공격자(해커)가 리소스에 접근 할 수 있다면 게임 끝이다.
    • “만약 레지스트리키의 ACL이 Everyone에게 모든 권한 허용으로 설정 되어 있으면, 누구나 해당 레지스트리의 키 데이터를 읽고, 쓰고 심지어는 다른 사람의 접근을 차단 할 수 있다
  • ACL을 이용해 리소스에 대한 접근 권한을 설정 해 두지 않으면 예측하지 못한 다양한 방법 공격이 가능하다.
    ex) 64byte 로 지정된 버퍼에 더 많은 데이터를 써버려 오버런 발생
         대량의 데이터를 읽고 쓰게 강제
2. ACL의 구성
ACE(Access Control Entry) 란?
ACL의 구성 요소. ACL은 0개 혹은 이상의 ACE들을 가질 수 있고, 각 ACE들은 특정 자원에 대한 접근을 제어하거나 모니터링 할 수 있다.

  • Windows NT, 2000, XP와 이후 버젼에서 지원
  • 95, 98, Me, CE는 ACL을 지원하지 않음
  • NT와 이후 버젼 OS에서는 DACL, SACL 두 가지 지원
    • DACL(Discretionary Access Control List) - 접근 권한 결정
    • SACL(System Access Control List) - 감사 정책 결정
    • 둘은 비슷해 보이나 DACL은 권한을 설정하는 역할. SACL은 파일이나 폴더 혹은 주변 기기 오브젝트에 접근하는 이벤트 발생시 기록(log)을 할 수있음
  • DACL로 접근 권한을 제어 하거나, SACL로 감사 할 수 있는 보안 리소스의 예
    http://technet.microsoft.com/ko-kr/library/bb795082.aspx 참고
  • DACL
    • 각 DACL들은 0개 혹은 그 이상의 ACE(Access Control Entry)들로 구성 됨.
    • ACE는 SID(Security ID)와 SID가 리소스에 대해 가능한 작업들의 설명.
      두 가지 주요 요소로 구성 된다(그 외에도 여러 요소들이 있다).
    • SID - 사용자, 그룹, 컴퓨터를 나타내는 아이디
    • 거부 ACE - 특정 접근 권한을 거부하는 ACE
      ex) Everyone에 대해 모든 권한을 거부(owner 빼고 심지어 관리자 조차도 접근 불가)
      ACL은 항상 거부 ACE로 시작한다. 그렇지 않으면 허용 접근 권한이 지정되지 않는다.
3. 적적한 ACE 선택 방법?

ACL 내의 모든 ACE는 반드시 의미가 있다 - 의미를 모르겠다면 제거한다.


  1. 사용할 리소스가 무엇인지 결정
  2. 비즈니스에서 정의된 접근 요구 사항을 결정
  3. 적합한 접근 제어 기술을 선택한다.
  4. 접근 요구사항을 접근 제어 기술로 변환한다.

“주체(subject)는 대상 개체(Object)에게 어떤 행동을 수행할 수 있다”



4. ACL 생성

  • Window NT 4에서 ACL 생성
    • EXPLICIT_ACCESS
    • AllocateAndInitializeSid()
    • InitailizeSecurityDescripter()
    • SetSecurityDescriptorDacl(),
      SetSecurityDescriptorOwner(),
      SetSecurityDescriptorGroup(),
      SetSecurityDescriptorSacl()
  • Windows 2000에서 ACL 생성
    • SDDL(Security Descriptor Definition Language) 사용

5. ACE 권한 지정 순서
거부 ACE가 다른 ACE 보다 먼저 지정되어야 한다(이렇게 하지 않으면 허용 접근 권한이 지정되지 않는다)

  1. 명시적 거부
  2. 명시적 허용
  3. 부모 컨테이너에서 상속된 거부
  4. 부모 컨테이너에서 상속된 허용....
6. NULL DACL과 그 밖의 위험한 ACE

NULL DACL == 방어하지 않는다


  • Everyone(WRITE_DAC)
    오브젝트의 DACL을 변경할 수 있는 권한. 공격자가 SD에 기술된 ACL 변경으로 자신만 해당 오브젝트에 접근하고 다른 사람은 거부하도록 만들 수 있다.
  • Everyone(WRITE_ONWER)
    오브젝트의 소유자를 변경할 수 있는 권한. 공격자가 SD에 기술된 오브젝트 소유자를 변경해 버릴 수 있다.
  • Everyone(FILE_ADD_FILE)
    공격자가 새로운 실행 파일을 파일 시스템에 추가 할 수 있다.
  • Everyone(DELETE)
    누구나 오브젝트를 삭제 가능하다
  • Everyone(FILE_DELETE_CHILD)
    공격자가 디렉토리에 FILE_DELETE_CHILD 권한을 가지면, 차일드 오브젝트에 대한 권한관계 없이 삭제 가능하다.
  • Everyon(GENERIC_ALL)
    NULL DACL과 같다.

What Are SD(Security Descriptors) and Access Control Lists?
...security descriptors to help control access to the objects. Security descriptors include information about who owns an object, who can access it and in what way, and what types of access are audited. Security descriptors, in turn, contain the access control list (ACL) of an object,...
http://technet.microsoft.com/ko-kr/library/cc783702(WS.10).aspx
7. 운영체제에 포함되지 않는 기타 접근 권한 메커니즘
  • Net 프레임 워크 역할(role), COM+ 역할
    ※ 역할이란 정책을 강제하기 위해 애플리케이션에서 사용.
       예를 들면 그룹을 지정하고 해당 그룹에 허용되는 트랜젝션들을 정의(애플리케이션 종속적)
  • IP제한
  • SQL 서버의 트리거와 SQL 서버의 사용 권한
    업데이트시 그룹을 검사하여 적절한 권한의 그룹이 아닌 경우 롤백을 구동하는 트리거
유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!