Android Forensic/Evidence Analysis

[Digital Forensic] Android Thumbcache File Recovery Analysis

DF_m@ster 2024. 4. 14. 17:12

Thumbcache File Forensic

디지털 포렌식에서 기기에 저장된 그래픽 파일을 활용해 범죄 혐의를 입증 할 수 있다. 하지만 안티 포렌식으로 인해 원본 그래픽 파일이 부재된 경우 Thumbcache 파일을 분석해 부재된 그래픽 파일을 대신하여 범죄 혐의 입증에 사용할 수 있다. 때문에 Thumbcache 파일의 구조와 삭제 정책을 상세하게 이해할 필요가 있다.
 
본 문단은 안드로이드에서 기본적으로 제공하는 갤러리의 Thumbcache 파일 생성 및 삭제 정책과 Thumbcache 파일에서 Thumbnail 파일 추출 및 추출된 Thumbnail 파일의 원본 파일 연관성 증명 방법을 정의한다.
 
 
 

Thumbcache File Scenario

Thumbcache 파일의 구체적인 생성 및 삭제 정책을 파악하기위해 3번의 분석 시점을 나누어 Thumbcache 파일을 분석한다. 아래는 각 분석 시점에 대한 설명이다. 
 
첫 번째 경우 실습에 사용할 그래픽 파일을 기기에 저장한 이후, 갤러리에서 특정 그래픽 파일을 시청하지 않은 상태에서의 Thumbcache 파일 분석이다. 두 번째 경우 갤러리를 이용해 특정 그래픽 파일을 시청한 이후의 Thumbcache 파일 분석이다. 마지막 세 번째 경우 갤러리에서 모든 그래픽 파일을 삭제한 이후의 Thumbcache 파일 분석이다.
 
본 실습에서 사용한 사진 9장과 영상 1개는 구글 드라이브에 미리 업로드하여 실습에 활용하였고, 다음 문단은 각 분석 시점에서의 Thumbcache 파일의 분석 결과를 정리한다.
 
 
 

Thumbcache File Analysis (Case 1)

첫 번째 Thumbcache 파일 분석의 경우 실습에 사용할 그래픽 파일을 기기에 저장한 이후, 갤러리에서 특정 그래픽 파일을 시청하지 않은 상태에서의 Thumbcache 파일 분석이다. 해당 분석 시점은 Thumbcache 파일의 생성 시점을 파악할 수 있다.
 
아래는 Android 기기에서 구글 드라이브에 업로드한 10개의 그래픽 파일을 다운로드하는 모습이다.

Download Test File

 
10개의 그래픽 파일이 전부 다운로드 하고, 해당 Android 기기를 이미징하여 FTK Imager로 'Download' 디렉터리를 확인한 결과 10개의 그래픽 파일이 모두 정상적으로 존재함을 확인할 수 있다.

Exist Download File

 
반면, '/sdcard/emulated/Android/data/com.sec.android.gallery3d/cache/' 경로에 존재해야할 Thumbcache 파일이 생성되지 않음을 확인 할 수 있다. 이는 Thumbnail을 저장하는 Thumbcache 파일이 특정 그래픽 파일을 저장하는 시점에서 생성되는 것이 아니라, 특정 그래픽 파일을 처음 시청하는 시점에서 Thumbnail 파일이 생성되는 정책임을 확인할 수 있다.

Not Exist Thumbcache File

 
 
 

Thumbcache File Analysis (Case 2)

두 번째 Thumbcache 파일 분석의 경우 갤러리를 이용해 특정 그래픽 파일을 시청한 이후의 Thumbcache 파일 분석이다. 해당 분석 시점은 Thumbcache 파일 구조, Thumbnail 파일의 구체적인 생성 순서, 특정 Thumbnail의 원본 그래픽 파일 연관성 증명 방법을 파악할 수 있다.
 
아래는 실습에서의 갤러리 모습으로, 4번째로 다운로드 한 그래픽 파일을 시청하여 실습환경을 재현하였다.

