Forensic APFS File Recovery

목적

1.
APFS 에서의 다른 파일 복구 방법
2.
AFRO라는 파일 리커버리 툴 제작
3.
툴 제작에 사용한 테스트셋 설명
4.
툴들 비교
→ 아마 1번이 제일 중요하겠다.

APFS 구조 관련 자료

→ 어마어마한 설명이 있는건 아니지만 HFS 랑 비교하는 차원에서 참고할만 하다
Container Superblock
Offset
Size
Type
ID
0
4
str
Signature "NXSB"
4
4
u4le
block size
80
8
u4le
xp_desc_base
104
4
u4le
xp_desc_index
108
4
u4le
xp_desc_index_len
128
8
u8le
omap_oid
152
4
u4le
max_file_systems
160
...
u8le
fs_oid
중요한 것은 omap_oid 랑 fs_oid 이다.
omap_oid 는 OMAP 까지의 블록 단위의 오프셋을 저장한 것이다.
그 다음부터는 fs_oid 가 모든 나머지 OID 값들을 저장하고 있다.
Container OMAP
B-Tree 이다. 트리 형태의 자료구조이므로 여러 노드들을 포함한다.
Container OMAP Node
이부분 이해가 잘 안감. 좀더 이해해서 추가하는걸로....
Volume Superblock
Root Tree

APFS 파싱

설계상의 특징으로 인해 이전의 데이터나 지워진 데이터를 복구할 수 있다고 함
Container SuperBlock 이 다음 SuperBlock을 참조하고 있고, 이는 이전 상태를 저장하고 있음을 의미한다.
1.
Parse Container SuperBlock
2.
Parse container OMAP
3.
Parse container OMAP Node
4.
Parse Volume Superblock
5.
Parse Volume OMAP
6.
Parse Volume OMAP Node
7.
Parse Root Tree
8.
Parse Previous Container Superblock
이와 같은 순서를 따라갔을 때 이전 Container Superblock을 따라갈 수 있는것 같다. 그럼 동일한 방법으로 이제 노드들을 보면 이전 데이터를 복구할 수 있는 것이다.

복구기법

1.
Signature Based File System metadata carving
2.
Heuristic File System metadata carving

후기

전체적인 APFS 구조가 어떻게 되어있고, 파일 참조는 어떻게 하는지, 이전 데이터들은 어떻게 관리하는지를 알 수 있었다. 이 부분을 좀더 숙지하면 디포챌 문제도 잘 풀었을거 같은데 좀 아쉽다.