본문 바로가기

[+] Hacking/[-] Challenge Report

pCTF 2013 Forensic 150점 풀이

요즘은 시험때문에 이것저것 너무 바쁜 날들을 보낸 것 같다. 개인적으로 하는 일이 시험만 있는게 아니라서 더더욱 그랬던 것 같다.

덕분에 코드게이트가 끝나고 열리는 pCTF에 참여조차 하지 못하였다... 그래서 그 한을 풀고자 쉘 스톰에서 문제를 받아 한번 풀어보았다. 그런데! 쉘 스톰에 보니 포렌식 문제가 두 문제밖에 없는 것이 아닌가!!! 이번년도 데프콘에서는 포렌식 문제가 출제되지 않는다고 하고 외국에서는 점점 포렌식을 홀대하는 것 같다는 느낌이 든다.

문제를 풀기전에 이야기를 들었을 때는 대회 당시 푼 팀이 몇팀 없다고 들어 두 문제중 그나마 점수가 낮은 150점 문제를 풀어보기로 했다. 아래는 문제의 지문이다.


"Meow meow mw mw m.


음.. 장난치는건가? find the key 보다 더 한 지문 같다고 개인적으로 생각한다. 아무튼 문제를 다운받아보면 rar 압축이 되어 있는 것을 확인 할 수 있고 압축을 풀면 바이너리 파일(cat.rar.bin)과 jpg 파일(cat.rar.jpg)이 함께 나온다.


일단 어떤 프로그램인지 알아야 하므로 바이너리 파일을 실행 해 보았다. 



[그림 1 - 문제 파일은 64bit 바이너리!]


아뿔싸! 나는 요즘 학교 실습 환경에 노트북을 세팅하느냐고 64bit 리눅스가 없다.. 그렇다고 이 문제를 풀기 위해 설치하는 것도 싫어 일단 strings로 어떤 프로그램인지 확인 해 보았다.


[그림 2 - steghide의 help 내용]


이제 어느정도 문제의 풀이 방향이 보이는 듯 싶다. steghide 파일은 스테가노그래피에 사용되는 툴이니 아마도 jpg 파일에 키 값이 숨겨져 있을 것이다. 또 여기서 주의해야 할 점은 바이너리 파일이 이런 힌트를 주려고 제공되었다고 생각하면 안된다는 것이다. 또 주어진 바이너리 파일을 이용 해 스테가노그래피를 풀라고 문제 출제자들이 친절히 바이너리 파일을 제공하지 않았다는 것도 주의해야 한다.

문제르 풀기위해서는 필연적으로 바이너리 파일을 분석해야만 했다. 일단 인터넷에 배포되고 있는 툴인 만큼 제공된 steghide 툴과 인터넷에서 배포되고 있는 정상적인 steghide 툴을 비교해 볼 필요가 있다. 비교해 본 결과 약간의 다른점을 찾아냈다.

먼저 정상 steghide의 내용을 보면 다음과 같은 내용들이 반복되어 있다.


[그림 3 - 정상 steghide 내용]


다음은 대회에서 제공 된 steghide 파일이다.


[그림 4 - 제공 된 steghide 내용]


한눈에 봐도 steghide 파일 내용이 다르다는 것을 알 수 있다. 정상파일은 일정한 패턴이 반복되는 반면에 제공 된 파일에서는 여러 패턴이 나타나는 것을 볼 수 있다. 무언가 데이터가 추가되었거나 데이터가 수정되었다는 것을 의미하므로 포렌식 문제에 걸맞게 카빙을 시도해 보았다.

foremost로 카빙을 시도 했을 때 일반 파일 몇개가 카빙되었지만 사실 별 볼일 없는 파일들이어서 foremost에서 기본적으로 지원하지 않는 압축파일들을 상대로 카빙을 시도해 보았다. 그 결과 파일이 하나 카빙되었다.


[그림 5 - 카빙 된 zlib 파일]


이제 zlib의 압축을 해제해야 한다. 간단하게 python에서 제공하는 zlib.decompress() 함수를 사용 해 압축을 해제 하자.


[그림 6 - decompress]


[그림 7 - 파일 종류 확인]


파일 종류를 확인 해 보니 wav 파일이다.


unzlib.wav1


들어보면 무언가 빠르게 말을 하는데 영어를 잘 하지 못해 here라는 단어만 정확하게 들려 해당 단어를 혹시나 하는 마음에 두 steghide 파일에서 검색해 보았다. 검색해 본 결과 정상 steghide 파일에는 없고 문제에서 제공 된 steghide 파일에만 존재하는 문자열이 존재하고 있었다.


 - the passphrase cannot be pills here.


문장의 의미 또한 프로그램 성격과는 맞지 않는 문장인 듯 싶다. passphrase 단어는 steghide에서 많이 사용되므로 pills 단어를 추가로 검색해 보았다.


 - pills_wav_len

 - pills_wav_zliblen

 - _GLOBAL__I_pills_wav_len

 - pills_wav_zlibdat


여러 단어들이 나오는데 아마 문제 출제자가 wav 파일에 대한 힌트로 넣어둔 것이 아닐까 생각이 든다.

무튼 wav 파일을 들으면 이제는 pills here 라고 어느정도 들리게 된다. pills here 가 들어간 "the passphrase cannot be pills here." 문장을 키 값으로 하여 wav 파일과 jpg 파일을 steghide 툴로 돌려보자.


root@SIFT-Workstation:/home/sansforensics/Desktop# steghide extract -sf cat.rar.jpg -p "the passphrase cannot be pills here."

wrote extracted data to "part1.txt".

root@SIFT-Workstation:/home/sansforensics/Desktop# steghide extract -sf unzlib -p "the passphrase cannot be pills here."

wrote extracted data to "part2.txt".

root@SIFT-Workstation:/home/sansforensics/Desktop# cat part1.txt 

st3g0_suck5_need

root@SIFT-Workstation:/home/sansforensics/Desktop# cat part2.txt 

s_moar_reversing

root@SIFT-Workstation:/home/sansforensics/Desktop# 


두 값을 이어보면 st3g0_suck5_needs_moar_reversing로 문장이 완성된다. 형태로 보아 키 값인듯 하다.


key : st3g0_suck5_needs_moar_reversing





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

[SharkFest Challenge] #1 Write up  (0) 2013.09.08
OverTheWire Natas All Clear  (0) 2013.06.24
CAT Security Forensic 1 Write-Up  (2) 2012.12.07
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14