5. 디지털 포렌식 관점에서의 파일 시스템 분석
- 파일 시스템 상의 삭제 파일 복구
파일을 삭제할 경우, 파일 시스템의 효율을 위해 파일 내용을 초기화하지 않고 관련 플래그만 변경시킨다. 이로인해 Directory Entry 또는 MFT Entry가 덮여 쓰지 않았다면 파일 내용을 복구할 수 있다. 파일 복구 뿐 아니라 메타 정보를 이용해 시간순으로 정렬할 수 있다.
- FAT 파일 시스템 : 데이터 영역의 루트 디렉터리부터 모든 하위 디렉터리를 탐색하면서 오프셋 0x00의 값이 0xE5 갖는 Directory Entry를 찾는다. 찾은 Directory Entry에 대응되는 파일이 삭제된 파일이다.
- NTFS : MFT Entry 0번의 $MFT의 $BITMAP 속성에서 0x00 값을 가지는 MFT Entry를 찾는다 찾은 MFT Entry에 대응되는 파일이 삭제된 파일이다.
- 미할당 클러스터 분석(Unallocated Clusters Analysis)
미할당 클러스터는 메타정보를 통해 접근할 수 없는 클러스터, Directory Entry나 MFT Entry 정보도 남아 있지 않은 영역을 의미한다.
파일이 삭제 되었을 경우 FAT 파일 시스템은 해당 파일의 Directory Entry가 새로운 파일 정보로 덮여 쓰이기 전까지는 Directory Entry를 통해 파일의 내용에 접근할 수 있다. NTFS 또한 해당 파일의 MFT Entry가 새로운 파일로 덮여 쓰이기 전까지는 MFT Entry 정보를 통해 파일 내용에 접근할 수 있다.
미할당 클러스터는 포맷하기 이전의 데이터 또는 할당되었다 삭제된 후 메타 정보가 사라진 데이터가 남아 있다. 운영체제의 할당 알고리즘에 영향을 받기는 하지만 매우 오래 전의 데이터까지 남아 있는 경우가 종종 있다.
- FAT 파일 시스템 : FAT 영역에서 0x00 값을 갖는 Directory Entry를 검색하여 각 Entry 대응되는 클러스터를 찾는다.
- NTFS : MFT Entry 6번의 $Bitmap 파일로부터 할당되지 않은 클러스터를 찾는다.
- 슬랙 공간 분석(Slack Space Analysis)
램 슬랙의 경우 자동적으로 0x00으로 쓰여지므로 특정 데이터가 남아 있을 가능성은 없다. 하지만 파일 슬랙, 파일 시스템 슬랙, 볼륨 슬랙은 해당 클러스터를 사용한 이전 파일의 데이터가 남아있을 가능성이 있다.
슬랙 영역은 운영체제를 통해서는 확인되지 않는 영역이다. 하지만 저수준(Raw-Level)에서는 접근할 수 있기 때문에 의도적으로 데이터를 숨길 수 있다. 최근는 악성코드도 운영체제의 API로 구동되는 바이러스 백신의 탐지를 피하기 위해 슬랙 공간을 사용하기도 한다.
- 파일 슬랙 : 파일에 할당된 클러스터와 실제 크기의 차이를 계산하여 파일 슬랙이 존재하는지 판별한다.
- 파일 시스템 슬랙 : 파일 시스템의 클러스터 크기를 확인하여 파일 시스템 슬랙이 생길 수 있는지 판별한다.
- 볼륨 슬랙 : 볼륨의 전체 크기와 MBR의 파티션 테이블에 할당된 파티션 크기의 합 사이의 차이를 계산하여 볼륨 슬랙이 존재하는지 판별한다.
- 시간 정보 분석(Timestamp Analysts)
저장 매체가 대용량화 되고, 특정 사건이 발생한 시점의 데이터가 증거로 활용 되며 특정 시점이나 시간 흐름으로 사건 분석의 중요성이 커지고 있다.
- FAT 파일 시스템 : 파일들의 Directory Entry 정보를 확인하면 다음의 시간 정보를 확인할 수 있다.
- NTFS : 파일들의 MFT Entry에서 $STANDARD_INFORMATION, $FILE_NAME 속성을 확인하면 다음의 시간 정보를 확인할 수 있다.
- 부트 코드 분석
부트 코드는 MBR과 파일 시스템의 부트 섹터에 있다. 부트 코드의 흐름을 변경하여 앞서 언급한 슬랙 영역에 특정 코드를 삽입한 후 특정 코드 수행 후 다시 부트 코드를 수행하도록 변경할 수 있다.
- MBR : 부트 코드를 해석하여 부팅 가능한 파티션의 시작위치로 점프하는지 확인한다.
- 부트 섹터 : 부트 코드를 해석하여 정상적으로 부트 로더를 로드하는지 확인한다.
- 미사용 영역 분석
미래를 위해 예약해 둔 영역이나 불필요하게 생성된 영역이 존재한다. 이러한 영역들은 범죄자에 의해 의도적으로 실행 코드나 중요한 내용을 저장하는 용도로 사용될 수 있다. 쉽게 파악하기 여려운 부분으로 특정 데이터가 삽입된 흔적이 있는지 파악할 필요가 있다.
- FAT 파일 시스템
ㄱ. MBR과 예약 영역 사이의 미사용 영역
ㄴ. 예약 영역에서 사용하지 않는 섹터 (0, 1, 2, 6, 7, 8번 섹터 제외)
ㄷ. FSINFO 구조체 섹터(예약 영역의 1, 7번 섹터)에서 사용되지 않는 영역
- NTFS
ㄱ. MBR과 예약 영역 사이의 미사용 영영
ㄴ. VBR에서 부트 섹터를 제외한 나머지 섹터
ㄷ. 미래를 위해 예약해 둔 MFT Entry 12-15번 영역
- 은닉 파일 분석
숨긴 파일은 용의자가 의도적으로 데이터를 은닉하기 위한 목적으로 사용하였을 가능성이 있다.
- FAT 파일 시스템 : 파일의 Directory Entry 항목 중 오프셋 11의 Attribute가 0x02 값을 가진다.
- NTFS : 파일의 MFT Entry에서 $STANDARD_INFORMATION 속성의 오프셋 32~35의 Flags가 0x0002 이다.
- 암호 파일 분석
NTFS는 EFS에 의해 파일 시스템 수준에서 암호화 기능을 제공한다. 파일을 암호화는 경우 보통 데이터를 보호하기 위한 목적인만큼 용의자에 의해 중요한 파일들이 암호화될 가능성이 있다.
NTFS에서 암호화 속성을 확인하는 방법이다.
- 파일의 MFT Entry에서 $STANDARD_INFORMATION 속성의 오프셋 32~35의 Flags가 0x4000 이다.
- ADS 파일 분석
NTFS는 하나의 파일이 두 개 이상의 데이터 속성을 가질 수 있는 ADS를 지원한다. ADS 파일들은 운영체제를 통해 확인할 수 없는 만큼 데이터를 은닉하기 위한 목적으로 이용될 가능성이 있다. 실제로 운영체제에서 쉽게 탐지할 수 없는 만큼 ADS를 이용한 악성코드도 존재한다.
- 전체 MFT Entry를 대상으로 $DATA 속성을 두 개 이상 가지는 MFT Entry를 조사한다.
- 로그 정보 분석
NTFS는 파일 시스템의 변경 사항을 기록하기 위한 목적으로 MFT Entry 2번인 $LogFile과 MFT Entry 11번인 $Extend 파일에 포함된 $Extend\$UsnJrnl 파일을 사용한다. 파일의 크기가 제한적이기 때문에 포맷 후 모든 변경 사항을 기록하지는 못하고 최근 작업을 기준으로 저장된다. 따라서 로그 관련 파일을 분석하면 최근 발생한 파일 시스템의 변화 상태를 추적할 수 있다.
- $Boot 파일 분석
NTFS의 MFT Entry 7번인 $Boot 파일의 $DATA 속성에는 부트 섹터의 위치 정보와 부트 코드가 저장되어 있다. 부팅 용도로 사용되지 않는 NTFS에도 해당 속성은 존재하지만 활용되지 않기 때문에 의도적으로 해당 파일의 $DATA 속성에 데이터를 은닉할 수 있다.
- $BadClus 파일 분석
- 파일 시스템 상의 파일 복구
파일 시스템에 파일이 저장될 때 파일의 이름, 시간 정보, 크기 등의 메타 정보가 함께 기록되는데 보통 파일을 삭제할 경우 메타정보와 실제 파일 내용을 초기화하지 않고 단순히 메타정보의 특정 플래그만 변경시킨다. 파일 시스템 상의 파일 복구는 삭제된 것으로 표시된 메타정보를 찾아서 해당 파일을 복구하는 기법이다.
ⅰ. FAT 파일 시스템에서 파일 복구
FAT 파일 시스템은 파일의 메타정보를 유지하기 위해 FAT 영역과 Directory Entry를 사용한다. 파일이 삭제된 경우 FAT 영역에서는 파일에 할당되었던 클러스터에 대응되는 FAT Entry가 0x00으로 초기화된다. 해당 파일의 Directory Entry의 오프셋 0x00의 값이 삭제를 나타내는 0xE5 값으로 변경된다. 이 경우 파일에 할당되었던 클러스터에는 파일의 내용이 그대로 남아 있게 된다. 새로운 파일로 덮여 써지지 않았다면 삭제 표시된 Directory Entry에 파일 크기와 시작 클러스터 정보를 이용하여 비교적 쉽게 파일을 복구할 수 있다. 단, Directory Entry에는 시작 클러스터에 대한 정보만 기록되기 때문에 파일이 여러 클러스터에 조각나 기록된 경우에는 FAT 영역에서 클러스터 체인을 확인할 수 없어 완벽하게 복구하기는 어렵다.
1. 부트 섹터의 BPB에서 데이터 영역, 루트 영역, 루트 디렉터리, FAT 영역의 위치, 클러스터 크기를 얻어온다.
2. \dir1 디렉터리의 정보를 얻기 위해 루트 디렉터리에서 \dir1에 해당하는 Directory Entry를 검색한다. 그 결과 \dir1 디렉터리 정보를 가지는 시작 클러스터가 80번임을 확인했다.
3. 클러스터 80번에서 삭제된 file1.dat 파일의 Directory Entry를 찾는다. 삭제 표시를 위해 파일 이름의 첫 바이트인 0x66('f') 대신 0xE5 값이 기록되어 있다.
4. 삭제된 file1.dat 파일의 Directory Entry에서 파일의 이름, 확장자, 크기, 시작 클러스터의 위치를 확인한다.
5. 시작 클러스터에서부터 파일 크기만큼 데이터를 획득한 후 저장할 위치에 Directory Entry에서 확인한 파일 이름과 확장자로 파일을 저장ㅇ한다.
ⅱ. NTFS에서 삭제된 파일 복구
NTFS에서는 파일의 메타정보를 유지하기 위해 MFT Entry, MFT Entry의 할당상태를 표시하기 위한 $MFT(MFT Entry 0) 파일의 $BITMAP 속성, 클러스터의 할당 상태를 표시하기 위한 $Bitmap(MFT Entry 6) 파일의 $DATA 속성을 사용한다. MFT Entry와 실제 할당되었던 클러스터 내용이 새로운 파일의 정보로 덮여 쓰여지지 않았다면 어느정도의 파일을 복구할 수 있다.
1. VBR의 BPB 정보에서 MFT 시작위치 정보를 얻어 MFT 시작위치로 이동한다.
2. $MFT 파일의 $BITMAP 속성에서 현재 미사용 중인 MFT Entry(0x00 값을 갖는) 정보를 얻어온다.
3. $MFT 파일의 $DATA 속성에서 0x00 값을 갖는 MFT Entry를 대상으로 $FILE_NAME 속성의 파일 이름이 "file1.dat"를 가지는 MFT Entry를 찾는다. 그 결과 MFT Entry 301번이 해당 파일의 MFT Entry 임이 확인되었다.
4. MFT Entry 301번의 $FILE_NAME 속성에서 파일 크기를 확인하낟. 그리고 $DATA 속성을 확인한 결과 Non-resident 속성임이 확인되었다. 따라서 Cluster Runs 정보를 기반으로 파일 크기만큼 데이터를 획득한다. 획득한 데이터를 저장할 위치에 앞서 확인한 파일 이름으로 파일을 저장한다.
- 파일 카빙
: 저장 매체의 미할당 영역으로부터 파일을 복구하는 기법
저장 매체의 공간 할당에 따라 연속적인 카빙(continuous carving) 기법과 비연속적인 카빙(fragment recovery carving) 기법으로 나눌 수 있다.
연속적인 카빙 기법은 파일 내용이 저장 매체의 연속된 공간에 저장된 경우 수행하는 카빙기법이다.
비연속적인 카빙 기법은 파일의 내용이 저장 매체의 여러 부분에 조각나 저장된 경우에 수행하는 카빙 기법이다.
여기서는 연속적인 카빙 기법만 설명한다.
ⅰ. 시그니처 기반 카빙
파일 카빙은 파일의 메타정보를 이용하지 않기 때문에 파일의 고유한 특성을 이용해 복구해야 한다.
시그니처 기반 카빙 기법은 파일 포맷별로 존재하는 고유한 시그니처를 이용하는 방법이다.
파일의 시작 부분에 위치하는 헤더(Header) 시그니처와 파일의 마지막에 존재하는 푸터(Footer) 시그니처가 있다.
일부 파일 포맷을 보여준 것이다. 하지만 파일 구분하는 시그니처의 크기가 작거나 일반적인 경우 파일 내용의 바이트 스트림에서도 같은 값이 존재할 가능성이 있기 때문에 많은 오탐이 발생할 수 있다.
ⅱ. 램 슬랙 카빙
램 슬랙은 파일의 내용을 디스크에 기록할 때 파일 크기가 512 byte의 배수가 되지 않아 0x00으로 채워지는 영역을 의미한다. 파일의 푸터 시그니처 이후에 램 슬랙이 존재하게 된다. 시그니처 기반 카빙 기법에서 푸터 시그니처와 함께 램 슬랙을 확인하면 오탐을 줄일 수 있다.
ⅲ. 파일 구조체 카빙
파일의 미리보기를 지원하는 파일의 경우 파일 포맷 내부에 실제 내용 이외에 썸네일(Thumbnail)을 포함한다. 썸네일도 해당 파일의 포맷과 동일한 구조로 되어 있기 때무에 전체 파일 포맷에 시그니처가 둘 이상이 존재하게 된다. 푸터 시그니처가 존재하지 않거나 파일 포맷 내부에 여러 개의 시그니처가 존재하는 경우 효과적으로 파일의 구조를 분석하여 카빙한다.
ㄱ. 파일 크기 획득 방법
대부분의 파일은 해당 데이터 표현을 위해 파일의 앞부분에 파일 구조체가 위치한다. 파일 구조체 내부에는 파일 시스템의 파일메타정보와 유사하게 해당 파일의 크기, 형식 등이 정보가 포함된 메타정보가 저장된다. 파일 크기 획득 방법은 파일 구조체 내부에서 파일 크기 정보를 획득하여 카빙하는 기법이다.
파일 크기 획득 방법을 적용할 수 있는 파일 포맷과 시그니처 예이다.
ㄴ. 파일 구조 검증 방법
문서파일과 같이 빈번한 수정이 이루어지는 경우 데이터 표현을 위해 고유한 계층구조를 사용하는데 이러한 계층 구조를 검증하여 카빙하는 방법이다.
모든 구조를 검증하기 위해서는 많은 시간이 필요하고 이러한 시간은 전체적인 파일 카빙 속도에 나쁜 영향을 미치므로 속도에 큰 영향을 미치지 않는 범위에서 적용해야 한다.
'Digital Forensics > Pre Digital Forensic' 카테고리의 다른 글
윈도우 시스템 조사 (0) | 2017.01.19 |
---|---|
디지털 증거의 무결성 유지 기술 (0) | 2017.01.18 |
파일 시스템과 파일 복구 III - NTFS (0) | 2017.01.09 |
파일 시스템과 파일 복구 II - FAT 파일 시스템 (0) | 2017.01.05 |
파일 시스템과 파일 복구 I (0) | 2017.01.03 |