윈도우 OS의 보안 식별자(SID : Security identifiers)의 용도와 구조, 흔히 사용되는 주요 SID의 목록 및, SID를 조회할 수 있는 whoami 에 대해 간단히 정리한 글
다중 사용자용 운영 체계 윈도우
윈도우에는 내 계정만 있는게 아니다.
윈도우는 기본적으로 다중 사용자 환경에서 동작하도록 설계된 OS이다. 나 혼자 쓰는 PC인데 무슨 말이냐고 반문하는 독자들 있겠으나 한번 생각해 보자. 정말 나 혼자 쓰는 PC라고 하면, 왜 컴퓨터를 켜고 나서 ID와 암호를 입력하는 로그온 절차를 진행해야 할까? 새로운 프로그램을 설치할때 가끔씩 나타나는 '사용자 계정 컨트롤'창과, 굳이 별도의 매뉴로 존재하는 '관리자 권한으로 실행'이라는 항목은 왜 존재하는 걸까? 단일 사용자용 OS라고 한다면, 이런 것들이 존재 할 이유가 없지 않은가?
실제로, 제어판의 컴퓨터 관리창이나, 파워셀의 Get-LocalUser 명령을 통해 확인해 보면, 내가 생성하지 않은 사용자 계정(ID)들이 존재 하고 있음을 알 수 있다.
윈도우가 사용자를 구분하는 방법
윈도우를 설치하며 계정을 생성할 때, 사용자는 ID와 암호를 생성한다. 이때 윈도우는 생성된 계정에 '고유ID'를 할당해 준다. 이 고유ID는 순차적인 것이 아닌, 완전히 무작위로 생성된 일련의 문자 열이다.
만약 사용자가 antena라는 ID의 계정을 새로 생성했다고 하자. 그럼 윈도우는 이 계정에 대한 고유ID를 생성한다. 그리고 antena계정을 삭제 한 다음, 똑같이 antena라는 ID의 계정을 다시 생성했다고 하자. 그럼 윈도우는 새롭게 만들어진 antena계정에 대해 새로운 고유ID를 생성한다. 그리고 그 고유ID는 이전의 것과 다른 ID가 생성된다. 즉, 사용자가 사용하는 ID만 놓고 보면 같게 보여도, 실제로는 새롭게 생성된 다른 계정이 된다는 뜻이다.
반대의 경우로, 만약 ID를 변경했다고 하더라도 고유ID는 변경되지 않는다. 사용자에게는 다른 계정처럼 느껴지겠으나, 윈도우 입장에서는 여전히 동일한 계정인 것이다
이러한 고유ID는 사용자 계정에만 존재하는 것은 아니다. 사용자 그룹과 같이, 윈도우 내에서 보안에 관련된 주체에는 이러한 고유ID가 할당 된다. 이 고유ID를 보안 식별자 (SID : Security identifiers)라고 한다. 이 SID를 통해 컴퓨터는 어떤 사용자(또는 동작을 진행하는 서비스등)이 가지고 있는 권한을 구분한다.
SID의 구조
SID는 아래와 같이 S로 시작하는 숫자들로 구성되어 있다.
S-1-5-21-1004336348-1177238915-682003330-512
어? 이거 어디선가 본건데? 하는 독자 제위들 있을것이다. 맞다. 보안관련 정책 문제가 발생하면 이벤트 뷰어에서 허구헌날 보이는 이상한 문자열이 바로 이것이다. 각각의 자리는 다음과 같은 의미를 가진다
S | 문자열이 SID임을 표시 |
1 | SID 버전 |
5 | SID의 식별자 기관 |
21-1004336348-1177238915-682003330 | 도메인 식별자 |
512 | 상대 식별자(RID : Relative Identifier) |
SID의 제일 앞에 위치하는 S는, 이 문자열이 SID인 것을 나타낸다. 그 다음으로는 SID의 버전이 표시된다. 여기까지는 대부분 바뀔 일이 없이 공통으로 사용 된다.
식별자 기관(Identifier Authority)
S-1-0 | NULL_SID_AUTHORITY (NULL) |
S-1-1 | WORLD_SID_AUTHORITY (모든 사용자) |
S-1-2 | LOCAL_SID_AUTHORITYSID (로컬 시스템) |
S-1-3 | CREATOR_SID_AUTHORITY (개체 생성자) |
S-1-5 | SECURITY_NT_AUTHORITY (NT 권한) |
S-1-15 | SECURITY_APP_PACKAGE_AUTHORITY (어플리케이션 권한) |
S-1-16 | SECURITY_MANDATORY_LABEL_AUTHORITY (무결성) |
S-1-17 | SCOPED_POLICY_ID_AUTHORITY (특정 보안 정책) |
S-1-18 | SECURITY_AUTHENTICATION_AUTHORITY (인증) |
SID 버전에 이어, 식별자 기관(Identifier Authority)이 이어진다. 식별자 기관이란, 각 SID가 속해있는 가장 최상위 보안 제공자를 의미한다. SID를 만든 주체라고 생각해도 되겠다. 우리는 윈도우를 사용하고 있기 때문에, 볼 수 있는 대부분의 식별자 기관은 5 (SECURITY_NT_AUTHORITY)일 것이다.
NT_AUTHORITY의 주요 SID
윈도우 시스템 (NT)은, 자신의 아래에 필요한 여러 권한들을 구성한다. 이른바, '잘 알려진 그룹 (well-known SIDs)'이라 불리며, 종종 보게 되는 SID들을 보자면,
S-1-5-2 | 대화형 로그인 접근을 제외한 네트워크로 접근해 로그인한 모든 사용자 |
S-1-5-4 | 대화형 UI를 통해 로그인하는 모든 사용자 |
S-1-5-5 | 로그온 되어있는 사용자 |
S-1-5-6 | 서비스 |
S-1-5-11 | 인증된 ID를 가진 사용자 |
S-1-5-13 | 원격 데스크탑 |
S-1-5-14 | 원격 데스크탑을 이용해 접속한 사용자 |
S-1-5-18 | 운영체제 (System 계정) |
S-1-5-19 | 로컬 서비스 |
S-1-5-20 | 네트워크 서비스 |
S-1-5-도메인 식별자-500 | 시스템 관리자 계정 |
S-1-5-도메인 식별자-501 | 게스트 계정 |
지금 내 계정의 SID 확인하기
도스창에서 아래의 명령을 치면, 현 접속중인 계정 명과 SID를 알 수 있다.
whoami /user
기타, 함께 쓸 수 있는 옵션으로는,
- /GROUPS : 현 사용자가 등록된 그룹, 계정 유형을 표시
- /PRIV : 현 사용자의 보안 권한 표시
- /ALL : 뭐든 보여줄 수 있는건 죄다 표시
마무리
보안 식별자에 대해 더 상세한 내용을 알고 싶다면, MS에서 제공하는 보안식별자 문서를 참고하기 바란다.