본문 바로가기
윈도우 포렌식

[포렌식] 쉘백 분석(Shellbag analysis)

by kimnampill 2022. 10. 11.
728x90
반응형

Shellbags (Windows10)

Shellbag이란?

1-1. 정의

Shellbags란 User Registry Hive 파일 (ntuser.dat/usrclass.dat) 의 ShellBag의 하위키이며 사용자가 로컬, 네트워크 및 이동식 저장장치에서 접근한 폴더 정보가 기록되며 최초로 폴더를 열람시에 생성이 된다. 또한 폴더의 생성, 복사, 압축 프로그램에 의해서 실행되었을 경우에도 생성된다.

 

NTUSER.DAT는 데스크톱, Windows 네트워크 폴더, 원격 컴퓨터 및 원격 폴더에 대한 ShellBags 정보를 저장한다.

 

UsrClass.dat는 데스크톱, ZIP파일, 원격 폴더, 로컬 폴더, Windows 특수 폴더 및 가상 폴더에 대한 ShellBags 정보를 저장한다.

1-2. 포렌식적 의미

​ 가. 사용자가 특정 폴더에 접근한 시간 정보 확인

​ 나. 존재하는 폴더의 삭제/덮어쓰기에 대한 증거 추적

​ 다. Explorer를 통한 폴더 접근에 대한 MAC 타임 추적

1-3. Shellbag & 부가정보

​ 가. 쉘백 정보는 Bags와 BagMRU 두 가지 주요 레지스트리 키로 구성되어 있다.

​ 나. BagMRU 키는 유사한 트리 구조를 생성하여 폴더 이름과 레코드 폴더 경로를 저장한다.

​ 다. Bags 키는 창 크기, 위치 및 보기 모드와 같은 보기 기본 설정을 저장한다.

레지스트리 주요경로 (Windows10)

번호레지스트리 경로

1 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags
2 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU
3 HKEY_CURRENT_USER\Microsoft\Windows\Shell\Bags
4 HKEY_CURRENT_USER\Microsoft\Windows\Shell\BagMRU

1. HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

2. HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU

3. HKEY_CURRENT_USER\Microsoft\Windows\Shell\Bags

4. HKEY_CURRENT_USER\Microsoft\Windows\Shell\BagMRU

Windows10 Shellbag 분석

1-1. HKEY_CURRENT_USER\Microsoft\Windows\Shell\BagMRU

위의 구조의 BagMRU는 하위키로 의미있는 값도 가지고 있지 않다. 특히, 해당 컴퓨터를 계속해서 사용해도 위의 경로의 레지스트리 값은 더 이상 변경되지 않는다.

 

BagMRU의 키들은 MRUListEx, NodeSlot, NodeSlots의 키를 가지고 있다. 각각의 의미는 아래와 같다.

  1. MRUListEx : 최근에 열었었던 파일들을 나열 하는 레지스트리 키로 앞에부터 순서대로 가장 마지막에 열었던 폴더를 의미한다. 해당 키에 들어있는 값은 NodeSlot의 값을 가지게 된다.
  2. NodeSlot : Bags의 하위키의 이름을 가지고 있다.
  3. NodeSlots : 2의 고정값을 가진다.

하지만 이 경로에 MRUListEx는 ff ff ff ff인데 그 이유는 이 경로의 MRUListEx는 그저 하위키이며, 해당 경로에는 데이터가 작성되지 않기 때문이다.

1-2. HKEY_CURRENT_USER\Microsoft\Windows\Shell\Bags\1\Desktop

Bags 레지스트리 키는 창의 크기, 위치 및 보기 모드 같은 기본 설정을 저장하고 있기 때문에 Desktop 폴더에 사용한 설정 정보를 가지고 있다.

2-1. HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU

앞에서 본 BagMRU와 달리 하위키들이 존재한다. BagMRU의 구조는 아래와 같다.

나는 대충 이런 구조로 이해했는데 틀렸다면 댓글을 달아주시길....(제발 진짜 아무나...)

 

BagMRU는 Desktop(바탕화면)을 의미하며 그 외의 키는 상위키에서 각 키를 더블클릭 해보면 어떤 폴더인지 알 수 있다.

새로운 폴더를 만들어 키값을 확인했다. 가장 최근에 생긴 폴더이므로 가장 높은 숫자 번호를 가지고 있을것이고 6번이 가장 높은 키값이라서 열자 c0wb3ll폴더라는 것을 알 수 있었다.

 

또한 앞서 말했듯이 MRUListEx 또한 06이 가장 맨 앞으로 온 것 또한 확인할 수 있었다.

 

그리고 ComDlg 또는 ComDlgLegacy라는 키가 존재할 때가 있는데 ComDlg는 Dialog Box를 열었을 때 생성되며 ComDlgLegacy 는 Legacy Dialog Box를 열었을 때 생성된다.

