20
FORENSIC INSIGHT; DIGITAL FORENSICS COMMUNITY IN KOREA SQLite Recovery Deok9 [email protected]

SQLite Recoveryforensicinsight.org/.../2013/07/INSIGHT-SQLite-Recovery.pdf · 2014. 8. 6. · SQLite 파일의복구 • 데이터추출을효과적으로하는방법 텍스트형식으로저장되어있으므로,

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

  • FORENSIC INSIGHT;

    DIGITAL FORENSICS COMMUNITY IN KOREA

    SQLite Recovery

    Deok9

    [email protected]

  • forensicinsight.org Page 2

    Contents of Table

    1. Introduction

    2. Case

    3. How

    4. Conclusion

  • forensicinsight.org Page 3

    Introduction

  • forensicinsight.org Page 4

    Introduction

    SQLite 파일의 복구

    • 데이터 추출을 효과적으로 하는 방법

    텍스트 형식으로 저장되어 있으므로, Strings 같은 명령어로 모든 데이터를 볼 수 있음

    삭제된 데이터로 범위를 줄인 후 분석하면 조금이나마 더 효율적

    • SQLite Viewer로 볼 수 있도록 복원하는 방법

    SQLite Viewer가 해석할 수 있도록 구조를 복원하고 Cell을 연결시키는 작업

    SQLite Recovery

  • forensicinsight.org Page 5

    Case

  • forensicinsight.org Page 6

    Case

    아이폰 문자메시지 백업 파일

    Target

    App Data Type Location(WinXP)

    Safari Cache%USERPROFILE%\Local Settings\Application

    Data\Apple Computer\Safari\Cache.db

    I-Phone Mobile Comm

    %USERPROFILE%\Local Settings\Application

    data\Apple Computer\MobileSync\Backup\

    .mdata

    FirefoxHistory

    Cookie

    %USERPROFILE%\Local Settings\Application

    Data\Mozilla\Firefox\Profiles\\

    places.SQLite or cookies.SQLite

    Chrome

    Cache

    History

    Cookie

    %USERPROFILE%\Local Settings\Application

    Data\Google\Chrome\UserData\Default\

    Cache or History or Cookies

    Zero Fill

    Zero Fill

    If delete(group_msg):

    group_msg = unallocated space

  • forensicinsight.org Page 7

    How

  • forensicinsight.org Page 8

    How

    Header Page + Page Chain

    SQLite 구조(간략)

    Database Header

    Schema Table

    Unallocated Page

    Root Page

    Header Page

    Page Chain(B-Tree)

  • forensicinsight.org Page 9

    How

    Database Header

    우선 페이지 크기를 확인하자

    SQLite File Signature

    Page Size(Big endian)

  • forensicinsight.org Page 10

    How

    Database Schema Table

    다음으로 루트 페이지 번호를 확인하자

    Schema Type

    SQL Query Statement

    Schema Name

    Root Page Number

  • forensicinsight.org Page 11

    How

    Page Header + Cell offset + Free Space + Cell

    페이지 구조(간략)

    Database Header

    Cell offset 1…n

    Free Space

    Cell n…1

  • forensicinsight.org Page 12

    How

    Leaf 페이지 헤더

    • 이것만 잘 해석해도 절반 이상은 건짐

    실제 데이터가 존재하는 페이지는 Leaf 페이지

    Offset Contents

    0 Page Flag : 0x0D

    1-2 First Unallocated Block Offset

    3-4 Cell Count

    5-6 First Cell Offset

    7 Over 3Byte Unallocated Block Count

  • forensicinsight.org Page 13

    How

    Leaf Cell 구조(간략)

    그럼 Leaf 페이지 안의 Cell은 어떤 구조?

    Record

    Size

    Row

    ID

    Length of

    Data HeaderType1 … TypeN Data1 … DataN

    Cell Header Data Header Data Area

    Record

    Cell Header

    Next Free

    Block

    Free

    Block Len

    Deleted

  • forensicinsight.org Page 14

    How

    1. Leaf 페이지를 찾는다.

    2. Free Space를 찾는다.

    1. 페이지 헤더의 오프셋 5~6에 있는 가장 첫 번째 활성 셀을 찾고

    2. 셀 오프셋 체인의 오프셋이 0x0000이 될 때까지 확인

    3. 그럼 셀 오프셋 n과 셀 n 사이의 공간을 복구하면 끝

    일단 Free Space 부터 복구

    Page Header

    Cell offset 1…n

    Free Space

    Cell n..1

  • forensicinsight.org Page 15

    How

    1. Leaf 페이지를 찾는다.

    2. 첫 번째 Free Block을 찾는다.

    1. 페이지 헤더의 오프셋 1~2에 있는 가장 첫 번째 비 활성 오프셋을 찾고

    2. 삭제된 Leaf Cell 체인을 읽어나가자

    다음으로 Free Block 복구

    Page Header

    Cell offset 1…n

    Free Space

    Cell n

    Deleted cell

    Cell n-2 … 1

  • forensicinsight.org Page 16

    How

    복원은 어떻게 함1

    복원해야 할 부분

    • Legnth of Record

    • Row ID

    • Length of Data Header 일부분

    Record

    Size

    Row

    ID

    Length of

    Data HeaderType1 … TypeN Data1 … DataN

    Data Header Data AreaNext Free

    Block

    Free

    Block Len

    복구해야 할 부분

  • forensicinsight.org Page 17

    How

    복원은 어떻게 함2

    일단 데이터 헤더와 데이터 연결부터

    • 데이터 헤더의 값과 데이터 길이의 관계

    • 브루트 포싱 ㄱ ㄱ

    Value Data Type Data Size

    0 NULL 0

    N (N=1-4) Signed Integer N

    5 Signed Integer 6

    6 Signed Integer 8

    7 IEEE float 8

    8-11 Reserved

    N>12

    (N:even)BLOB (N-12)/2

    N>13

    (N:odd)TEXT (N-13)/2

  • forensicinsight.org Page 18

    How

    복원은 어떻게 함3

    Length of Record는?

    • 데이터 헤더와 데이터 길이가 맞아 떨어지면, 자연스레 될 듯

    Row ID는?

    • 브루트 포싱 때리면 되지 않을까? 어짜피 0xFF – 활성 블록 개수 * n(약 200 미만)일 것같은데

  • forensicinsight.org Page 19

    How

    한눈에 봅시다(어딘가 모르게 익숙한 그림)

    Length of

    RecordRow ID

    Length of Data

    Header

    Size of

    Field 1

    Size of

    Field 2...

    Size of

    Field NData of Field 1 Data of Field 2 ... Data of Field N

    Data Header

    Record

    Variable length

    integer

    Length of

    RecordRow ID

    Length of Data

    Header

    Size of

    Field 1

    Size of

    Field 2...

    Size of

    Field NData of Field 1 Data of Field 2 ... Data of Field N

    Offset of next free block

    Length of free block

    2 Byte2 Byte

    Data Header

    Record

  • forensicinsight.org Page 20

    Conclusion

    Recover Iphone Message

    복원은 아니고 복구만