Forensic/Forensic 이론

파일 카빙(Carving)

Ron Weasley 2022. 1. 27. 17:10

이번 파일 카빙에 대해서 배워보겠습니다.

파일 카빙이란 메타 데이터가 아닌 파일 자체의 바이너리 데이터(signature, header)를 이용해서 디스크의 비할당 영역에서 파일을 복구하는 방식입니다.

 

주의해야 할 점은 파일이 디스크에 연속적으로 할당되었는지, 비연속적으로 할당 되었는지 알아야합니다.

 

*연속 할당

  임의의 한 파일이 디스크 내에 선형적으로 연속된 블록을 할당합니다. 장점은 연속하는 논리적 블록들이 물리적으로 인접해 있기 때문에 빠르게 엑세스가 가능하고, 디렉토리가 단순히 시작 블록 주소와 파일의 길이만 알고 있으면 디렉토리 구현의 단순화가 가능합니다. 단점은 새로운 파일을 생성할 때 필요한 공간을 미리 명시를 해주어야 하며, 연속된 공간이 확보되지 않으면 생성이 불가능합니다. 일정 파일이 할당될 때, 공간을 미리 할당받는다고 했는데, 미리 할당된 공간보다 파일이 커지면 파일이 들어갈 수 있는 새로운 영역을 찾아 옮겨야 합니다.

 

*비연속적 할당

  임의의 한 파일을 위해 디스크 내에 산재된 블록을 연결해서 할당합니다. 블록이 디스크 내에 아무대나 있어도 액세스가 가능합니다. 구현 방법으로는 연결 할당, 색인 할당, 간접 색인이 있습니다. 비연속 할당의 단점은 아무래도 파일이 분할되어 저장이 되어 있기 때문에 검색을 하는데 연속 할당보다 시간이 더 소요되며, 포인터를 이용해 다음 데이터의 위치를 저장해주기 때문에 잘못된 포인터 값을 가지게 되면 데이터를 소실될 수 있습니다.

(다음에 자세히 포스팅 하겠습니다)

 

본론으로 가 파일 카빙은 크게 5개로 나뉩니다. 

시그니처 기반 카빙, 램 슬랙 카빙, 파일 구조체 카빙, 파일 크기 획득 방법 기반 카빙, 파일 구조 검증 방법 카빙

하나씩 살펴보겠습니다.

 

시그니처 기반 카빙

  시그니처 기반 카빙은 단순합니다. 파일 카빙은 메타 데이터를 이용하지 않고 파일의 특성을 가지고 복구를 해야합니다. 그래서 각 파일마다 고유 시그니처가 존재하는데, 이 시그니처를 기반으로 파일을 카빙 하는 것입니다.

시그니처에는 헤더(Header) 시그니처와 푸터(Footer) 시그니처가 존재하는데, PNG파일을 예로 설명하자면 헤더 시그니처와 푸터 시그니처는 다음과 같습니다.

이처럼 파일에는 헤더 시그니처와 푸터 시그니처가 존재합니다. 그렇다고 모든 파일에 존재하는것은 아니기 때문에 헤더 시그니처와 푸터 시그니처가 존재하는 파일 포맷만 따로 보겠습니다.

 

램 슬랙 카빙

  램 슬랙을 이야기 하기 전에, 슬랙이란 단어부터 설명을 하자면 슬랙 공간은 저장매체의 물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비되는 공간입니다. 즉, 물리적으로는 할당된 공간이지만 논리적으로는 사용할 수 없는 공간을 의미합니다.

 

램 슬랙은 램에 저장된 데이터가 저장매체에 기록될때 나타나는 특성에 따라 붙여진 이름인것을 알 수 있고, 클러스터나 블록으로 논리적인 섹터의 모음을 통해 데이터를 할당한다고 하더라도 물리적으로는 섹터(512Byte)  단위로 데이터가 기록됩니다. 섹터 단위로 처리되는 이유는 저장매체의 특성 때문입니다.

 

