이번 코드게이트에는 포렌식 분야가 없을 줄 알았는데, 한 문제가 출제 되었다는 것을 보고 잠깐 풀어 보았다.


역시 점수가 150점이어서 그런지 문제는 상당히 간단하였다. 문제는 역시 확장자가 제거 되어 있는 상태로 풀이자에게 주어진다. 해당 파일이 어떤 파일인지 보기 위해 file 명령으로 확인 해 보면 다음과 같이 data 파일이라고만 알려준다.



조금 더 정확히 알아보기 위해 헤더를 살펴보도록 하자.



Dumpcap 이란 문자열로 해당 파일은 패킷 캡쳐 파일이라는 것을 알 수 있다. 해당 파일은 분석하기 위해 와이어 샤크로 열어보면 다음과 같이 패킷 블록과 관련 된 오류를 출력하며 파일이 정상적으로 열리지 않는다.



오류에서 EPB 부분에 패킷 데이터 길이가 블록의 총 길이보다 크다고 하니 헥스 에디터로 간단히 찾아보면 다음과 같이 캡쳐 길이와 패킷 길이가 맞지 않는 것을 볼 수 있다.



패킷 길이와 캡처 길이를 동일하게 맞추어 수정해 주고 패킷 분석 도구로 읽어보면 다음과 같이 정상적으로 열린다.



패킷 캡쳐 파일 내부에 어떤 파일들이 있는지 확인하여 보면 다음과 같은 파일들이 존재하고, 파일 하나씩 확인 해 보면 키 값을 확인 할 수 있다.








  1. fantas 2014.02.25 15:26

    저기 궁금한게 있는데 저 오류를 보시고 어디를 고치면 되는지 바로 알아내신거 같은데 와이어샤크 파일 주소값에 따른 정보?에 관한 글 같은게 있으신지요??

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2014.02.25 18:37 신고

      오류 문장을 보면 블록의 길이가 이것이어서 에러이다. 라고 나와 있으니 해당 값을 hex 값으로 변환한 후에 파일 포맷에서 지원하는 little endian으로 변경 해 raw 스트림 내에서 찾으면 됩니다 :-)

      그리고, 위 방법이 아니더라도 오류는 어디가 문제라는 것을 알려주는 것이기 때문에 해당 오류문만 잘 읽어보시면 에러가 난 부분을 쉽게 찾을 수 있습니다. 위 문제 같은 경우에는 EPB 부분에 에러가 났다는 것이구요 ㅎ

  2. - 2014.05.13 02:53

    다른건 알겟는데 저기 에러부분에서 EPB부분을 늘려주는 계산을 어떻게 했는지랑.. 저부분은 pcapng파일에서 어떻게 찾으셧는지가 궁금합니다...

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2014.05.13 08:38 신고

      두가지 모두 hex editor로 하시면 됩니다.

      EPB 부분은 구조를 보고 따라가시면 되요 :-)

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

덕분에 코드게이트가 끝나고 열리는 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
pCTF 2013 Forensic 150점 풀이  (0) 2013.04.30
CAT Security Forensic 1 Write-Up  (2) 2012.12.07
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14

+ Recent posts