본문 바로가기

IT 살이/03. 관리 - 보안 관리

[연재 02] 분리된 토큰 모델(Split token)

달봉이는 Wndows의 보안에 대해서는 잘 모른다. 그러나 UAC를 이해하기 위해서는 기본적인 내용은 알고 있어야 할 것 같아서 이전 Windows의 보안에 대해서 간단히 정리하고 Vista의 UAC 얘기를 계속하겠다.

■ 이전 Windows의  Security Basics

이전 Windows의 보안 모델을 간단히 풀이하면 다음과 같은 그림으로 정리될 수 있을 것 같다(그림이 잘 되었는지는 누구의 검증도 안받았다 -_-;;)

[그림] Windows Security Basics

사용자가 로그온을 하면 "토큰(token)"이라는 것이 메모리에 생성된다(1). 토큰에는 사용자가 누구이며 어떤 권한을 갖는가를 정의하는 데이터 구조이며 유일한 값을 갖는다. 사용자가 로그온 후 "diary.doc"라는 워드 문서를 열겠다고  프로그램(MS Word)에 요청을 하게 되면(2) Windows는 토큰을 복사해서 프로그램에 건네준다(3). 프로그램은 다시 NTFS라는 파일 시스템에 파일을 오픈해도 괜찮겠냐고 문의를 하면(4) NTFS에서는 프로그램이 가지고 있는 토큰을 요청한다. NTFS에는 파일이나 폴더같은 자원에 대한 사용자 계정의 권한(permission) 정보를 저장하고 있다. NTFS는 건네 받은 토큰에 있는 권한 정보와 자신이 가지고 있는 리소스에 대한 권한 정보를 비교해서 프로그램의 요청의 수락 여부를 판단한다. 즉 "프로그램 당신이 건네준 토큰으로는 읽기 전용으로만 오픈할 수 있습니다."라는 결과를 건네준다. 프로그램이 NTFS에 건네준 토큰은 결국 사용자에 대한 권한을 가지고 있는 것으로서 이런 판정은 결국 사용자 권한에 대한 판정이 되는 것이다. 이런 식으로 해서 사용자가 시스템 자원에 대해서 접근 권한이 결정되는 것이다.

■ Vista에 추가된 보안 요소

"관리자 승인 모드(Administrator Approval Mode)"라 불리는 개념이 추가되었다. 이것을 풀이하자면 "승인을 얻은 후에 관리자가 될 수 있는 그런 환경" 정도가 되지 않을까 싶다. Administrators 그룹에 속한 관리자 계정으로 로그온하면 이 계정은 "관리자 승인 모드에 있는 관리자(administrator in Administrator Approval Mode)"가 되는 것이다( 말 어렵다.-_-;;;). 즉 관리자는 관리자인데 승인을 얻은 후에 관리자 권한을 얻을 수 있는 관리자라는 것이다. 평소(?)에는? 로그온 후 특별한 권한이 필요한 경우가 아니라면 일반 사용자 계정으로 실행된다.

참고로 Administrators 그룹에 속한 관리자가 아니라 기본 제공 관리자(built-in administrator)계정은 "관리자 승인 모드"의 관리자가 아니다. 이 계정은 기본적으로 활성화되지 않도록 되어 있다. 즉 사용자가 이 계정을 사용해서 로그온하지 못하도록 설정되어 있다. 그러나 설정을 변경하여 이 계정으로 로그온할 수도 있다. 그런 경우는 "관리자 승인 모드"로 로그온하는 것이 아니기때문에 이전 Windows에서 처럼 바로 관리자 계정으로 작업을 하게 된다. 그러나 Vista에서는 이 계정을 사용하지 말것을 권장하고 있다. 기본 제공 관리자 계정을 보이게 하는 방법은 이전 포스트를 참고하면 된다.

Vista에서도 이전의 Windows에서와 마찬가지로 사용자가 로그온했을때 그룹 멤버십과 권한(Privileges)을 갖는 토큰(token)자원(파일과 폴더등)에 대한 퍼미션(permission)정보를 비고해서 사용자 계정에 대한 권한을 판정한다. 그러나 Vista에서는 "관리자 승인 모드"를 구현하기 위해서 내부적으로 이전과는 다른 모양의 토큰(token)을 사용하게 된다. 