즉, 클러스터가 2048Byte일때, 700Byte의 파일을 기록한다고 가정해봅시다. 해당 파일의 물리적인 크기는 클러스터 크기 만큼 2048Byte가 할당됩니다. 이때 우리는 클러스터에서 파일의 크기인 700Byte만 채워지는 줄 아시겠지만, 실제로는 섹터 2개 크기만큼 저장됩니다. 즉, 섹터가 1 2 3 4일때, 첫번째 섹터에는 700Byte에서 512Byte만큼 기록되고,  두번째 섹터에는 188Byte만 기록이 됩니다. 그럼 두번째 섹터에서 남은 길이인 약 330Byte는 0x00으로 채워집니다. 이처럼 램에 데이터가 저장매체에 기록될 때 섹터 단위로 기록되는 특징으로, 나머지 부분이 0x00으로 채워지는 특징을 램 슬랙이라 합니다.

 

파일 구조체 카빙

  파일의 미리보기를 제공하는 파일에는 실제 내용 이외에도 파일 포맷에 썸네일을 포함합니다. 썸네일도 해당 파일의 포맷과 동일한 구조로 되어 있어, 전체 파일 포맷에 시그니처가 둘 이상 존재하게 됩니다. 파일 구조체 카빙 기법은 헤더 시그니처는 존재하지만 푸터 시그니처가 존재하지 않을 때 파일 포맷 내부에 존재하는 여러개의 시그니처를 보고 구조를 분석하는 기법으로 통하고 있습니다. 파일 구조체 카빙 안에서 파일 크기 힉득 방법과 파일 구조 검증 방법으로 나눌 수 있습니다.

 

파일 크기 획득 방법

  대부분의 파일은 해당 데이터 표현을 위해 앞부분에 파일 구조체가 위치합니다. 파일 구조체 내부에 파일의 메타데이터가 포함되어 있고, 파일 크기 획득 방법은 파일 구조체 내부의 파일 크기 정보를 획득하여 카빙하는 방법입니다.

파일 크기 획득 방법을 적용할 수 있는 파일 포맷을 보겠습니다.

파일 구조 검증 방법 기반 카빙

  문서 파일과 같이 빈번한 수정이 이루어 지는 경우에 데이터 표현을 위해 고유한 계층 구조를 사용하는데, 파일 구조 검증은 이렇게 계층 구조를 검증해서 카빙하는 방식입니다. Microsoft의 복합문서나 압축 파일(ZIP) 등은 계층 구조로 각 계층마다 고유한 시그니처가 있습니다. 따라 파일의 시작위치를 지정하고 계층 구조를 확인하면서 옳바르게 된 구조라면 정상적인 파일이라 판단을 할 수 있습니다.

그리고 한가지 더 말씀드리면 위 시그니처 카빙에서 ZIP, ALZ, RAR파일도 적어놨는데, 파일의 계층 구조에서 가장 먼저 나오는것이 헤더 시그니처로 담았고, 마지막에 나오는 계층 구조를 푸터 시그니처로 담았습니다. Zip구조를 살펴보시면 Local File Header -> Central Directory File Header -> End of Central Directory File Header로 구성되어 있는데 Local File Header가 50 4B 03 04로 시작을 하고, End of Central Directory File Header가 50 4B 05 06으로 시작합니다.

 

지금까지 파일 카빙에 대해서 배워봤는데, 부족한 부분이 있다면 언제든지 댓글로 남겨주시면 수정하겠습니다.

'Forensic > Forensic 이론' 카테고리의 다른 글

웹 브라우저 포렌식  (3) 2022.07.03
반도체를 이용한 저장매체  (0) 2022.03.31
해쉬 함수 (Hash Function)  (0) 2022.01.20
데이터 인코딩(Data Encoding)  (0) 2022.01.18
문자(Characters) 인코딩  (0) 2021.12.24