View Graphics File (4.jpg)

 
이후에 해당 Android 기기를 이미징하여 FTK Imager로 Thumbcache 파일이 저장되는 경로를 확인한 결과 3개의
Thumbcache 파일이 존재함을 확인할 수 있다. Thumbcache 파일을 추가분석하여 Thimbnail을 추출하기위해 3개의 Thumbcache 파일을 전부 추출하였다.

 
Android의 Thumbcache 파일은 내부의 Thumbnail 파일을 jpg Format으로 저장하기 때문에, Thumbcache 내부의 jpg 파일을 추출해주는 코드를 작성해 Thumbnail을 추출한 모습이다.

 
Thumbcache 파일에서 17개의 Thumbnail 파일이 추출되었고 각 Thumbnail을 확인하면, Square Thumbnail 파일은 10개, Aspect Ratio Preserved Thumbnail 파일은 7개의 파일만 생성되었음을 확인할 수 있다.

Square Thumbnail 파일은 갤러리에 존재하는 모든 파일이 생성되었으나, Aspect Ratio Preserved Thumbnail 파일은 갤러리의 일부 파일만 생성되었음을 알 수 있다.
Aspect Ratio Preserved Thumbnail 파일의 관계는 갤러리에서 시청 한 파일의 양쪽 파일임을 확인할 수 있다. 구체적으로는 시청한 파일의 오른쪽과 왼쪽 파일을 순서대로 총 양쪽 3개씩의 Aspect Ratio Preserved Thumbnail 파일이 생성됨을 확인할 수 있다.

이를 통해 Square Thumbnail 파일은 갤러리에서 보여진 모든 그래픽 파일이 생성되는 정책임을 확인할 수 있고, Aspect Ratio Preserved Thumbnail 파일은 시청한 그래픽 파일과 양쪽 3개씩의 그래픽이 생성되는 정책임을 확인할 수 있다.

Extract Thumbnail File


‘.idx’ Thumbcache 파일 내부의 특정 Index Entry는 '.0', '.1' Thumbcache 파일 내부의 특정 Thumbnail의 Logical Offset을 저장해 특정 Thumbnail에 접근한다.
 
아래는 [content].idx 파일의 첫 번째 Index Entry의 모습으로, Thumbnail Index 값은 '0x41 81 A6 32 2D 8C F0 0D', Thumbnail Offset 값은 '0x01 B0 AD' 값을 갖는다. 이는 해당 Index Entry가 [content].0 파일의 '0x01 B0 AD'번 째 논리주소로 시작하는 특정 Thumbnail을 포인팅하여 접근함을 알 수 있다.

[content].idx

 
[content].0 파일의 '0x01 B0 AD' 번 째 논리 주소 값을 확인하면, Thumbcache 파일이 내부적으로 Thumbnail 파일을 저장하는 고유한 구조체가 존재함을 확인할 수 있다. 추가적으로 Thumbcache 파일은 Thumbnail 구조체를 연속적으로 저장하기 때문에 해당 Thumbnail의 시작 논리 주소에서 2Byte 이전의 값에 직전의 Thumbnail jpg 파일의 Footer Signature가 존재함을 확인할 수 있다.
 
특징으로는 '.idx' Thumbcache 파일의 Index에서 Logical Offset 값으로 '.0' Thumbcache 파일의 특정 Thumbnail에 접근할 때, Index Entry의 첫 8 Byte 값인 Thumbnail Index 값과 접근한 Thumbail의 Index 값을 비교해 정상적으로 Thumbnail에 접근했는지를 판별한다. 

[content].0


해당 Index Entry가 포인팅하는 Thumbnail은 ‘.0’ Thumbcache 파일에서 7번째로 추출된 Thumbnail 파일로 아래의 파일을 포인팅했음을 확인할 수 있다.


Thumbcache 파일은 각 Thumbnail 파일을 생성하고 저장할 때, 해당 Thumbnail의 원본 그래픽 파일 마지막 데이터 수정 시간을 10진수의 UNIX Time 값으로 계산해 메타데이터에 포함하여 저장한다.