이제 Bags를 살펴볼건데 찾을 폴더의 NodeSlot을 본 뒤 NodeSlot의 넘버를 가지고 Bags 폴더로 이동하면 된다. 내가 찾아볼 c0wb3ll 폴더의 NodeSlot은 0x59(89) 이므로 89번을 찾아가면 될 것 같다.

2-2. HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

c0wb3ll 폴더의 설정 파일이다. SniffedFolderType은 폴더의 타입을 나타낸다. Shell 파일 하위에 {5C4F...}의 GUID값이 나와있을텐데 이 값은 KnownFolderDerivedFolderType 값으로 이 값이 폴더의 타입을 나타낸다. 즉 {5C4F...}가 폴더의 타입이 Generic이라고 알려주는 것이다.

 

Generic Type의 폴더를 제외한 키 값은 https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid 이 사이트에서 참조하면 될 것 같다.

2-2-1. HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\GUID || HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags\1\Desktop

각각의 값들을 알아내기 위해 직접 실험과 각각의 블로그를 참조한 결과이다.

  1. ColInfo
      • 모든 값들에 대해 알아내진 못했지만 간단하게 설명하자면 우리가 윈도우 탐색기에서 보는 세부정보의 목록에 대한 값인 것 같다.

      • ColInfo를 눌러보면 다음과 같은 헥스 값이 나올텐데 FD DF DF FD 10 00 00 00 00 00 00 00 00 00 00 00 까지는 같은 숫자를 가지는 것 같다.
        지금 세부정보의 목록은 이름, 수정한 날짜, 유형, 크기, 만든 날짜로 5개이기 때문에 값이 05 00 00 00 이며다음과 같이 6개로 바꾸었을 때는 아래와 같이 06 00 00 00 이 되는 것을 볼 수 있었다.그 뒤 값이 1 증가할 때 마다 24byte 만큼의 데이터가 추가 되었는데 이 값들이 무엇을 의미하는 지는 모르겠다.
    • 다른 부분은 05 00 00 00 부터인데 이 05의 값이 세부정보의 목록 수의 대한 값이다.
    • 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FD DF DF FD 10 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 18 00 00 00 30 F1 25 B7 EF 47 1A 10 A5 F1 02 60 8C 9E EB AC 0A 00 00 00 E9 00 00 00 30 F1 25 B7 EF 47 1A 10 A5 F1 02 60 8C 9E EB AC 0E 00 00 00 7E 00 00 00 30 F1 25 B7 EF 47 1A 10 A5 F1 02 60 8C 9E EB AC 04 00 00 00 50 00 00 00 30 F1 25 B7 EF 47 1A 10 A5 F1 02 60 8C 9E EB AC 0C 00 00 00 50 00 00 00 53 7D EF 0C 64 FA D1 11 A2 03 00 00 F8 1F ED EE 04 00 00 00 A0 00 00 00
  2. FFlags
    • 이건 아이콘 자동 정렬과 관련된 값인것 같다. \Desktop 과 \GUID의 값은 달랐으며 \Desktop의 값들에 대한 정보는 찾을 수 있었다.
      • 키 : HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ Shell \ Bags \ 1 \ Desktop
        값 : FFlags
        유형 : REG_DWORD
        데이터 :
      • 1075839520 (아이콘 자동 정렬 = OFF 및 그리드에 아이콘 정렬 = OFF)
        1075839521 (아이콘 자동 정렬 = ON 및 아이콘을 그리드에 정렬 = OFF)
        1075839524 (아이콘 자동 정렬 = OFF 및 아이콘을 그리드에 정렬 = ON)
        1075839525 (자동 정렬 아이콘 = ON 및 그리드에 아이콘 정렬 = ON)
  3. GroupByDirection
    • 이 값은 뷴류 방법이 켜져 있을 때의 오름차순 내림차순에 대한 값이었다. 분류방법이 꺼져있었을 때에는 1의 값을 가지고 있었다.
      • 1 : 오름차순
      • ffffffff : 내림차순
  4. GroupByKey:FMTID
      • 다음과 같이 분류방법에 대해 바꿀 때만 값이 바뀌었다.
      • 정확하진 않지만 분류방법이 있을때는 아래와 같은 값을 가졌었다.
      • 또한 분류방법이 없을 때는 아래와 같이 0000..의 값을 가졌었다.
  5. GroupByKey:PID
    • 위에 분류 방법에 대한 PID이며 각 방법에 따른 PID 값은 다음과 같다.CategoryGroupByKey:PID Value
      이름 10
      수정한 날짜 14
      유형 4
      크기 12
      만든 날짜 15
      태그 5
  6. GroupView
      • 이 값 또한 분류 방법을 고를 때마다 0xffffffff(4294967295) 의 값이 지정됐다.
      • 지정 하지 않으면 아래와 같이 0000....의 값으로 바뀌었다.
  7. IconSize
    • 아이콘 사이즈는 이름 그대로 아이콘 사이즈에 대한 값이었다. 아이콘 값은 밑에 LogicalViewMode, Mode를 모두 살펴보고 정리하도록 하겠다.
  8. LogicalViewMode
    • LogicalViewMode는 보기 방법에 따른 값이다.
    • 대략 미리 값들만 살펴보자.2 - 타일4 - 간단히
    • 5 - 내용
    • 3 - 아이콘
    • 1 - 자세히
  9. Mode
    • Mode값 또한 보기 방법에 따른 값이다. LogicalViewMode와 뭐가 다른지는 모르겠다.;;
    • 대략 값들을 살펴보자3 - 간단히6 - 타일
    • 8 - 내용
    • 4 - 자세히
    • 1 - 아이콘 보기
    • 여태 나온 IconSize, LogicalViewMode, Mode 의 값들을 정리하면 아래 표와 같다.보기IconSize(in pixels)LogicalViewModeMode
      아주 큰 아이콘 256 3 1
      큰 아이콘 96 3 1
      보통 아이콘 48 3 1
      작은 아이콘 16 3 1
      간단히 16 4 3
      자세히 16 1 4
      타일 48 2 6
      내용 32 5 8
  10. rev
    • 이 값은 뭔지 모르겠다... 아무리 건들여봐도 0에서 값이 변하질 않는다.
  11. Sort
      • 정렬 기준과 관련된 값이다.
      • 오름차순 정렬을 하면 마지막 4byte가 01 00 00 00의 값을 가진다.
      • 내림차순 정렬을 하면 마지막 4byte가 FF FF FF FF의 값을 가진다.
    • 그 위에 24byte는 정렬 기준 타입(이름, 크기, 등등)과 관련된 헥스값인 것 같다. (정확하게 파악하지 못했다.)
  12. Vid
    • 보기 메뉴와 관련된 값이다. 값에 따른 옵션은 다음 표와 같다.보기Vid
      매우 큰 ~ 보통 아이콘 {0057D0E0-3573-11CF-AE69-08002B2E1262}
      작은 아이콘 {089000C0-3573-11CF-AE69-08002B2E1262}
      간단히 {0E1FA5E0-3573-11CF-AE69-08002B2E1262}
      자세히 {137E7700-3573-11CF-AE69-08002B2E1262}
      타일 {65F125E5-7BE1-4810-BA9D-D271C8432CE3}
      내용 {30C2C434-0889-4C8D-985D-A9F71830B0A9}