Vista의 토큰은 두개로 분리되어 있다. 하나는 사용자 계정을 나타내는 계정이고 다른 하나는 관리자 계정을 나타내는 토큰이다. 이로 인해서 Vista의 토큰 모델을 분리된 모델(split token)이라고 한다. 그리고 "관리자 승인 모드"의 일반 사용자 계정을 나타내는 토큰은 관리자 권한이 제거된 토큰이라고 해서 filtered token이라고 한다. 이에 비교되는 관리자 계정의 토큰은 전체 권한을 갖는다해서 unfiltered token이라고도 하고 다른 용어로는 full access token이라고도 한다.

[그림] 분리된 토큰 생성

[그림] Elevation 발생

Administrators그룹에 속한 관리자가 로그온을 하고 나면 그림처럼 일반 사용자 토큰과 관리자 토큰이 모두 생성되고 기본적으로 일반 사용자 토큰이 사용되게 된다. Time Zone을 변경하거나 일반 업무를 할때는 일반 사용자 계정의 토큰으로도 충분한 권한을 가지고 작업을 하게 된다. 그러나 사용자가 관리자 계정을 필요로 하는 작업을 하게 되면 그림처럼 권한의 상승이 필요하게 된다. 이때 UAC가 작동하게 되어 사용자에게 승인을 구하게 되는 것이다.

하나 더 언급하고 지나가자면, 기본적으로 프로세스는 부모 프로세스의 권한 토큰을 갖게 된다는 것이다. 그래서 만약 새로운 프로세스가 elevated된 프로세스에서 생성되면 그 새로운 프로세스는 elevated된 상태가 될 것이고 부모 프로세스가 elevated되지 않은 프로세스라면 새로운 프로세스도 기본적으로 elevated되지 않는다.

프로그램이 토큰을 갖는 것은 앞에서 알아본 것처럼 프로그램이 "시작될때"이다. 일단 프로그램이 시작되고 나면 부여받은 토큰을 변경할 수 없다. 개발자 입장에서 UAC를 이해하는  키 포인트중의 하나는, 프로그램을 시작할때  Windows에 "어떤 토큰을 사용할 지를 어떻게 알도록 해 주는가" 이다. 즉  "Windows가 사용할 토큰을 어떻게 결정하는지를 이해하면 되는 것"이다.  Windows는 다음과 같은 두가지 경우에만 관리자 토큰을 사용한다. 

1) 사용자가 직접 Windows에 관리자 토큰을 사용하도록 일러주는 경우

2) 프로그램이 관리자 권한이 없으면 안된다는 것을 Windows가 스스로 인식할 수 있는 경우.

두가지중 어떤 경우든 UAC는 사용자에게 승인창(Consent Prompt)을 보여준다. 즉 "내가 생각하기에 당신이 관리자 토큰을 사용하고자 하는 것 같은데 확실한가?"라는 표현인것이다. 사용자가 확인을 하고 계속 진행하게 되면 Windows는 프로그램을 사용자 토큰 말고 관리자 토큰을 사용해서 시작한다. 이 두가지 외에는 일반 사용자 계정을 사용한다.

그럼, 구체적으로 어떻게 1), 2)처럼 할 수 있는지 알아볼 것이다. 사용자 입장에서는 1)에 관심이 있을 것이고, 개발자라면 2)이 관심이 있을 것이다. 이 내용은 다음 포스트에서 다룬다.

요즘 허리 통증이 심해서 더이상 글을 진행하기가 힘들다. 한의원을 계속 다니기 시작했고, 오늘은 인터넷에서 디스크 환자용 의자도 구입했다.

 

실제로 앉아보면 허리에 상당히 편함을 느낄 수 있다. 하중이 무릎으로 분산되면서 허리 부담이 줄어들기때문이다. 허리 아프신 분들한테는 강력 추천이다.