해당 특성을 이용해 Thumbcache 파일의 특정 Thumbnail 파일을 분석할때, 메타데이터 영역의 UNIX Time 값을 파일의 마지막 데이터 수정 시간 값으로 갖는 그래픽 파일을 검색해 특정 Thumbnail과 해당 Thumbnail의 원본 그래픽 파일간의 연관성 증명이 가능하다.
 
아래는 Thumbcache 내부 임의의 Thumbnail 파일(Thumbcache 내부의 5번째 Thumbnail 파일)로, Thumbnail 파일의 원본 그래픽 파일 연관성 증명 과정을 정리한 내용이다.
 
해당 Thumbnail의 메타데이터 영역에는 원본 그래픽 파일의 마지막 데이터 수정 시간이 10진수의 UNIX Time 값으로 저장되는데, 본 실습에서는 UNIX Time이 '1712902408'이되고, 추가적으로 원본 그래픽 파일의 생성 순번은 '22', 해상도 식별자는 '2'가 된다. 

 
동일한 원본 그래픽 파일을 갖는 Thumbnail의 경우 '원본 그래픽 파일의 생성 순번'과 '원본 그래픽 파일의 마지막 데이터 수정 시간' 값은 동일하고, '해상도 식별자' 값은 다르다.
 
아래는 '원본 그래픽 파일의 생성 순번'과 '원본 그래픽 파일의 마지막 데이터 수정 시간' 값이 동일하면서, 해상도 식별자는 '1'로 다른 Thumbnail의 모습으로, 육안으로 확인 시 해당 Thumbnail은 직전에 분석한 Thumbnail과 동일한 원본 그래픽 파일을 갖는 Thumbnail임을 유추할 수 있다.

 
Ext4 파일 시스템은 파일의 UNIX Time을 16진수로 저장하기 때문에 특정 그래픽 파일의 마지막 데이터 수정 시간 값을 검색하기 위해서는 10진수의 UNIX Time 값을 16진수로 변환해야한다. 이후에 Inode Table에서 해당 UNIX Time 값을 마지막 데이터 수정 시간으로 갖는 Inode Entry를 추출한다.
 
본 실습의 경우 '1712902408' 값을 16진수로 변환하면 '0x6618D108'이 되고, 이를 리틀엔디안으로 변환하면 '0x08D11866'이 된다.
 
아래는 Inode Table에서 마지막 데이터 수정 시간을 '0x08D11866'로 갖는 Inode Entry를 추출한 모습이다. 이미지 갯수가 적거나 갤러리 내부에 비슷한 그래픽 파일이 많지 않은 경우, 육안으로 원본 그래픽 파일의 연관성을 유추하고 이후에 마지막 데이터 수정 시간 Field 값을 비교해 검증하는 방식으로도 가능할 것이다.

Inode Entry (원본 그래픽 파일)

 
해당 파일의 Inode Number는 '0x1EA35E' (2,007,902 (d))가 되고, 해당 그래픽 파일을 육안으로 확인했을 때, 이전에 확인한 Thumbnail 파일들의 원본 그래픽 파일과 동일한 모습을 확인 할 수있다.
 
추가적으로 해당 파일의 데이터 논리 크기 '0x01 23 EB 71' (=19,131,249)와 해당 파일의 데이터 시작 주소 '0x7F 6D 8A' (=8,351,114)가 올바른 값을 가지기 때문에 올바르게 접근한 Inode Entry임을 검증할 수 있다.



Thumbcache File Analysis (Case 3)

세 번째 Thumbcache 파일 분석의 경우 갤러리에서 모든 그래픽 파일을 삭제한 이후의 Thumbcache 파일 분석이다. 해당 분석 시점은 Thumbcache 파일 삭제 정책을 파악할 수 있다.
 
