IT 그리고 정보보안/환경설정 및 기타

윈도우 계정 SID(Security Identifier)

plummmm 2021. 4. 13. 06:59
반응형

SID는 보안 주체 또는 보안 그룹을 고유하게 식별하는 데 사용됨

 

보안 주체는 사용자 계정, 컴퓨터 계정 또는 사용자 또는 컴퓨터 계정의 보안 컨텍스트에서 실행되는 스레드 또는 프로세스와 같이 운영 체제에서 인증할 수 있는 모든 엔터티를 나타낸다.

 

S-R-I-A[-A]

뒤에 -A가 계속 추가되는 구조

 

S: 고정된 값

S = Identifies a SID

 

R: 보정 값

1 = 현재는 1이 사용된다. MS 마음대로 바뀔수 있음.

 

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 builtin

 

 

e.g.) S-1-1-0 = null(Everyone을 의미함)

        S-1-5-21-1017080262-1132274894-948791989-500 = Administrator 계정을 의미함.

        S-1-5-32-545 = 로컬 유저 그룹을 의미함.

 

 

SID의 포맷은 위와 같다.

그럼 간단한 예제를 통해 SID와 regedit 에서 계정정보를 확인하는 방법에 대해 알아보자.

 

일단.. HKLM\SAM\SAM\Domains\Account로 가면 V 값이 있을 것이다. 이 값의 마지막 12바이트가 SID이다.

 

99 44 06 78   4A 0F A2 3F   7A 32 FA 55 를 빅엔디안 방식으로 바꾼다.

78064499   3FA20F4A   55FA327A 이걸 이제 10진수로 변환한다.

2013676697  1067585354  1442460282

SID는 S-1-5-21-2013676697-1067585354-1442460282 일거라고 추측하며 변환을 했다.

PsGetsid 라는 Sysinternals의 툴을 이용해서 SID 확인이 가능하다.

SID를 변환해야 되는 경우가 생긴다면 NewSid, Sysprep 툴을 이용하면 된다.

 

우리가 쓰는 사용자 계정들은 어떻게 생성되고, 어떻게 관리되는지 SAM 레지스트리를 보면서 확인해보자.

위 그림 경로에 계정명으로 저장된 곳에 키가 추가된다.

이때 계정은 8자리의 고유값을 갖게 된다. 이것을 RID (Relative identifier)라고 한다.

윈도우 기본 계정은 500부터 시작하고, 차후 생성한 계정은 1000부터 시작한다.

 

위 그림에서 선택된 계정은 0x1f4 이다.

10진수로 변환하면 500 이라는 값이 나온다. 기본 계정이라는 걸 알 수 있다..

500은 대다수가 Administrator 계정이다.

 

그리고 윈도우는 다음에 생성될 계정의 RID값을 미리 지정해둔다.

Account의 F값의 0x0048 오프셋에 저장되어 있다.

 

또한 전체 계정정보는 HKLM\SAM\SAM\Domains\Account\Groups\00000201\C에서 확인할 수 있다.

 

다음... 각 계정에 대한 정보를 이제 알아봐야할 것임

얘내는 2가지의 특별한 값으로 관리됨. F값과 V값...

먼저 F값 부터 알아보자.

 

위에 0x0000 부터 0x0050 까지 오프셋이 보임?? F값 얘는 항상 크기가 0x0050으로 고정임.

F값 구성 내용

위 정보를 토대로 계정에 대한 기본적인 분석이 가능하겠지요.

F는 기능적인 부분들이 저장되어 있었다면 V값에는 도대체 어떤 것들이 들어 있을까.

계정의 고유한 값들이 들어있다.

 

아래 표에 정리해주는 값을 0x00CC에 더하면 그 값이 있는 위치이고, 그다음 4바이트는 크기를 알려주는 것이다. 

예를 들어 하나 해보자.

0x000C 에 가서 유저 이름이 있는 값을 확인하러 가보자.

처음에 0x00BC 값이 있다. 이거랑 0x00CC 를 더한다.

0x00BC + 0x00CC = 0x0188

0x0188 에 일단 유저 이름이 있을 거야.. 그게 일단 유저 이름값이 있는 위치다.

그리고 0x000C에서 부터 4바이트를 점프한다. 0x000E 값이 있지?

E가 10진수로 14이니까.. 크기가 14바이트임을 나타낸다.

 

 

참고

리버싱 윈도우 - 로드북

http://support.microsoft.com/kb/163846/ko

반응형