ShellBags (Windows10)

c0wb3ll ㅣ 2020. 6. 2. 13:07

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

image

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

image

3. HKEY_CURRENT_USER\Microsoft\Windows\Shell\Bags

image

4. HKEY_CURRENT_USER\Microsoft\Windows\Shell\BagMRU

image

Windows10 Shellbag 분석

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

image

위의 구조의 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

image

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

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

image

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

image

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

 

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

image

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

 

image

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

 

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

image

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

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

image

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

image

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

  1. ColInfo

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

    •  

      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

      ColInfo를 눌러보면 다음과 같은 헥스 값이 나올텐데 FD DF DF FD 10 00 00 00 00 00 00 00 00 00 00 00 까지는 같은 숫자를 가지는 것 같다.

      다른 부분은 05 00 00 00 부터인데 이 05의 값이 세부정보의 목록 수의 대한 값이다.

      image

      지금 세부정보의 목록은 이름, 수정한 날짜, 유형, 크기, 만든 날짜로 5개이기 때문에 값이 05 00 00 00 이며

      image

      다음과 같이 6개로 바꾸었을 때는 아래와 같이 06 00 00 00 이 되는 것을 볼 수 있었다.

      image

      그 뒤 값이 1 증가할 때 마다 24byte 만큼의 데이터가 추가 되었는데 이 값들이 무엇을 의미하는 지는 모르겠다.

  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

    • image

      다음과 같이 분류방법에 대해 바꿀 때만 값이 바뀌었다.

    • 정확하진 않지만 분류방법이 있을때는 아래와 같은 값을 가졌었다.

      image
    • 또한 분류방법이 없을 때는 아래와 같이 0000..의 값을 가졌었다.

      image
  5. GroupByKey:PID

    • 위에 분류 방법에 대한 PID이며 각 방법에 따른 PID 값은 다음과 같다.

      Category GroupByKey:PID Value
      이름 10
      수정한 날짜 14
      유형 4
      크기 12
      만든 날짜 15
      태그 5
  6. GroupView

    • 이 값 또한 분류 방법을 고를 때마다 0xffffffff(4294967295) 의 값이 지정됐다.

      image
    • 지정 하지 않으면 아래와 같이 0000....의 값으로 바뀌었다.

      image
  7. IconSize

    • 아이콘 사이즈는 이름 그대로 아이콘 사이즈에 대한 값이었다. 아이콘 값은 밑에 LogicalViewMode, Mode를 모두 살펴보고 정리하도록 하겠다.
  8. LogicalViewMode

    • LogicalViewMode는 보기 방법에 따른 값이다.

    • 대략 미리 값들만 살펴보자.

      1 - 자세히

      2 - 타일

      3 - 아이콘

      4 - 간단히

      5 - 내용

  9. Mode

    • Mode값 또한 보기 방법에 따른 값이다. LogicalViewMode와 뭐가 다른지는 모르겠다.;;

    • 대략 값들을 살펴보자

      1 - 아이콘 보기

      3 - 간단히

      4 - 자세히

      6 - 타일

      8 - 내용

    • 여태 나온 IconSize, LogicalViewMode, Mode 의 값들을 정리하면 아래 표와 같다.

      보기 IconSize(in pixels) LogicalViewMode Mode
      아주 큰 아이콘 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의 값을 가진다.

      image
    • 내림차순 정렬을 하면 마지막 4byte가 FF FF FF FF의 값을 가진다.

      image
    • 그 위에 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

image

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

 

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

image

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

1. Windows10 ShellbagMRU Structure - Block Struture

image

Address Range Size Filed Name Description
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

image

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

Short Name == c0wb3ll로 일치한다.

2. Windows10 ShellbagMRU Structure - Block Struture

image

Address Range Size Field Name Description
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)

으.. 영어....

진짜 제발 모두 영어공부합시다... 깊게 들어갔더니 영어자료밖에 없고 같은 자료를 보고 이해할 수 없느냐는 영어 실력에 달린거 같습니다..... 오픈 채팅방에 질문 했더니 사이트 올려주셨는데 보고 있는 사이트였어요. 너무 쪽팔렸습니다 ㅠㅠ....


Reference

https://blog.forensicresearch.kr/20 - 역시나 가장 많이 참고했습니다. 감사합니다!

http://www.forensic-artifact.com/windows-forensics/shellbags - 앞으로 공부는 이 글을 바탕으로 주제를 잡고 시작할 것 같습니다.

https://forums.ivanti.com/s/article/Auto-Arrange-icons-and-Align-icons-to-grid-setting-not-captured-in-Microsoft-Windows-10 - FFlags 값에 대해 조사한 자료

https://www.stark4n6.com/2019/02/shellbags-folder-views-and-windows.html - 여러가지 Bags 키값에 대해 조사한 자료

https://cyberforensicator.com/2019/02/03/shellbags-forensics-directory-viewing-preferences/ - 여러가지 Bags 키값에 대해 조사한 자료2