Windows10 ShellbagMRU Structure

위 사진에 있는 Hex 값 Structure에 대해 분석을 할 예정이다.

 

우선 이 값들은 Block 구조 안에 Extension Block 구조를 가지고 있는 형식이라고 한다.

c0wb3ll폴더의 경우 위에 22byte가 Block 구조이며 그 밑에 66byte가 Extension Block 구조이다. 우선 Block 구조 부터 살펴 보도록 하자.

1. Windows10 ShellbagMRU Structure - Block Struture

Address RangeSizeFiled NameDescription

0x00 ~ 0x01 2byte Block Size Block Size
0x02 ~ 0x03 2byte Type Type(0x31:Directiory, 0x32:File)
0x04 ~ 0x07 4byte File Size File Size (in the case of Folder, set 0x00)
0x08 ~ 0x0B 4byte Modification Time Modification Time
0x0C ~ 0x0D 2byte Type Type(0x10:Directory, 0x20:ZIP File)
0x0E ~ 0x?? ??byte Short Name Short File Name(different size by Name length)

위에 정보들을 이 구조에 대조해보자. ( 기본적으로 hex값을 쓰겠습니다. 0x생략 )

Block Size == 56byte이며

Type == 31로 Directory 즉 폴더이며

File Size == 00 *4byte 디렉토리이기 때문에 크기가 00으로 설정되며

Modification Time == C1 50 5A 96

한국은 UTC+9이기 때문에 9시간을 더해주면 내가 폴더를 만든 시각(따로 수정해주지 않았기 때문에 생성한 시간과 동일)인 3:50분과 일치한다

Short Name == c0wb3ll로 일치한다.

2. Windows10 ShellbagMRU Structure - Block Struture

Address RangeSizeField NameDescription

0x00 ~ 0x01 2byte Extension Block Size Extension Block Size
0x02 ~ 0x03 2byte Version Version
0x04 ~ 0x07 4byte Signature Signature Value (0xBEEF0004)
0x08 ~ 0x0B 4byte Create Time Create Time
0x0C ~ 0x0F 4byte Last Access Time Last Access Time
0x10 ~ 0x13 4byte Identifier Identifier (0x2E:Windows8.1, Windows10)
0x14 ~ 0x17 4byte MFT Entry Number MFT Entry Number
0x18 ~ 0x19 2byte Reserved Area Reserved Area, set 0x00
0x1A ~ 0x1B 2byte MFT Sequence Number MFT Sequence Number
0x1C ~0x29 14Byte Reserved Area Reserved Area, set 0x00
0x2A ~ 0x2D 4byte CheckSum each file/folder unique number
0x2E ~ 0x?? ??byte File Name File Name(different size by Name length)
0x?? ~0x??+4 4byte Extension Block Offset Extension Block Offset (Starting point Extension Block)
반응형

댓글