본문 바로가기

[+] Hacking/[-] Challenge Report

Codegate 2012 Forensic 400 풀이

풀다 보니 벌써 400점 문제네요 :)

이번 문제의 지문부터 봐 볼까요?

In Energy corporate X which is located in Seoul, APT(Advanced Persistent Threat) was occurred. 
For 6 months, Attacker A has stolen critical information with an elaborate attack. 
Attacker A exerted great effort to remove his all traces such as malicious file, prefetch, registry and event logs for the period of attacking, so it was hard for Energy Corporate X to find an attacking path. However IU who is Forensic expert can find the traces of the malicious files Attacker A used by analyzing MFT(Master File Table). 
What time malicious file was created? The time is based on Korea Standard Time(UTC +09:00)

Answer: YYYY-MM-DDThh:mm:ss.sTZD 
(TZD : +hh:mm or -hh:mm). Calculate down to seven decimal points. (e.g. 2012-02-25T10:20:33.1234567+hh:mm)

 
지문을 번역하면 이렇습니다.

서울 소재의 에너지 회사 X는 APT 공격을 당하여 6개월동안 문서를 범죄자에게 빼앗겼다고 합니다.

범죄자는 자신이 사용한 악성파일, 프리패치 파일, 레지스트리 이벤트로그 등을 지우려고 노력을 했다는군요

하지만 Forensic expert 아이유(!)가 MFT 파일을 분석하여 악성파일의 흔적을 찾았다고 합니다.

그 악성파일의 생성 시간은 무엇일까요? 라고 물어보는군요.

문제로는 역시 7z 압축포맷의 파일이 주어지고 압축을 해제하면 $MFT 파일 하나가 떨어집니다.

일단 문제부터 잘 이해해야 합니다. $MFT 메타데이터 파일은 본래 파일과 디렉토리의 엔트리를 가지고 있기 때문에 그 양이 방대합니다.

일단 문제에서는 굳이 언급하지 않아도 될 프리패치를 언급하고 있습니다.

대부분 흔적으로는 로그나 레지스트리 정도만 언급하니까요.

프리패치는 윈도우에서 어플리케이션 속도 향상을 위하여 생성하는 파일인데 이 파일은 어플리케이션이 한번이라도 실행 되면 생성되는 파일 입니다.

즉! 악성코드 파일은 실행파일 이라는 것을 알 수 있습니다.

또, 범죄자가 악성파일을 지웠다니 시스템에는 악성파일이 남아 있지 않을 것 입니다. 하지만 악성파일의 MFT 엔트리는 남아있을 것이므로, 아이유는 이러한 생각으로 $MFT 파일을 분석하였을 것 입니다.

그렇다면 우리도 $MFT 파일에서 exe 파일을 찾으면 됩니다.

찾다보면 검색 결과가 여러개 되는데 그 중 r32.exe가 가장 의심스럽습니다.(다른 exe 파일들은 정상적인 파일로 보일만큼 이름이 직관적)

그런데 r32.exe 검색 결과가 두 군데 입니다. 하나는 휴지통 폴더에 있는 r32.exe의 엔트리이고, 또 하나는 원래의 r32.exe 엔트리입니다.
 

 [그림 1 - 휴지통 폴더에 있는 r32.exe 엔트리 오프셋]

 [그림 2 - 원본 r32.exe 엔트리 오프셋]

파일이 언제 생성 되었느냐고 문제에서 물었으니 삭제 되기 전 엔트리인 [그림 2]의 엔트리를 분석해야 합니다.

(사실 두 엔트리의 생성 시간은 똑같습니다.)

[그림 2]의 엔트리에서 왼쪽 빨간 박스가 생성시간입니다.($FILE_NAME 속성의 생성 시간 부분)

이걸 간단한 스크립트로 변환하여 주면 아래와 같이 결과가 나옵니다.

 

[그림 3 - timestamp convert 결과]

문제에서는 [그림 3]의 날짜와 .뒤에 있는 7자리까지 원했으니 답은 아래와 같이 됩니다.

 - 2012-02-22T17:39:18.8974600+09:00 또는 2012-02-22T17:39:18.897460009:00

의외로 점수치고는 간단한 문제였습니다. 한가지 팁을 드리자면, 더 간단하게 풀려면 $MFT 분석 도구를 이용하시면 됩니다.

analyzeMFT 라는 툴이 있는데 python 기반으로 작성 된 것입니다. 해당 툴을 사용하면 텍스트파일이나 csv 파일로 결과물을 출력하여 주는데 이 출력물에서 자신이 원하는 파일의 이름만 검색하면 엔트리의 모든 정보를 알아 낼 수 있습니다.

[그림 4 - analyzeMFT 분석 결과]
 

흠 근데 정말 이상하네요. 제가 계산한 타임스탬프 값이 .000001 차이가 나네요...

지금 막 인증을 시도 해 봤는데 답이 아니군요..... 푸는 과정은 맞는 것 같은데 시간 값을 잘못 구한 것 같네요

무엇이 문제인지 이거 참 ㅋ 

이제보니 UTC시간으로 바꾸어 주질 않았네요....

 - 2012-02-23T02:39:18.8974610+09:00

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

Codegate 2012 Network 300 풀이  (2) 2012.02.29
Codegate 2012 Forensic 500 풀이  (2) 2012.02.29
Codegate 2012 Network 200 풀이  (2) 2012.02.28
Codegate 2012 Forensic 300 풀이  (0) 2012.02.27