## 개요
프로그램 실행과 관련해서 여러 아티팩트들을 다루어 보았다. 대부분 아티팩트로 분류되는 요소들은 프로그램의 실행 흔적을 알려주는 경우가 많고, 안티 포렌식 행위로 인해, 혹은 시스템 용량 관리를 위해 삭제하는 경우가 빈번하다. 이러한 경우에는 꽤나 골머리가 아파지는 것도 사실이다.
하지만 언제나 프로그램 실행을 직접적으로 확인할 수 있는 방법은 존재한다. 그 중 하나가 바로 오늘 소개하게 될 IconCache이다. IconCache는 말 그대로 사용했던 프로그램의 아이콘을 빠르게 로드하기 위해 다른 영역에 저장해 놓는 윈도우 운영체제의 기능이다.
Thumbnail의 경우 Youtube와 같은 미디어 매체가 발달하면서 썸네일이라는 말은 모두 한번쯤 들어보았을 것이다. 거기서 말하는 Thumbnail에서의 Thumb과 ThumbCached에서의 Thumb는 같은 단어이다. Iconcache와 유사하게 사용되었던 미디어 파일의 미리보기가 저장된다.
즉 미리 보여주는 작은 이미지라는 의미와 Cache라는 뜻이 결합된 단어이다.
어떤 용도로 사용될지 감이 잘 온다면 다행이다! ThumbCache와 IconCache는 특정 프로그램이나 미디어 파일을 썸네일의 형태로 저장하는 작은 캐시 데이터베이스다.
## 경로
ThumbCache와 IconCache 역시 데이터베이스의 형태로 앱데이터(AppData) 하위 경로에 저장된다.
자세한 경로는 아래와 같다.
```
%AppData%\Local\Microsoft\Windows\Explorer
%AppData%\Local\Iconcache.db
```
데이터베이스라고 했는데 폴더 명만 줘서 적잖이 당황했을 수도 있다. 하지만 ThumbCache 자체는 그 크기별로 다른 데이터베이스 파일에 저장되기 때문에 그렇다.
해당 폴더 하위에 있는 파일들을 보면 `iconcache` , `thumbcache` 두 종류가 있다. 자세한 차이점은 다음 단원에서 다뤄보도록 하겠다.
![[%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2023-03-20_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_5.11.37.png]]
## 데이터
ThumbCache 내부에 어떤 정보가 저장되는지 다루어보기 이전에 전 단원에서 이야기한 `iconcache`와 `thumbcache`의 차이점이 뭔지 알아보도록 하자. 에서도 이야기했지만 Thumbcache과 Iconcache의 가장 두드러지는 차이점은 바로 저장되는 유형이 다르다는 것이다.
Thumbcache는 Thumbnail에서 따온 단어로, 사진과 동영상을 비롯한 미디어 파일의 미리보기(Thumbnail)을 저장하는 것이고, IconCache는 프로그램의 실행 아이콘의 이미지를 미리 저장하여 매번 불러오지 않도록 하는 기능이다. 즉 미디어 사진에 대한 사용자 정보를 찾고 싶다면 ThumbCache, 프로그램 실행과 관련된 정보를 찾아보고 싶다면 IconCache를 참고하는 것이 바람직할 것이다.
한 곳에서 데이터를 빨리 불러오도록 하기 위해 사용되는 중앙 집중적 기능이기 때문에 원본 매체(이미지, 프로그램)가 삭제되더라도 Cache에서는 유효하지 않을 뿐 데이터는 남아있다는 것이 하나의 특징이라면 특징이다.
삭제되면 미할당되는 일반적인 경우와는 다르게, 할당된 상태로 링크가 끊어진 채 보관되는 개념으로 이해한다면 될 것 같다.
### Iconcache
아이콘 캐시는 그 저장 방식이 윈도우 버전에 따라 상이한 구석이 존재한다. 그 기점이 윈도우 7인데, 윈도우7 까지는 `iconcahe.db` 파일 내 하나의 레코드에 아이콘 이미지 하나에 대한 여러 해상도의 다른 이미지가 저장되었다.
이와 다르게 윈도우8 이후의 버전에서는 직접적으로 이미지 데이터를 담고 있지 않으며, 레코드 내에 아이콘 이미지의 경로를 보관하는 방식으로 데이터 저장 효율이 더 향상되었다고 볼 수 있다. 이때 이미지는 하나의 이미지로 저장되는 것이 아닌, 윈도우7 이전 버전과 유사하게 여러 해상도의 이미지가 저장되며, 그에 대한 경로가 지정된다.
즉 버전에 따라 약간의 차이가 존재한다. Iconcache와 관련해서는 Windows Vista 이후 사용되는 버전에 대해 기술한다.
**Header**
|**Offset (hex)**|**Size (bytes)**|**Description**|
|---|---|---|
|0x00|4|The signature ("CMMM")|
|0x04|4|Format version|
|0x08|4|Cache type <br>(0~4) Depends on the image resolution|
|0x0C|4|Offset to first cache entry or file header|
|0x10|4|Offset to first available cache entry|
|0x14|4|Number of cache entries|
**Cache Entry**
|Offset (hex)|Size (bytes)|Value|
|---|---|---|
|0x00|4|Signature "CMMM"|
|0x04|4|Cache entry size|
|0x08|8|Entry hash|
|0x10|8|File extension|
|0x18|4|Identifier string size|
|0x1C|4|Padding size|
|0x20|4|Data size|
|0x24|4|(empty)|
|0x28|8|Data checksum|
|0x30|8|Header checksum|
|0x38|-|Identifier string|
|-|-|Padding & Data|
### Thumbcache
ThumbCache는 저장 방식이 윈도우 버전에 따라 상이하다. Vista, Windows7, Windows 10 을 기점으로 다른 저장 포맷을 보인다.
ThumbCache 파일은 파일의 시작 부분인 헤더 영역과 하위 엔트리가 저장되는 Cache Entry 배열이 존재하는 형태로 구성된다.
헤더와 엔트리는 기본적으로 연속된 형태로 나타나게 된다. 자세한 이해를 위해 아래 모식도를 참고하자
```
Header | Entry1 | Entry2| ... | Entry N | End
```
아티팩트들은 주로 사용되는 Windows 10 환경에 대해 설명할 예정이기에 Windows 10/11을 메인으로 설명한다.
**Windows 10/11**
**Header**
|**Offset**|**Size**|**Description**|
|---|---|---|
|0x00|4|Signature( “CMMM”)|
|0x04|4|Format Version|
|0x08|4|Cache Type|
|0x0C|4|File Header Size|
|0x10|4|First Available Cache Entry offset|
|0x14|4|Number of Cache Entries|
**Cache Entry Array**
|Offset|Size|Description|
|---|---|---|
|0x00|4|Entry Size|
|0x04|4|Header Size|
|0x08|8|Thumbnail Offset|
|0x10|8|Thumbnail Size|
|0x18|16|Last Modified Timestamp|
|0x28|4|Cache Entry Flags|
|0x2C|4|Cache Entry Type|
|0x30|4|File Attributes|
|0x34|4|File Size|
|0x38|4|Filename Length|
|0x3C|n|Filename|
> [!Question] **Unknown이 왜이렇게 많아요?!**
>
> 정확하게 알려지지 않은 부분들이 많아 추가 연구가 필요하나, 디지털 포렌식 영역에서 활용해야 하는/ 활용 가능한 데이터들은 대부분 정의가 되어있다고 생각한다.
>
> 대부분의 구조체는 Joachim Metz의 구조체를 참고하여 작성했다.
> 직접 확인해 본 결과 일치하지 않는 데이터도 있다. 확인하면서 일치하지 않는 구조체는 실험을 통해 수정한 부분도 있다.
> Unknown으로 규정된 데이터도 많고, 오프셋이 정확하지 않은 값들도 있으니 유의해서 보면 좋겠다.
>
## 결론
경험적으로 미루어 보았을 때 ThumbCache, IconCache는 다른 아티팩트들 중 실행 흔적을 찾아보았을 때 안티 포렌식 행위를 비롯한 데이터 삭제 행위가 있을 때 많이 사용되곤 했다.
이유라면 정확하지는 않겠지만, 하나의 아티팩트로써 온전히 사용자 행위를 정의하기에는 부족한 정보를 담고 있기에 그렇다고 생각한다. 최근 열람/사용한 이미지에 대한 정보가 남아있기 때문이다.
어떤 사용자 행위에 대한 직접적인 증거가 아닌 간접적인 증거로써 주장을 뒷받침 할 수 있는 요인이라 생각되는 아티팩트이다.
많은 정보를 담고 있지 않고, 행위에 대한 간접적인 정보를 담고 있기 때문에 안티포렌식 행위에 사용되지 않을 뿐만 아니라, 이러한 캐시를 날려버렸을 때 사용자 입장에서는 티가 바로 나기 때문에 ( 지우면 기존에 있던 아이콘들이 안보이기 때문에 미리보기라던가 아이콘이 정상 작동하지 않을 것이다! ) 잘 건들지 않는/ 건들 수 없는 영역이다.
사소하지만 큰 의미를 부여할 수도 있는 아티팩트인 ThumbCache와 IconCache에 대해서 알아보았다.
파일 실행에 대한 증거로 많이 사용되는 아티팩트이다.
다만 직접 바이너리를 분석하여 값을 알아내기에는 독특한 인코딩 형식을 사용하고 있기 때문에 어려움이 있을 수 있다.
직접 공부해서 파싱해 보는게 최선이라고 생각하지만 여러 파싱 도구가 있으니 도움을 받아보는 것도 좋은 방법이라고 생각된다.