본문 바로가기

[+] Hacking/[-] Challenge Report

RootBSD Forensic Challenge 풀이

Google에서 포렌식 Challenge 목록을 크롤링 중 소규모 Forensic Challenge를 발견하였다. RootBSD 라는 곳에서 주최한 대회로 2010년에 열린 것 같다. 문제의 난이도는 쉬운 편이며, 참가 인원은 30팀 정도 된다고 한다. 대회 방식은 질/답 형식이 아닌 flag 값을 제일 먼저 정확하게 찾아 주최측에 메일로 인증을 받는 형식이다. 찾아야 할 해쉬 값은 총 10개이며 10개 모두 찾아 이메일로 한번에 보내야 한다.


문제 난이도는 어렵지 않으니 훑어 보기만 해도 될 것이다.


일단 문제 파일을 받아보면 tar.gz로 압축되어 있는데 압축을 해제 해 보면 [그림 1]과 같은 디렉토리들이 보이는 걸 확인 할 수 있을 것이다.



[그림 1 - 문제 목록]


각 디렉토리에 있는 파일들을 분석하여 해쉬 값을 찾아내는 것이 목표이니 Documents 디렉토리를 시작으로 하나하나씩 찾아 보도록 하겠다.


Hash Flag 1.

Documents 디렉토리로 이동해 보면 다음과 같은 파일들이 보인다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Documents$ ls -al

total 4560

drwxr-xr-x 2 sansforensics sansforensics    4096 2012-06-16 14:55 .

drwxr-xr-x 8 sansforensics sansforensics    4096 2010-07-16 07:04 ..

-rw-r--r-- 1 sansforensics sansforensics  370668 2010-07-15 06:38 03-icar-fractal.pdf

-rw-r--r-- 1 sansforensics sansforensics 1175682 2010-07-15 06:39 fractales.pdf

-rw-r--r-- 1 sansforensics sansforensics  965314 2010-07-15 06:39 fractal.pdf

-rw-r--r-- 1 sansforensics sansforensics  582934 2010-07-15 06:42 Fractal.pdf

-rw-r--r-- 1 sansforensics sansforensics  289244 2010-07-15 06:42 fractals2.pdf

-rw-r--r-- 1 sansforensics sansforensics 1262029 2010-07-15 07:04 World_of_Fractal.pdf

sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Documents$ file *

03-icar-fractal.pdf:  PDF document, version 1.3

fractales.pdf:        PDF document, version 1.4

fractal.pdf:          PDF document, version 1.6

Fractal.pdf:          PDF document, version 1.4

fractals2.pdf:        PDF document, version 1.3

World_of_Fractal.pdf: PDF document, version 1.3


여러 pdf 파일들이 보이는데 해당 파일들을 하나씩 열어보면 꽤(?) 공을 들인 문서라는 느낌을 받는다.

[그림 2 - 03-icar-fractal.pdf]


문제를 만들기 위해 이렇게 정성들여 pdf 파일을 만들 것 같지는 않아 혹시나 하고 원본 파일에 해쉬 값을 집어 넣은건 아닐지 해서 Google 검색 엔진을 이용해 검색을 시도 해 보았다.



[그림 3 - Google 검색 결과]


추측대로 원본 파일이 존재하였다. fractals2.pdf 파일을 존재하고 모든 문서 파일의 원본을 구 할 수 있다. 이제 동일 파일인지 확인하기 위해 md5 해쉬 값을 확인하여 보자.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Documents$ md5sum *

3dc8480a8762d1eb2af09482468b0298  03-icar-fractal_o.pdf

3dc8480a8762d1eb2af09482468b0298  03-icar-fractal.pdf

31fb327fcf1f128a7df102e4b13b7727  fractal-1_o.pdf

31fb327fcf1f128a7df102e4b13b7727  fractal-1.pdf

8dcdaea419993e2fdb7f736d539d94da  fractales_o.pdf

8dcdaea419993e2fdb7f736d539d94da  fractales.pdf

