File Forensic/File Analysis

[Digital Forensic] SQLite Journal & WAL Structure Analysis

DF_m@ster 2024. 3. 8. 14:28

SQLite Journaling

Journaling: SQLite의 트랜잭션이 발생하면 SQLite의 일관성을 보장하기 위해 백업하는 기법을 의미한다. 트랜잭션 과정에서 예상치 못한 문제로 인해 트랜잭션이 비정상적으로 종료되면, 백업해 둔 임시 파일을 이용해 SQLite를 트랜잭션 이전으로 복원한다. 디지털 포렌식의 관점에서 journal 파일 분석은 SQLite의 특정 이벤트 이전의 Page를 확보할 수 있어 중요하다.

SQLite의 journal 모드는 Rollback Journal 모드WAL 모드 두 가지가 있으며, 아래는 각 모드의 상세 설명이다.
 


Rollback Journal

Rollback Journal 모드는 기본적으로 트랜잭션이 발생하면 journal 파일을 생성한다. 이후에 SQLite의 수정 예정인 Page를 journal 파일에 Page 단위로 백업하고, SQLite의 데이터를 수정한다. 만약 예상치 못한 문제로 트랜잭션이 중단되면 백업된 journal파일을 이용해 복원한다.

Rollback Journal은 5가지 세부 모드가 존재하고, 아래는 각 모드의 세부 정책 과정을 정리한 내용이다.
 

1. DELETE (Default)

SQLite의 트랜잭션이 발생하면 journal 파일을 생성하고, 트랜잭션이 성공적으로 완료되면 journal 파일을 삭제한다. 

2. TRUNCATE

SQLite의 트랜잭션이 발생하면 journal 파일을 생성하고, 트랜잭션을 성공적으로 완료하면 journal 파일의 크기를 0으로 만든다. 트랜잭션 완료 이후 journal 파일의 데이터를 zerofill 하지 않고, 파일 시스템의 메타데이터 단위에서 File Size를 0으로 변경한다.
 

3. PERSIST

SQLite의 트랜잭션이 발생하면 이전에 사용했던 journal 파일에 덮어쓴다.

4. OFF

journal 파일을 사용하지 않는다.

5. MEMORY

SQLite의 트랜잭션이 발생하면 journal 파일을 메모리에 생성하고, 트랜잭션을 성공적으로 완료하면 메모리의 journal 파일을 삭제한다. 


 

WAL (Write-Ahead Logging)

WAL (Write-Ahead Logging) 모드는 기본적으로 트랜잭션이 발생하면 wal 파일을 생성한다. 이후에 SQLite의 수정 예정인 Page를 wal 파일에 미리 수정하여 저장한다. 만약 wal파일에 성공적으로 트랜잭션을 완료한 Page의 개수가 1000이 넘어가면 wal파일의 수정된 Page를 SQLite에 커밋한다. wal 모드는 원본 데이터(SQLite)가 수정하지 않기 때문에 예상치 못한 문제로 트랜잭션이 중단되면 SQLite 자체에서 복원작업을 하지 않아도 된다.

 
 

Rollback Journal & WAL  (Write-Ahead Logging) File Structure

파일의 구조는 크게 Rollback Journal or WAL Header와 Frame 영역으로 나뉘고, 각 Frame은 Frame Header와 Backup Page 영역으로 나뉜다.

journal File Structure


Rollback Journal Header

Rollback Journal Header Field

Offset Size (Byte) Info
0x00~07 8 Header Signature
(0xD9 D5 05 F9 20 A1 63 D7)
0x08~0B 4 Page Count
0x10~13 4 Initial Size of DB
(Page 데이터 베이스 초기 크기)
0x14~17 4 Size of Sector
(디스크 섹터 크기)
0x18~1B 4 Size of Page in Journal
(journal 파일 Page 크기)


Rollback Journal Frame

Rollback Journal Frame Field

Offset Size (Byte) Info
0x00~03 8 Backup Page Number
0x04~(n + 3) n Backup Page
(Size == Page Size)
0x(n + 4)~(n +7) 4 Checksum

 
 


WAL Header

WAL Header Field

Offset Size (Byte) Info
0x00~03 4 Header Signature
(0x377F0682)
(0x377F0683)
0x04~07 4 File Format Version
(0x2DE218)
0x08~0B 4 DB Page Size
0x0C~0F 4 Checkpoint Sequence Number


WAL Frame

Rollback Journal Frame Field

Offset Size (Byte) Info
0x00~03 4 Header Signature
(0x377F0682)
(0x377F0683)
0x04~07 4 Size of DB File
(Value * Page Size)
0x18~(n + 17) n Backup Page
(Size == Page Size)

 
 
 
 
 

Pros & Cons

SQLite의 Journaling은 장단점이 존재하며, 각 journal 모드에 따른 장단점도 존재한다.
 

Journaling

장점
 - 안전한 트랜잭션 보장: 시스템 충돌이나 전원 문제가 발생했을 때, 데이터베이스를 이전 상태로 복원할 수 있다.
 
단점
 - 디스크 I/O 증가: 데이터 변경 시 SQLite 파일뿐만 아니라 저널 파일에 추가 기록을 하기 때문에, 디스크 I/O가 두 배로 증가한다.
 
Rollback Journal
장점
 - 구조 단순성: File Format이 단순하다.
 
단점
 - 트랜잭션 동시성 제한: 독립된 트랜잭션 작업을 동시에 수행할 수 없어, 동시에 여러 트랜잭션이 일어나지 않는 애플리케이션(브라우저)에 적합하다.
 
WAL
장점
 - 트랜잭션 동시성 제공: 독립된 트랜잭션 작업을 동시에 수행할 수 있어, 동시에 여러 트랜잭션이 일어나는 애플리케이션(메신저)에 적합하다.
 
단점
- 구조 복잡성: File Format이 복잡하다.
- 많은 디스크 공간 사용: 체크포인트가 발생할 때까지 계속 커질 수 있으므로, 디스크 용량을 많이 차지한다.
- 환경에 따른 성능 차이: 매우 작은 트랜잭션이 빈번하게 일어나는 애플리케이션의 경우 큰 성능저하를 일으킨다.
 
 
아래에 상황에 따른 장단점을 표로 정리하였다.

  Common Rollback Journal WAL
Advantage 안전한 트랜잭션 보장 구조 단순성 트랜잭션 동시성 제공
    신속한 복원
Disadvantage
디스크 I/O 증가 트랜잭션 동시성 제한 구조 복잡성
    많은 디스크 공간 사용
    환경에 따른 성능 차이

 
 
 
 
 

다음 글

[Digital Forensic] SQLite Recovery Analysis

 

[Digital Forensic] SQLite Recovery Analysis

디스크 분석 과정에서 SQLite 분석은 데이터 베이스의 삭제된 데이터나 숨겨진 데이터를 확인할 수 있기 때문에 중요한 과정으로 여겨진다. 본 글은 SQLite의 Record 생성, 삭제, 복구를 분석하는 내

digitalforensicmaster.tistory.com

 

 

 

 

 

Reference

https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE08736972