CTF | wargame

codegate 2012 - forensic 500 (EVF 파일 분석, GPT파티션 분석)

nopdata 2017. 3. 30. 01:47
keyword : EVF 파일 분석, GPT파티션 분석

지문은 이전 문제에 비하면 상당히 간단하다. 그냥 디스크 정보, GUID등을 확인하라고 한다. 하지만 제공되는 파일이 EVF파일이다.
EVF 파일이란 Encase에서 사용하는 파일 포맷이라고 한다. Encase를 보유하고 있을리 없기 때문에 직접 이 파일 포맷에 맞추어 분석을 해야 한다.

EVF를 이해할 겸 파싱 소스코드를 파이썬으로 작성하였다. 파일 포맷정보는 위키를 참조하였다.



사용법은 위와 같다. EVF에는 header, volume, sector등의 중간 시그니쳐가 있고, 그에 해당하는 데이터가 있다.
이 문제를 풀기에 필요한 위 세 옵션에 대해서만 작성을 하였다. 전체적인 정보는 result.txt로 추출이 되며 다음과 같다.

header2 2개, header 1개, volume, sector가 파싱된 것을 확인할 수 있다.  sectors데이터가 매우 큰 것을 확인할 수 있는데, 실제 SSD를 encase를 통한 이미징 작업 후에, 문제 출제를 위해 데이터를 줄였을 것이다.
header의 정보는 각각 headern.txt파일로 추출이 되며 다음과 같다.

header

header2

위 정보를 보고 파악을 하면 된다. 각 넘버에 해당하는 정보는 다음과 같다.


Window7이 설치된 SSD를 대상으로 이미징이 진행 된 것을 파악할 수 있다.
문제에서 각 파티션의 GUID를 알아내서 xor연산을 진행하라고 하였다. 파티션 정보는 디스크 내용에 포함이 되는데 이는 sectors를 분석을 해 주면 된다.


sectors정보는 sectorsn.txt로 추출이 되며 위에서는 하나만 있었으므로 sectors1.txt를 보면 된다. 보면 1번섹터에 EFI PART라는 문구를 볼 수 있다. 이는 GPT파티션에 적용되는 시그니쳐이다.
GPT의 파티션 정보는 2번째 부터 존재한다. FAT파일시스템으로 일반 파티션이 하나 잡혀있으나, 문제의 답으로 구해야 하는 파티션은 총 4개이다.
FTK나 R-Studio의 경우, 사용자가 사용가능한 일반 파티션만 보여주므로 나머지는 직접 알아내야 한다.
GPT의 파티션 정보는 http://gedor.tistory.com/1에서 참고를 하면 된다.

2번 섹터를 보면 위와 같다. GPT의 각 파티션은 128bytes를 사용한다.(무조건적으로 고정은 아니다.)
따라서, 4개의 파티션을 확인할 수 있으며 GUID와 파티션명을 구하면 다음과 같다.

     2B 80 26 60 4D AD 05 47 B9 B1 BF 81 BD D2 CA C7     EFI System Partition
     99 96 F8 36 77 E0 E0 46 A7 FC D7 20 6E CE 9F 1C      System
     69 BC D7 3B DC D8 E5 48 9C 44 FF 2A 0F 26 F1 CD     Recovery HD
     A7 CD 84 F3 94 F6 3A 4E AC E7 BF 40 EE 99 E5 51     Secure

구하면 위와 같이 나온다. 이제 이 값들을 xor연산을 시켜 주면 답을 얻을 수 있다.
     
Answer : 7C678D9E72633A072EEE28CB32A34147

ref