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는 어디 있는것일까?
이 값을 우리가 확인할 수 있는 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 확인 도구를 이용하여 변환한 값이 맞는지 확인해보자.
실 업무에서도 간혹 시스템간의 SID 중복을 방지하기 위해 SID 변경이 필요한 경우가 종종 발생한다. 이때 Sysinternals사의 NewSid(2003 이후 정상 동작을 보증하지 않아 더 이상 제공하지 않는다)와, 비스타부터 기본으로 포함하는 Sysprep를 이용하면 편리하게 SID를 변경할 수 있다.
운영체제에서 기본적으로 제공하는 Sysprep의 경우 C:\Windows\System32\sysprep에 Sysprep.exe를 실행하면 된다.
이를 통해 현재 머신의 SID를 변경할 수 있으며, 아래와 같은 CLI 명령을 이용해서도 작업을 진행할 수 있다.
// OOBE 방식으로 일반화하고, SID 변경 완료시 재부팅
sysprep /oobe /generalize /reboot
Newsid는 2003 이후에는 위 시스템 준비 도구를 사용하기를 권장하지만, Newsid를 사용해도 문제는 발생하지 않는다(현재 정식 사이트에서 더 이상 제공되지 않으므로, 필자 역시 사용을 권장하지는 않는다).
'Security' 카테고리의 다른 글
러시아 - 우크라이나 사이버 DDoS 공격 IP 공개 (0) | 2022.03.18 |
---|---|
우크라이나 정부 기관 DDoS 공격 - Isaac(Hermetic)Wiper, HermeticWizard 이해 (0) | 2022.03.15 |
윈도우 - 캐시 로그인과 생체 인증 (0) | 2022.03.14 |
Tor를 이용하여 간단하게 IP 숨기기 방법 with Python (0) | 2022.03.13 |
AWS 공격 시뮬레이션 도구 - stratus (0) | 2022.03.04 |