본문 바로가기

정보보안/Forensic

[정보보안][포렌식] File Signature의 분석과 손상 복구

728x90

1. File Signature

  • 파일의 가장 처음에 위치하는 특정 바이트 (정체성을 나타냄)
  • 파일의 첫 4bytes에 주로 표시 ( 일반적으로 부가정보 포함 16bytes 정도)
  • Magic Number라고도 함
  • 파일 포맷을 구분하기 위해 사용
  • 아래 사이트에서 여러 파일의 시그니처를 볼 수 있다.
  • http://forensic-proof.com/archives/300
 

파일 시그니처 모음 (Common File Signatures) | FORENSIC-PROOF

 

forensic-proof.com


2. 자주 쓰는 File Signature

 

1. PNG : 89 50 4E 47 0D 0A 1A 0A

2. PE (Portable Executable) : 4D 5A (MZ : Mark Zbicowski)

3 ZIP, APK, docx/pptx/xlsx : 50 4B 03 04 (PK : Phil Katz)

4. PDF는 '%PDF-버전'으로 시작 ---> 구글 검색


3. File Signature 복구

 

1. Hex Editor 열기

 

Mannayo 라는 파일이 있다.

 

무슨 파일일까? 어디서 만난다는 것일까?

 

Mannayo

 

우선 앞의 4bytes를 구글에 검색해보자.

 

7z

 

7z 파일시그니처의 앞부분이 사라진 것을 알 수 있다.

 

따라서 사라진 부분을 채워주면 되겠다.

 

7z 확장자를 추가하고 압축을 풀어주니

 

yogi라는 파일이 생성됐다.

 

yogi

 

이번엔 무슨 파일일까

 

옆의 Text 부분을 보면 IHDR이라는 부분이 있다.

 

IHDR은 PNG 파일의 맨 앞에 위치하는 청크다.

 

그렇다면 이 파일은 PNG파일이고 PNG파일의 시그니처를 추가해주면 되겠다.

 

그리고 확장자를 바꿔주면

 

PNG

 

갤러리아백화점에서 만난다는 것을 알 수 있다.

 

다음은 조금 더 어려운 문제를 살펴보자.

 

Recme.zip 이라는 파일이 있다.

 

Recme.zip

 

일단 zip파일은 맞을까?

 

파일에는 3가지 시그니쳐 부분이 있다.

 

1. Local File Header

 

- Local File Header 부분은 압축파일에 대한 기본 정보들이 포함되어 있다.

- 압축 전후 파일 크기, 파일 수정 시간, CRC-32 체크섬

- 파일 이름의 지역포인터, 압축 해제시 필요한 아카이브 버전 등의 정보가 있다.

 

File Name? 
-> 압축된 파일 이름 형식에 대해 임의의 길이와 바이트 순서를 나타냄
-> 임의의 길이로 구성된 바이트 배열 형태로 압축된 파일 컨텐츠
-> 비어있거나 디렉토리를 포함하는 경우 사용 안함

 

Local File Header

 

2. Central Directory

 

- Central Directory 부분은 Local File Header 의 확장된 부분이다.

- Local File Header의 데이터와 더해, 파일 속성, 구조에 대한 로컬 기준을 가진다.

 

Central Directory

 

3. End of Central directory Record

 

- ECDR 부분은 모든 아카이브의 싱글 템플릿으로 제공되며

- 아카이브의 종료를 작성한다.

- 포함된 데이터 중 가장 중요한 데이터는

- Central Directory 블록의 시작과 로컬 참조의 시작, 아카이브 레코드들의 숫자다.

 

ECDR

 

자 이제 어느정도 정리가 되었다면, 다시 Recme로 돌아가보자.

 

이 파일의 앞부분 (c5 59 6d 6f)은 구글링 해도 좀처럼 나오지 않는다.

 

그럼 파일의 ECDR 부분을 찾아가보자.

 

ECDR

 

파일의 이름이 Begging.py인가보다.

 

ECDR이 PK..로 시작되는 것을 보니 ZIP파일임을 추정할 수 있고

 

그 위에는 Central Directory의 PK도 보인다.

 

그럼 Central Directory가 Local File Header의 확장된 버전이므로

 

Central Directory가 손상되지 않았다는 가정하에

 

Local File Header에 필요한 부분만 추출하여 복구할 수 있겠다.

 

Central

 

Central Directory는 File name으로 끝난다는 것을 알면

 

쉽게 특정할 수 있다.

 

이제 Central Directory와 Local FIle Header 구조를 비교하며

 

Local File Header에 필요한 부분을 옮겨보자.

 

물론 ZIP파일의 Central Directory는 50 4b 01 02로 시작하고

 

Local FIle Header는 50 4b 03 04로 시작한다는 것을 알고 있어야 한다.

 

Recovery

 

File SIgnature부터 Version 정보, CRC, File Name까지 복구 하고나면

 

Begging.py

 

파일이 정상적으로 압축 해제된다.

728x90