07528724e9c0aea37656e0c794ce30d7  fractal_o.pdf

07528724e9c0aea37656e0c794ce30d7  fractal.pdf

3801073a72e037ee60b532cb8a1254dc  fractals2.pdf

6263b0228a08fe3de7677ad2a5cba621  World_of_Fractal_o.pdf

bdbf94bb16895468409f68ecf9401e02  World_of_Fractal.pdf


md5 해쉬 값이 같은 문서들이 있는 것으로 봐서 해당 파일들은 인터넷에서 다운받아 아무런 조작도 가해지지 않았다는 것으로 이해 할 수 있다. 찾지 못한  fractals2.pdf 파일과 md5 해쉬 값이 다른 World_of_Fractal.pdf 문서가 의심스럽다. 하지만 fractals2.pdf는 찾지 못했을 뿐 찾았더라면 아마 같은 해쉬 값을 출력 했을 것으로 예상되니 해쉬 값이 다른 World_of_Fractal.pdf 문서 파일을 조사해 보도록 하겠다. 원본 파일에서 어느 부분을 조작 했는지 알아보기 위해 diff 명령으로 두 파일을 비교 해 보자.

sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Documents$ diff -u <(xxd World_of_Fractal.pdf) <(xxd World_of_Fractal_o.pdf)
--- /dev/fd/63 2012-06-16 15:45:10.157927386 +0900
+++ /dev/fd/62 2012-06-16 15:45:10.157927386 +0900
@@ -77537,9 +77537,9 @@
 012ee00: 6f62 6a0d 3c3c 200d 2f50 726f 6475 6365  obj.<< ./Produce
 012ee10: 7220 2841 6372 6f62 6174 2044 6973 7469  r (Acrobat Disti
 012ee20: 6c6c 6572 2035 2e30 205c 2857 696e 646f  ller 5.0 \(Windo
-012ee30: 7773 5c29 290d 2f41 7574 686f 7220 2866  ws\))./Author (f
-012ee40: 3138 3039 3834 3465 6161 3165 6265 3035  1809844eaa1ebe05
-012ee50: 3062 6434 3937 3361 3435 3662 3135 3029  0bd4973a456b150)
+012ee30: 7773 5c29 290d 2f41 7574 686f 7220 286d  ws\))./Author (m
+012ee40: 6f6f 6368 6929 0d2f 4372 6561 746f 7220  oochi)./Creator 
+012ee50: 2841 6372 6f62 6174 2050 4446 4d61 6b65  (Acrobat PDFMake
 012ee60: 7220 352e 3020 666f 7220 576f 7264 290d  r 5.0 for Word).
 012ee70: 2f4d 6f64 4461 7465 2028 443a 3230 3032  /ModDate (D:2002
 012ee80: 3034 3039 3137 3336 3233 2b30 3827 3030  0409173623+08'00

Author 부분에 원본에 있던 moochi 부분을 지우고 해쉬 값을 넣은 것을 볼 수 있다.


flag : f1809844eaa1ebe050bd4973a456b150


Hash Flag 2.

Download 디렉토리에 보면 pcap 파일만 존재한다. 간단하게 NetworkMiner로 열어보면 세션이 하나만 존재하는 것을 알 수 있다.


[그림 4 - NetworkMiner]


Files 탭을 보면 파일이 하나 존재하는 것을 알 수 있는데 해당 파일 이름이 flags.rar 이다. 이 파일 내용을 보면 flags.jpg라는 이미지 파일이 하나 압축되어 있는데 비밀번호가 걸려 있어 당장 해당 파일을 열어보지는 못한다. 비밀번호를 크랙해야 하는데 문제 설명 페이지에서는 다음과 같이 힌트를 제시하고 있다.


Petit indice pour eviter de perdre trop de temps sur le bruteforce :

- Les passes font maximum 5 charactere uniquement des lettres en minuscule.

- Pour le rar c'est quelque chose que j'affectionne tout particulierement en 5 lettres.


Brute Force에 너무 시간을 잃지 않길 바라면서 힌트를 준다 :

- 비밀번호는 소문자로 최대 5글자이다.

- 내가 좋아하는 것들 중 5글자 인 것(?)


두 번째 힌트는 외국인에게는 도움이 되지 않는 힌트이다. 첫 번째 힌트를 기억하고 Brute Force 공격을 하면 [그림 5]와 같이 비밀번호를 얻을 수 있다.


[그림 5 - Brute Force 결과]


rar 파일의 비밀번호는 biere(맥주) 이다.... -_-;;;;


비밀번호를 입력하고 해당 rar 파일을 확인하면 해쉬 값을 확인 할 수 있다.


[그림 6 - 해쉬 값]


flag : 203ec6cfbff8288c0ebeec8ea1e70144


Hash Flag 3 ~4.

이번에는 Image 디렉토리에 있는 이미지 파일들을 분석하여 보자.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Images$ ls -al

total 1612

drwxr-xr-x 2 sansforensics sansforensics   4096 2012-06-16 14:55 .

drwxr-xr-x 8 sansforensics sansforensics   4096 2010-07-16 07:04 ..

-rw-r--r-- 1 sansforensics sansforensics 211705 2010-07-15 06:16 fractale10.jpg

-rw-r--r-- 1 sansforensics sansforensics  32151 2010-07-15 06:16 fractale11.jpg

-rw-r--r-- 1 sansforensics sansforensics  54837 2010-07-15 06:14 fractale1.jpg

-rw-r--r-- 1 sansforensics sansforensics 159526 2010-07-15 06:15 fractale2.png

-rw-r--r-- 1 sansforensics sansforensics  95783 2010-07-15 06:15 fractale3.jpg

-rw-r--r-- 1 sansforensics sansforensics  59793 2010-07-15 06:15 fractale4.jpg

-rw-r--r-- 1 sansforensics sansforensics 407821 2010-07-15 06:15 fractale5.jpg

-rw-r--r-- 1 sansforensics sansforensics  64268 2010-07-15 06:15 fractale6.jpg

-rw-r--r-- 1 sansforensics sansforensics 114952 2010-07-15 06:15 fractale7.jpg

-rw-r--r-- 1 sansforensics sansforensics  72212 2010-07-15 06:16 fractale8.jpg

-rw-r--r-- 1 sansforensics sansforensics  37318 2010-07-15 06:16 fractale9.jpg

-rw-r--r-- 1 sansforensics sansforensics  28468 2010-07-15 06:14 fractale.jpg

-rw-r--r-- 1 sansforensics sansforensics 279641 2010-07-15 06:35 jpg_NDH080408ak.jpg


마지막 파일만 다른 파일들과 다르게 이름이 완전히 다르다. 해당 파일의 정보를 보면 다른 파일들과 사뭇 다르다는 것을 확신 할 수 있다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Images$ file *

fractale10.jpg:      JPEG image data, JFIF standard 1.01

fractale11.jpg:      JPEG image data, JFIF standard 1.00, comment: "LEAD Technologies Inc. V1.01"

fractale1.jpg:       JPEG image data, JFIF standard 1.02

fractale2.png:       PNG image, 600 x 600, 8-bit grayscale, non-interlaced

fractale3.jpg:       JPEG image data, JFIF standard 1.02

fractale4.jpg:       JPEG image data, JFIF standard 1.01

fractale5.jpg:       JPEG image data, JFIF standard 1.01, baseline, precision 0, 4360x498

fractale6.jpg:       JPEG image data, JFIF standard 1.01

fractale7.jpg:       JPEG image data, JFIF standard 1.02

fractale8.jpg:       JPEG image data, JFIF standard 1.01

fractale9.jpg:       JPEG image data, JFIF standard 1.02

fractale.jpg:        JPEG image data, JFIF standard 1.01

jpg_NDH080408ak.jpg: JPEG image data, EXIF standard 2.2


다른 파일들은 일반적인 이미지 파일구조를 가지고 있는데 비해 해당 파일만 EXIF 구조를 가지고 있다. 오프셋을 하나하나 분석하면 좋겠지만 도구로 분석하는 것도 좋은 방법 중 하나이다.(시간 절약)

인터넷에 온라인으로 EXIF를 분석해주는 Viewer들이 많다. 해당 도구 중 하나를 선택하여 사용 해 보자.


[그림 7 - EXIF Viewer]


썸네일에 해쉬 값 이미지가 있는 것을 볼 수 있다.


flag : f2c7ec9225e9158deb7ca7aad0f3504b


또 file * 명령 결과를 보면 EXIF 이미지처럼 어떤 부가 적인 정보를 가지고 있는 파일 두개가 더 있는데 하나는 코멘트를 나타내고 또 하나는 뭔지 모를 정보를 가지고 있다. 코멘트를 출력한 파일은 별볼일 없어보이므로 뭔지모를 baseline, precision 0, 4360x498 이라는 문자열을 출력한 fractale5.jpg 이미지를 한번 살펴보자. 일단 strings 명령어로 살펴보면 바로 처음에 해쉬 값으로 추정 되는 문자열이 보인다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Images$ strings fractale5.jpg | more

JFIF

"1dcd64e16d97507052d67a6d0557ee8d


좀 더 정확히 알아보기 위해 jhead 명령어를 사용 해 이미지 파일의 정보를 파싱하여 보면 코멘트에 해당 해쉬 값이 존재하는 것을 알 수 있다.

sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Images$ jhead fractale5.jpg 
File name    : fractale5.jpg
File size    : 407821 bytes
File date    : 2010:07:15 06:15:38
Resolution   : 664 x 498
Comment      : 1dcd64e16d97507052d67a6d0557ee8d

flag : 1dcd64e16d97507052d67a6d0557ee8d


Hash Flag 5.

이번에는 Musics 디렉토리로 가보자. 해당 디렉토리에도 mp3 파일 하나만 존재한다. 해당 파일의 속성 창을 열어 여러가지 정보를 봐 보면 앨범 필드에 base64 값으로 추정되는 값이 보인다.


[그림 8 - 속성 창]


하지만 해당 값을 디코딩 하게 되면 올바른 값이 아니라는 메시지와 함께 디코딩 되지 않는다. strings를 이용해 나머지 base64 값이 있는지 찾아보면 다음과 같이 발견 할 수 있다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Musics$ strings miel-vie.mp3

.................

VW4gZGUgcGx1cyAzMzA2ZWMwOTdmYz

gzMDgxNzE4MTUxNmVhMjhkZWQzOA==


디코딩 하면 다음과 같은 문자열을 볼 수 있다.  Un de plus 3306ec097fc830817181516ea28ded38

flag : 3306ec097fc830817181516ea28ded38


Hash Flag 6 ~ 7.

이번에는 Private 디렉토리로 가보자. 해당 디렉토리에는 숨겨진 파일 하나와 텍스트 파일 하나가 존재한다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Private$ ls -al

total 16

drwxr-xr-x 2 sansforensics sansforensics 4096 2012-06-16 14:55 .

drwxr-xr-x 8 sansforensics sansforensics 4096 2010-07-16 07:04 ..

-rw-r--r-- 1 sansforensics sansforensics   65 2010-07-15 09:00 .facile

-rw-r--r-- 1 sansforensics sansforensics   45 2010-07-15 07:06 priv.txt


먼저 txt 파일부터 보자. 텍스트 파일을 열어보면 다음과 같은 문자열 뿐이 보이지 않는다.

sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Private$ cat priv.txt 
Sh mshn lza 55ml6j0m75j563099l3k332m5j64l690

얼핏 보면 해쉬 값으로 보이지만 그렇지가 않다. 앞에 있는 문구를 보게 되면 일반적인 단어가 아니라는 것을 알 수 있다. 어떤 규칙으로 인코딩 되어 있는 듯 하다. 인코딩 방법에는 여러가지가 있지만 가장 기본적인 치환 방법을 적용해 보도록 하자.

치환 암호에는 대표적으로 ROT와 시저암호가 존재한다. ROT를 먼저 시도 해보면 해당 문자열이 ROT로 인코딩 되어 있었다는 것을 알 수 있다.(ROT-19)


[그림 9 - ROT-19]


flag : 55fe6c0f75c563099e3d332f5c64e690


또 숨겨져 있던 .facile 파일을 열어보면 해쉬 값이 존재하는 것을 볼 수 있다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/Private$ cat .facile 

Pour commencer le plus facile : 8cd4525b78f0488581316bba7734e758


flag : 8cd4525b78f0488581316bba7734e758

아무래도 먼저 이 해쉬를 찾고 기분좋게 시작하라는 의미에서 이렇게 해쉬 하나는 공짜로 주는 것 같다.


Hash Flag 8.

이번에는 숨겨져 있는 디렉토리인 .mozila 디렉토리로 가보자. 해당 디렉토리는 firefox의 Profile을 담고 있는 디렉토리인데 직접 분석을 해도 좋고 간단하게 Profile을 복구 하여 어떤 Profile인지 분석해봐도 좋다. 먼저 Profile을 불러와 어떤 Profile인지 확인 해 보도록 하겠다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge/.mozilla$ firefox --Profilemanager

(firefox-bin:2319): GLib-WARNING **: g_set_prgname() called multiple times


[그림 10 - Firefox ProfileManager]


ProfileManager로 해당 문제의 Profile을 불러와 히스토리를 한번 보면 방문 했던 웹 페이지들을 확인 할 수 있다.


[그림 11 - 히스토리]


방문 했던 페이지 중 flags.txt 페이지가 있다. 해당 페이지로 접속해 보면 404 페이지만 나와 아쉽게도 해쉬 값을 얻을 수는 없다. 참고로 히스토리 기록은 place.sqlite 파일에 기록되어 있다.


Hash Flag 9 ~ 10.

이번에는 마지막으로 남은 FS.dd 파일을 분석해 보자. file 명령어로 살펴보면 일반적인 data 파일로 부트 섹터가 포함된 볼륨의 파일시스템 이미지는 아닌 것 같다. 문자열을 뽑아 보면 다음과 같다.


sansforensics@maj3sty-desktop:~/Desktop/forensics_challenge$ strings FS.dd 

...............

lost+found

flags.jpg

.flags.txt.swp

flags.txtt.swx

JFIF

Created with GIMP

...............

root

kevin-laptop

/mnt/flags.txt

U3210#"! 

Joli : 2843062153121fed0558613602645f81

...............

일단 Joli 부분에 해쉬 값이 보인다.

flag : 2843062153121fed0558613602645f81

또 flag.txt, flags.jpg 가 보이는데 해당 문제 파일에서 foremost를 이용 해 flags.txt와 flags.jpg 파일을 카빙해 보도록 하자.
카빙을 시도하면 txt 파일은 카빙되지 않고 jpg 파일만 카빙되는데 해당 파일을 열어보면 해쉬 값을 확인 할 수 있다.

[그림 12 - 카빙 jpg]


flag : a84774bcf9e00b394d75e4367472e58e


이렇게 해서 해쉬 값 10개(하나는 환경 상 문제로... ㅠㅠ)를 찾아보았다. 별다른 기술을 요구하는 문제들이 아니기 때문에 실제 대회 당시에는 시간 싸움이었을 듯 하다. 개인적으로 포렌식 문제라고 하기에는 대부분 문제들이 맞지 않지 않나 싶다. 파이어폭스 Profile 문제를 제외하고는 말이다..(사실 대회라고 하기에 많이 부족한 것 같다.)


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

exploit-exercises Nebula - Level00  (0) 2012.07.25
GitS CTF Packet 200 풀이  (1) 2012.06.29
Defcon 2012 CTF Forensic 400 Write-up  (7) 2012.06.06
GitS 2012 - TeL aViv+  (5) 2012.05.05