본문 바로가기

[+] Hacking/[-] Challenge Report

Codegate 2012 Forensic 500 풀이

와 드디어 마지막 문제인 500 문제를 풀었습니다.

미리 스포를 해드리자면 이번 문제는 디스크 포렌식 입니다 :)

일단 문제 지문부터 봐 보죠

This file is Forensic file format which is generally used. 
Check the information of imaged DISK, find the GUIDs of every partition. 

Answer: strupr((part1_GUID) XOR (part2_GUID) XOR ...)


지문은 정말 간단합니다. 문제로 주어지는 파일은 포렌식 파일 포맷이라고 하네요.

이미지의 디스크 정보를 파악하여 파티션의 GUID를 찾으라는 것 입니다.

일단 7z 압축 포맷은 아닌 것 같으니 hex 에디터로 봐 봅시다.

[그림 1 - 문제 파일의 hex]

대부분의 파일의 처음에는 시그니처가 옵니다. 이 파일에도 맨 처음에 어떠한 문자가 오는데 뭔지 모르겠네요...

그래서 구글을 검색했더니 포렌식 도구 중 하나인 EnCase 파일 포맷이라고 하는군요.

처음 접해보는 파일 포맷이라 해당 파일 포맷을 분석한 문서를 읽어 봤습니다.

 - 문서 : http://cdnetworks-kr-1.dl.sourceforge.net/project/libewf/documentation/EWF%20file%20format/Expert%20Witness%20Compression%20Format%20%28EWF%29.pdf 


문서를 읽어보면 엄청나게 많은 테스트를 통해 정보를 산출한 걸 볼 수 있습니다.

해당 문서에서는 문제 파일의 확장자가 EWF, EWF-E01 and EWF-S01에 해당한다고 하는군요.(더 정확히는 EnCase 6에서 생성 된 디스크 증거 파일)

또 header section은 zlib 알고리즘으로 압축되어 있다고 합니다(문서 page 4) 

문제로 제공된 파일에도 문서와 같이 header와 header2가 존재합니다.

 

[그림 2 - 문제파일의 header2]

그럼 일단 header2를 압축해제 해 볼까요?

처음에는 python의 인터프리터로 하였으나 추후에도 계속 압축을 해제해야 해서 따로 스크립트를 작성하였습니다.

[그림 2]에서 음영처리한 부분이 header2가 압축 된 것입니다.

해당 데이터를 따로 바이너리 파일로 만들어 스크립트에 넣어주면 바로 압축이 풀리고 따로 결과물은 파일로 저장 합니다.

[그림 3 - header 압축 해제]

결과 파일과 출력 화면은 보기가 불편하여 문서와 출력 화면을 참고해 따로 정리 해 보았습니다.

[그림 4 - 출력 정리]

각 부분을 문서에서 분석한 걸 참고하여 보면 SSD 디스크를 증거 이미지로 만든 것을 알 수 있습니다.

문서에 보면 volume section이 있는데 해당 문제 파일에도 volume section이 있으니 어떠한 정보가 있는지 압축 해제를 한번 해보자.

[그림 5 - Volume Sectoin]

압축을 해제하면 header section 처럼 출력이 되는데 이를 정리하면 [그림 6]과 같습니다.

[그림 6 - 출력 정리]

header section과 별반 다르지 않다는 것을 알 수 있습니다.

문제 파일의 hex 오프셋을 조금 더 내리다보면 sector 라는 문자열이 보입니다.

그리고 그 뒤로는 지금까지 압축해제 했던 zlib 압축 데이터같은 것들이 보입니다.

파일을 좀 더 살펴보면 파일의 마지막 오프셋까지 내용이 이어져 있는 것을 알 수 있습니다.

이 압축 데이터들이 문제 파일의 내용인 듯 합니다. 이 부분을 압축 해제하여 hex 에디터로 보면 아래와 같은 파일이 보입니다.

[그림 7 - sector 압축 해제]

EFI PART 라는 문자열은 GPT 파티션을 뜻하는 시그니처로 offset 200부터가 GPT 파티션의 헤더 부분인 것을 알 수 있습니다.

문제에서는 파티션을 찾으라고 하였으니 파티션 엔트리를 찾으면 될 것 입니다.

파티션 엔트리는 파티션 헤더 다음부분에 존재하는데 해당 문제의 파티션 엔트리는 다음과 같이 있습니다.

 [그림 8 - 파티션 엔트리]

첫 번째 GUID는 파티션의 타입을 결정 해주는 GUID이기 때문에 문제에서 원하는 GUID와는 조금 거리가 있고, 두 번째 있는 GUID가 문제에서 원하는 GUID일 것입니다.

2B8026604DAD0547B9B1BF81BDD2CAC7 - EFI System Partition
9996F83677E0E046A7FCD7206ECE9F1C - System
69BCD73BDCD8E5489C44FF2A0F26F1CD - Recovery HD
A7CD84F394F63A4EACE7BF40EE99E551  - Secure


문제에서는 이 값들을 XOR 연산하라고 하였으니 아래와 같이 연산하여 주면 답이 나옵니다.

[그림 - 9 XOR 연산]

 - 7C678D9E72633A072EEE28CB32A34147

'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

Codegate 2012 Misc 100 풀이  (2) 2012.03.01
Codegate 2012 Network 300 풀이  (2) 2012.02.29
Codegate 2012 Forensic 400 풀이  (4) 2012.02.28
Codegate 2012 Network 200 풀이  (2) 2012.02.28