본문 바로가기
Security

윈도우 - SAM Database 란, SID 해석

by 올엠 2022. 3. 14.
반응형

SAM Database는 로컬의 사용자 및 그룹을 저장하고 있으며 해당 패스워드와 계정과 관련된 속성들이 저장되는 데이터베이스이다.

이 데이터베이스는 레지스트리인 HKEY_LOCAL_MACHINE\SAM에 위치하며, 실제 파일은 %Systemroot%\System32\config\SAM 파일을 레지스트리로 하이브(연결)하게 된다.

SAM 파일은 계정 보안과 관련해 중요하므로 자세히 알아보도록 하자.

단지 이 부분은 도메인 로그인이 아닌 로컬 로그인 시 사용되는 부분이라는 점을 먼저 애기하도록 하겠다. 즉 이 파일에서 도메인 계정에 대해서는 확인할 수 없다(도메인 환경에서는 도메인 컨트롤러라는 별도의 서버에서 Ntds.dit라는 별도 데이터베이스를 이용하여 계정을 관리한다).

윈도우에서 관리하는 계정을 비롯한 공유 개체 정보들는 SID(Security ID)로 권한을 구분하여 관리된다. SID에는 권한 식별 정보가 들어가며 권한 개체로 운영체제 전역에 걸쳐서 사용된다.

그럼 각 SID의 구성 값들을 확인해 보자.

SID는 크게 4개의 값으로 구분할 수 있으며, 하위 권한 식별 필요시 –A가 추가되는 구조이다.

S-R-I-A[-A]
S: 고정된 값
S = Identifies a SID.
R: 보정값
1 = 현재는 1이 사용된다. 이유는 없으며, Microsoft의 사정에 따라 변경될 수 있다.
I: 권한 식별
 	0 = Null, 1 = World (Everyone), 2 = Local, 3 = Creator, 4 = Non-unique ID, 
5 = NT authority
A: 하위 권한 식별
0 = Null, 1 = Dialup, 2 = Network, 3 = Batch, 4 = Interactive, 5 = Logon, 6 = Service, 
7 = Anonymous logon, 8 = Proxy, 21 = NT Non-builtin IDs, 32 = NT built-in

예
S-1-1-0 = Null (Everyone을 의미함)
S-1-5-21-1017080363-1132274894-948791989-500 = Administrator 계정을 의미함
S-1-5-32-545 = 로컬 유저 그룹을 의미함

 

머신 SID란

윈도우 서버를 공부한 사람이라면 Active directory라는 도메인 환경에 대해 알고 있을것이다.

Active directory라는 도메인 환경에서는 커버로스라는 인증 프로토콜를 통해서 서로 연결된 머신을 인증하고 구분하여야 하는데, 이때 사용되는 값은 각 머신의 운영체제 설치시 고유하게 생성되는 SID로써, 동일한 Hostname을 사용하더라도 시스템 적으로 구분할 수 있게 된다. 이렇게 머신 고유의 SID를 이용하여 서로 다른 존재임을 구분하며, 권한을 할당하기 때문에, 도메인 가입시 윈도우 설치본을 단순 복제할 경우, 머신의 SID가 동일하여 도메인 환경에서 문제가 발생하게 된다.

그럼 이 머신의 SID는 어디 있는것일까?

레지스트리로 확인한 머신의 SID

이 값을 우리가 확인할 수 있는 10진수로 변환해보도록 하자.

15 25 AF 47 67 FD 7C 30 8A A7 32 3F
↓
1) 4바이트씩 3개로 나눔 
1525AF47, 67FD7C30, 8AA7323F
↓
2) 각 나눈값을 역으로 배열한다(리틀인디안 방식의 배열을 빅인디안 방식으로 바꿈)
47AF2515 , 307CFD67 , 3F32A78A
↓
3) 각 값을 10진수로 변환
 1202660629, 813497703, 1060284298
↓
머신의 SID는 S-1-5-21-1202660629-813497703-1060284298 임을 알수 있다.

PsGetSid - Windows Sysinternals | Microsoft Docs

이 값과 Sysinternals사에서 머신 SID 확인 도구를 이용하여 변환한 값이 맞는지 확인해보자.

Psgetsid 을 통해 확인한 머신의 SID

실 업무에서도 간혹 시스템간의 SID 중복을 방지하기 위해 SID 변경이 필요한 경우가 종종 발생한다. 이때 Sysinternals사의 NewSid(2003 이후 정상 동작을 보증하지 않아 더 이상 제공하지 않는다), 비스타부터 기본으로 포함하는 Sysprep를 이용하면 편리하게 SID를 변경할 수 있다.

운영체제에서 기본적으로 제공하는 Sysprep의 경우 C:\Windows\System32\sysprepSysprep.exe를 실행하면 된다.

시스템 준비 도구(Sysprep)를 통한 SID 변경

이를 통해 현재 머신의 SID를 변경할 수 있으며, 아래와 같은 CLI 명령을 이용해서도 작업을 진행할 수 있다.

// OOBE 방식으로 일반화하고, SID 변경 완료시 재부팅
sysprep /oobe /generalize /reboot

Newsid는 2003 이후에는 위 시스템 준비 도구를 사용하기를 권장하지만, Newsid를 사용해도 문제는 발생하지 않는다(현재 정식 사이트에서 더 이상 제공되지 않으므로, 필자 역시 사용을 권장하지는 않는다).

Newsid 를 이용하여 머신의 SID를 변경

반응형