ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 윈도우 포렌식 실전 (3) - 사용자 환경 분석 (컴퓨터의 주된 사용자에 관한 분석)
    포렌식 통합/윈도우 디지털 포렌식 완벽 활용서 2024. 8. 26. 19:36

    이전까지 찾아본 흔적들은 디스크의 위치, 컴퓨터 이름, 운영체제 설치날짜, 버전등과 같은 정보들로
    주로 운영체제 설치 이후의 주된 사용자 (용의자)의 흔적과는 어느정도 거리가 있는 단서들이였다.

    이번에 책에 나온 내용은 주로 컴퓨터에 접근한 사용자(용의자)와 비교적 가까운 단서들이 나온다.

    0. 들어가기 앞서 (RID를 통한 사용자 분석)

    더보기

    SAM 파일의 경로는 Windows\System32\config 에 위치한다.

    SAM 파일을 Export해서 Registry Viewer로 확인해보자.

    일단 이미지 실습을 통해서 알아내고 싶은 사용자의 이름은 gdHong 이다.
    이에 대한 RID (비교식별값) 을 알아내기위해서는

    SAM 파일 내의 SAM\Domains\Account\Users\Names\gdHong 에 존재하는 값으로 0x03E9
    그리고 SAM\Domains\Account\Users\000003E9 과 매치하여 어느 사용자가 어느 RID를 갖는지 확인하면서 분석해보면 된다.

    해당 RID에서 레지스트리 값을 분석하여 사용자에 대한 정보를 얻어내볼 것이다.

    이곳에서 F와 V는
    Fixed format
    Variable format 으로
    각각 고정적 형식과 유동적 형식을 의미하는 값을 가진다.

    그리고 SID 값과 함께 비교하게 되므로 gdHong의 SID에 대한 값 또한 알아야한다.

    여기서 SID와 RID에 대해 정리해야하는데,
    쉽게 설명하자면 SID의 일부분에 RID가 존재한다.
    SID의 값은 S-1-5-21-3623811015-3361044348-30300820-1013 같은 값을 가지는데
    이중 마지막의 1013의 값은 RID이다.

    SID는 Security Identifier로 보안 식별자라는 뜻으로
    사용자의 권한과 접근 제어를 관리하는데 사용한다.
    주로 윈도우 속성-보안 부분에 그룹 보안 정책과 같은 곳에서 사용한다고 대략적으로 이해하면 될듯하다.

    RID는 Relative Identifier로 관계 식별자라는 뜻으로
    사용자, 그룹, 컴퓨터 등의 객체 자체를 식별하는데 사용하는 ID 값이라고 이해한다.

    RID 값과 SID 값은 10진수로도 표현되기도 하고 16진수로도 표현하기도 하는듯하다.
    이건 실제로 Autopsy로 나온 SID 끝의 4자리 값과 gdHong의 레지스트리 RID 값의 비교를 통해 실제로 일치하는지 확인해보려고한다.

    Autopsy에서 잡힌 OS Accounts로 gdHong 사용자는 S-1-5-21-1847192496-4038514253-58240641-1001 으로 값이 존재한다.
    앞에 설명한대로 뒷부분의 1001 부분이 RID 이므로 이에 대한 값을 16진수로 변환해주면

    0x3E9 로 Registry Viewer의 Users 의 사용자 RID와 일치함을 알 수 있다.
    정리하자면 SID는 10진수로 이루어진 식별값이고,
    RID는 16진수로 이루어진 식별값으로 간단하게 정리할 수 있다.

     

    1. 마지막 로그온 시각 (Fixed format)

    더보기

    마지막 로그온 시각은 F 값에서 확인할 수 있다.
    F 값은 0x50 바이트만큼의 값이 있고,
    그중 8번째~15번째까지 8바이트의 값이 마지막 로그온 시각 값을 타임스탬프 형식으로 갖고있다.

    이 값을 Dcode로 한번 바꿔보려고한다.
    리틀엔디안 기준으로 5D5C0B35C5A9D601 값을 Dcode에 넣어보면

    Windows Filetime 기준으로 2020-10-24 05:19:11 시각에 마지막으로 로그온을 했다.
    이 값은 로그온을 기준으로하므로 컴퓨터를 잠금상태로 전환한 후에 다시 로그온을 하면 갱신이 된다.

    현재 2024-08-26 16:51 쯤 잠금을 했다가 다시 풀었다
    내 노트북을 기준으로 직접 값이 갱신되는지 확인해보기 위해 레지스트리 값을 확인해보자.

    Dcode로 바꿔줘보면?

    UTC 기준으로 2024-08-26 07:50:56 이므로 한국시간으로 바꿔주면
    2024-08-26 16:50:56 이므로

    2024-08-26 16:51 의 시각과 몇초 차이가 안나는 범위내에서 갱신되었음을 알 수 있다.

    2. 마지막 패스워드 변경 시각 (Fixed format)

    더보기

    이번에는 마지막 패스워드 변경 시각이다.
    앞에 마지막 로그온 시각에서 하듯이 빠르게 해보려고한다.

     

    현재시각 2024-08-26 16:58 에 내 R이라는 사용자의 비밀번호를 설정했다.

    이에 대한 변경이 이루어졌을 때 레지스트리 값이 갱신이 이루어졌는지 확인해보자.

    원래 내 노트북의 R 사용자에 대한 비밀번호가 없어서 레지스트리 값으로 UserPasswordHint가 없었는데,
    아까 비밀번호 설정하면서 힌트도 같이 설정하게되어서 레지스트리 값으로 같이 생겼다.
    실시간으로 갱신이 잘 된듯하고 이제 비밀번호 변경 시각을 한 번 확인해보자.

    2024-08-26 07:58:25 으로 한국시각 기준으로 바꿔주면
    2024-08-26 16:58:25 으로 몇초 내로 일치하게 갱신되었음을 알 수 있었다.

    이제 그럼 다시 또 책에서 내준 디스크 이미지 내에서의 내용 분석을 해보자

    0xCCF10C10528AD601 값을 디코딩해주면

    2020-09-14 04:46:51 (KST 기준) 로 책에 나와있는대로 잘 보인다.

    3. 마지막 실패 로그온 시각 (Fixed format)

    더보기

    현재 시각 2024-08-26 17:22 쯤 로그아웃을하고 로그온을 일부러 틀려보겠다.

    내 노트북 기준으로 해당 위치의 값을 디코딩하면 비슷한 시각이 잡힐 것이다.

    2024-08-26 17:23:14로 몇초 이내의 시각에 로그온 실패한 시각이 갱신됨을 알 수 있다.

    이번에도 문제에서 제시한 이미지 파일을 통해서 확인해보면...

    0x53FA2358CEA6D601 값을 디코딩해보면

    해당 시각 2020-10-20 18:47:02 로 책에서 나온 값 그대로 나와주었다...

    4. 로그온 횟수 (Fixed format)

    더보기

    로그온 횟수는 뒤쪽에 멀리 잡혀있다.

    0x42~43으로 2바이트의 값으로 잡혀있다.

    횟수는 0x45로 10진수로 변환하면 69회로 책에 나온대로이다.

    그러면 내 노트북 기준으로 로그온 횟수를 먼저 확인하고 다시 로그아웃 후 다시 로그온하여서 값이 1만큼 증가했는지 확인해보자.

    현재 0x1AF 의 횟수만큼 로그온을 했다고한다.

    이제 로그아웃 후 다시 로그온하면 0x1B0으로 값이 바뀔 것이다.

    값이 0x1B0 으로 잘 바뀌었다.

    5. 사용자 이름 (Variable format) (Variable format)

    더보기

    Variable format 값에는 SID 가 존재한다.

    디스크 이미지 SAM의 내용을 통해 다시 확인해보면

    0x120~13B 까지 총 28 바이트의 값이 이에 해당한다.

    일단 SID의 값을 먼저 표기해놓고 비교해보자면
    SID 값은 S-1-5-21-1847192496-4038514253-58240641-1001 인데
    이에 대한 값이 16진수로 이루어져있다. 천천히 나눠보자.

    가장 먼저 식별하기 편한 부분은 가장 뒤에 있는 0xE9 03 00 00 이다.
    이 값을 리틀엔디안에서 빅엔디안으로 변환하고 10진수로 바꿔주면

    0x3E9 -> 1001 이므로 앞에서 확인한 RID 값과 일치하게 나옴을 알 수 있다.

    이를 통해서 유추해보자면 SID의 S-1-5-21-1847192496-4038514253-58240641-1001  부분에서
    각 - 로 나누어진 값들로 나누어지고, 그 나누어진 값들은 16진수 (리틀엔디안) 기준으로 하이라이트된 부분에 위치해있다고 추론할 수 있다.

    나눠보면

    S
    1
    5
    21
    1847192496
    4038514253
    58240641
    1001 

    이렇게 일 것이다.

    이를 각각 16진수로 바꿔보자.

    S = SID를 의미
    1 = 0x1
    5 = 0x5
    21 = 0x15
    1847192496 = 0x6E19EBB0
    4038514253 = 0xF0B6D64D

    58240641 = 0x378AE81
    1001 = 0x3E9

    이렇게 정리하고 다시 레지스트리 값을 확인해보자.

    바이너리 형태 (16진수)로 이루어진 SID 값에 대해 알아봤다.
    중간에 5가 하나 더 끼어서 뭔가 싶었는데 뒤에 있는 Subauthority 에 대한 Count가 있었다.

    Subauthority는 하위권한을 뜻하는 단어.

    결국 정리해보면 S-1-5-21-1847192496-4038514253-58240641-1001 에서 앞의 S는 표기하지않고
    나머지 값들 중

    0x01 = Revision Level : SID의 버전
    0x05 = Subauthority Count : Subauthority 에 대한 카운트
    0x00 00 00 00 00 05 = Identifier Authority : SID의 권한을 나타내는 값으로 0~F 의 값을 가지면 각 값마다 권한의 정도가 부여된다.
    0x15 00 00 00
    0xB0 EB 19 6E 
    0x4D D6 B6 F0 
    0x81 AE 78 03 
    0xE9 03 00 00 = Subauthority 4 : RID 값

    중간의 4개의 Subauthority 에 대해서 어떤 의미를 갖는지 궁금해서 Microsoft 페이지를 통해서 확인해보았다.

    https://learn.microsoft.com/ko-kr/windows-server/identity/ad-ds/manage/understand-security-identifiers

     

    보안 식별자

    이 문서에서는 Windows Server 계정 및 그룹 및 고유 식별자에 대한 SID(보안 식별자)에 대해 설명합니다.

    learn.microsoft.com

    음... 책에서는 자세히 확인된 바가 없다고하는데...

    꽤나 경우를 나눠놓은게 많다.

    어느정도 정리하자면 중간의 Subauthority 값은 n개 있을 수 있지만, 마지막의 Subauthority 는 RID를 의미한다는 것이다.
    그리고 앞에 있는 n-1개의 Subauthority는 각각 DC(Domain Controller)에 발급해준 고유의 값이다.

    그리고 이에 대한 Subauthority는 Y로 치환되어서 설명이 되어있는데,

    이 중에 Y의 값은 Y1,Y2...Yn-1,Yn으로 늘어나게되는 것을 볼 수 있다.

    현재 공부하다가 유일하게 어떤 의미를 갖는 모르는 값은 저 Y값 Subauthority 밖에 없는데 이에 대한 설명표를 한번 봐보고 대조해서 찾는게 빠르다.

    더 자세히 공부하고 싶은데 진짜 너무 많고 뭐라하는지 잘 모르겠다... 읽어보고 궁금한거 있으면 대표님이나 멘토님께 여쭤봐야겠다.

    그나마 추가적으로 알아낸건 DC(Domain Controller)에서 디스크의 GPT 부분에 존재하는 GUID에 매칭되게 디스크의 도메인을 고유한 존재로 인식한다는 것이다.

    6. 계정에 대한 설명 (Variable format)

    더보기

    Variable format에서 또 확인할 수 있는 흔적은 계정에 대한 설명으로

    여러개를 들어볼 수 있는데, 책에서 그나마 알려준 것은 사용자 이름이다.

    0x1C0 부터 가변적인 영역을 이름이 차지하게된다.

    여기서 조금 연계해서 흔적들을 사용해보자면,

    Variable format의 내용을 토대로 사용자의 이름 - SID 의 매칭을 통해

    $Recycle.bin과 SID 와 사용자의 이름을 각각 일치성을 확인하여
    어느 사용자가 어떤 파일을 삭제하였는지 행동을 알아낼 수 있다.

    7. 추가적 혐의 입증

    더보기

    앞의 내용은 사용자의 이름을 토대로 어느 사용자가 어떠한 행위를 했었는지 SAM 파일내 에서 알아낼 수 있었다.

    하지만 컴퓨터는 많은 사람들이 사용하며, 사용자의 이름만으로는 실제 사용자가 많은 사람들 중 누구인지 특정을 지을 수가 없다.

    그러므로 이에 대한 추가적인 혐의를 입증하여 수사범위를 줄여야하며, 이에 대한 방법은

    이메일 파일 및 주소 분석
    메신저 계정 분석
    OneDrive 계정
    윈도우 이벤트 로그 등

    다양한 방법을 모색해야한다.

    근데...Evidence Center X 써야하는데....

    Demo 안주는데?

    Belkasoft에 메일 넣어도 안주는데?

    이거 어카지?....

Designed by Tistory.