아래는 실습에서의 갤러리 모습으로, 10개의 그래픽 파일을 전부 삭제한 모습이다.

 
갤러리에서 10개의 그래픽 파일을 전부 삭제한 이후에 Android 기기를 이미징하고 FTK Imager로 이미지 파일을 분석한 결과이다.
 
'Download' 디렉터리의 원본 그래픽 파일들은 전부 삭제되었으나, Thumbcache 파일은 삭제되지않고 그대로 존재함을 확인할 수 있다. 추가적으로 3개의 Thumbcache 파일을 추출하고, Hash 값을 확인한 결과 그래픽 파일 삭제 이전의 Thumbcache 파일의 Hash 값과 동일함을 확인해, 원본 그래픽 파일의 삭제 여부는 Thumbcache 파일의 수정 및 삭제 이벤트를 발생시키지 않는 정책임을 확인할 수 있다.

Download Directory
Cache Directory
Thumbcache File (Hash)


추가적으로 원본 그래픽 파일이 정상적으로 삭제되었는지 검증하기위해 삭제 이벤트 이전의 Block Bitmap과 삭제 이벤트 이후의 Block Bitmap을 비교하여 원본 그래픽 파일이 성공적으로 삭제되었는지 검증한다. 
 
검증에 사용할 그래픽 파일은 Thumbnail과 원본 그래픽 파일의 연관성 증명에서 활용한 그래픽 파일을 대상으로 진행한다. 
 
해당 그래픽 파일은 Extent Entry가 2개 존재하는 단편화가 진행된 파일로, 첫 번째 Data Block의 경우 '0x7F 6D 8A'번 Block 부터 '0x0B' 만큼의 Block 영역이고, 두 번째 Data Block 영역은 '0x05 C0 00'번 Block 부터 '0x12 34' 만큼의 Block 영역이 된다. 해당영역을 영접한 전체영역이 검증에 사용될 파일의 Data Block의 전체 영역이된다.

 
각 Data Block 영역을 Block Bitmap에서 확인하기위해 Block Bitmap 표현 방식으로 계산하면 다음과 같다.

첫 번째 Data Block은 '0xFEDB1' + 2 부터 '0xFEDB2' + 3이 되고, 두 번째 Data Block은 '0xB800' + 0 부터 '0xBA46' + 4 영역이 된다.
 
아래는 각각 삭제 이전의 Block Bitmap, 삭제 이후의 Block Bitmap 모습으로 그래픽 파일이 정상적으로 삭제되었음을 확인할 수 있다.

0xFC 1F = 0011 1111 1111 1000 (리틀엔디안 변환)

Before Deletion Event (Extent Entry 1)
After Deletion Event (Extent Entry 1)


0xF0 = 0000 1111 (리틀엔디안 변환)

Before Deletion Event (Extent Entry 2)
After Deletion Event (Extent Entry 2)




 

Thumbcache File Recovery Result

결과적으로 Thumbcache 파일은 원본 그래픽 파일을 다운로드 한 시점이 아닌 원본 그래픽 파일을 시청 한 시점에서 생성되며, 원본 그래픽 파일의 삭제 및 수정 이벤트에 영향을 받지 않는다. 때문에 안티포렌식으로 인해 원본 그래픽 파일에 부재가 발생한경우, Thumbcache 파일을 분석해 Thumbnail 파일을 추출하고 원본 그래픽 파일을 대신해 법적 근거로 활용할 수 있다.





 

이전 글

[Digital Forensic] Android Thumbache Structure Analysis

 

[Digital Forensic] Android Thumbache Structure Analysis

Thumbcache Thumbnail: 사용자가 특정 그래픽 파일을 빠르게 식별하는 데에 사용하는 작은 크기의 그래픽 파일을 의미한다. Thumbcache: Thumbnail 파일을 메타데이터와 함께 연속적으로 저장하는 단일 파

digitalforensicmaster.tistory.com

 

 

 

 

 

 

 

Reference

https://www.dbpia.co.kr/journal/detail?nodeId=T15660233