본문 바로가기

[+] 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 500 풀이  (2) 2012.02.29
Codegate 2012 Forensic 400 풀이  (4) 2012.02.28
Codegate 2012 Network 200 풀이  (2) 2012.02.28