윈도우 SAM 레지스트리 – 사용자 관리 (NET USER)

윈도우 SAM 레지스트리 – 사용자 관리 (NET USER)

SAM 레지스트리에서 사용자 계정들은 어떻게 만들어지고, 관리되는 것일까?

윈도우에 계정을 생성하면

\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\%username%\이 생성되면서 아래에 생성한 유저이름으로 키가 추가된다. 이때 계정은 고유한 8자리값(RID)을 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\ 아래 가지게 되는데, 윈도우 설치기 기본적인 계정(빌드인 계정)은 10진수 500부터 시작하며, 생성한 계정들은 1000이상의 값을 가지게 된다.

[그림]8자리 값을 가지며, 2개의 빌드인 계정이 존재

1F4h를 10진수로 변환하면 500이라는 값이 되며, Administrator계정의 값이다.

이값은 유저별로 고유하며, 계속 증가하게 된다. 다음 유저 생성시 지정할 값을 미리 저장해 두는데, 해당 값은 \HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\F값 Offset: 48h에 위치한다.

[그림] 다음유저를 위해 생성해 놓은 값 03ED

그리고 전체 유저들의 정보는

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Groups\00000201\C에서 확인할 수 있다.

그리고 유저별로 2개의 특별한 값을 가지게 되는데 \HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\%RID%\ 아래 F와 V이다.

이값에는 유저 설정에 필요한 다양한 값이 들어 있다.

그럼 먼저 F키에 대해 확인해 보자.

\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\%RID%\F 에 위치하며 패스워드 설정관련 정보를 저장하며, 고정된 크기로, 50h값을 가진다.

윈도우 SAM 레지스트리 – 사용자 관리 (NET USER)

[그림]계정의 로그인 시간과 패스워드 변경등 계정 정보가 기록되는 F값

Offset 08h(8바이트): 마지막 로그인한 시간이 기록된다. 현재 Null로써 로그인한 적이 없음을 나타낸다.

Offset 18h(8바이트): 마지막으로 패스워드를 변경한 시간이 기록된다. Null인 경우 변경한 적이 없음을 나타낸다. 값은 NT 타임 기준으로 기록된다.

Offset 20h(8바이트): 계정이 만료일정을 지정하였을 경우 해당 시간이 기록된다.

Offset 28h(8바이트): 마지막으로 패스워드가 틀렸을 때 해당 시간이 기록된다.

Offset 30h(4바이트): 계정 RID가 기록된다.

Offset 34h(4바이트): 계정 생성 그룹의 ID가 기록된다. 00000201(권한 그룹이 아님)

Offset 38h(8비트): 계정 상태로, 1/3/4인 경우 정상 로그인이 가능하며, 그외의 값인 경우 계정에 문제점이 있는 상태로, 로그인 시도시 해당 메시지를 표시하게 된다.

Offset 38h(8비트): 계성 활성화 상태를 나타내며, 0인경우 활성화/ 1인경우 비활성화를 의미한다.

Offset 39h(8비트): 패스워드필요 유무를 나타내며, 0인경우 필요/4인경우 불필요를 의미한다.

Offset 39h(8비트): 패스워드 변경하지 않음에 대한 설정유무로, 0일경우 보안 정책에 따르며 2일경우 변경하지 않는다.

Offset 3Dh(2바이트): 국가코드가 기록된다.

Offset 40h(2바이트): 패스워드 실패시 실패 횟수가 기록된다.

Offset 42h(2바이트): 로그인 횟수를 기록한다.

이 정보들을 통해 차후 역분석에서도 계정관련 정보 분석시 사용된다.

F관련 값들이 기능에 관련된 값들이였다면, V값은 유저의 고유한 값들이 저장되게 된다.

\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\%RID%\V에 위치하며, 424이상의 크기를 가진다. 여기서는 조금 다른 방식으로 사용되는데, 먼저 각 필드 값 위치를 Offset CCh로부터 상대값으로 표시하고 이후 4바이트에 길이를 저장되어, 해당 Offset에 값이 실제 등록값이 있는 방식을 사용된다.


[그림]Username은 CC+D4=1A0에 위치하고 8바이트임을 나타냄

첫번째 12바이트는 세션 헤더값으로 예상되며,

이후 12바이트씩 하나의 속성을 의미한다. 그럼 주요 값의 Offset 위치는 아래와 같다.

Offset Ch: 유저이름

Offset 18h: 전체이름

Offset 2Ch: 설명

Offset 30h: 유저 설명

Offset 48h: 홈디렉토리

Offset 60h: 스크립트 경로

Offset 6Ch: 프로필 경로

Offset 9Ch: LM 패스워드 해쉬

Offset A8h: NT 패스워드 해쉬

Offset CCh이후부터 유저이름값 전까지: 권한 관련값이 저장된다.

그렇다면 그룹과 관련된 값들은 어디에 위치할까?

\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Aliases\%RID%\C 위치하며, 기본적으로 생성된 그룹은 220부터 시작된다.

[그림] 계정의 그룹에 대한 정보가 저장되는 C값

그룹값인 C 역시 V값과 비슷하다. Offset 34h를 기준으로 상대 값을 통해 이후 4바이트를 통해 크기를 표시하게 된다. 그럼 각 값들에 대해 알아보자.

Offset 0h: 그룹 RID

Offset 10h: 그룹 이름

Offset 1Ch: 그룹 설명

Offset 30h: 그룹에 포함된 유저 수

Offset 34h이후부터 그룹이름 전까지: 권한 관련값이 저장된다.

아직 권한값들에 대해서는 정확히 확인되지 않고, 추측성이 많아 여기서 해당 부분을 정의 하지 않았으니, 이해 바란다.

위에 값들은 직접 수정도 가능하며, Net user 명령을 이용해 유저 생성에서부터 삭제등을 편리하게 진행할 수 있다.

[그림] Net user는 계정 생성과 관리에 많은 기능을 제공한다.

Net user /help를 통해 이용할 수 있는 다양한 옵션들을 확인할 수 있다.

그럼 유용한 몇가지 예제를 통해 Net user를 사용해보자.

//사용자 추가

net user %username% /add

//사용자 패스워드 변경

net user %username% %password%

//전체이름 설정

net user %username% /fullname:%fullname%

//설명 설정

net user %username% /comment:%description%

//계정 활성화, 비활성화

net user %username% /active:yes|no

//패스워드 만료 기간 설정

net user %username% /expires:31/12/2004

//사용자 그룹 추가

net %groupname% %username% /add

//패스워드 변경 최대기간

net accounts /maxpwage:%day%

[내용] 계정과 관련된 net 명령어 예제

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.