본문 바로가기

[+] Hacking/[-] Challenge Report

CAT Security Forensic 1 Write-Up

정말 얼마만에 블로그에 글을 올리는지 모르겠다. 간간히 페이스북으로 지인분들의 소식과 올려주시는 링크들을 통해 보안쪽과 포렌식쪽의 소식은 듣고 있었지만 사실 한번 훅 훑고 말았던지라 현재 내게 남은 링크에 대한 기억은 거의 없는 편이다... ㅠㅠ

얼마전 카톨릭대학교의 보안동아리인 CAT Security와 홍익대학교의 HUST 대회가 개최 되었었는데 이번 글에서 CAT Security에서 출제한 Forensic 1번 문제를 풀이 해 볼 생각이다.

국내 대학교 동아리에서 여는 대회나 해커 커뮤니티에서 개최하는 대회들은 그 문제들을 구하기가 쉽지 않아 아는 지인분을 통해 문제들을 구해 풀어보았다. 사실 문제 풀이에 대한 포스팅은 하지 않으려 했으나 문제를 풀고 보안프로젝트에 올라온 어떤 분의 풀이보고서를 보니 Forensic 문제를 대부분 게싱이나 삽질(?)에 의해서 푼 흔적이 많이 보여 Forensic 관점에서 해당 문제를 어떻게 보아야 하고 어떻게 풀어야 하는지에 대해 한번 기술해 보려 이렇게 글을 쓰게 되었다.


사설이 길었다! 바로 풀이를 시작해 보도록 하겠다.


먼저 문제를 살펴보자.


Find the Key :) 


문제 한번 정말 간단하다! 무작정 키를 찾으라는 이런 문제는 문제를 풀이하는 입장에서 보면 정말 황당하고 막막한 문제가 아닐 수 없다. 일단 문제 파일에는 확장자가 붙여져 있지 않으므로 리눅스 계열에 있는 file 명령으로 해당 파일이 어떤 파일인지 파악해 보면 쉽게 어떤 파일인지 파악 할 수 있다.


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


파일 종류를 확인했더니 FAT 32라고 알려준다. 그럼 이제 무엇을 해야 할까? 사실 여기서부터는 여러가지 방향이 있다. 이미징 파일이니 바로 FTK Imager, EnCase 등으로 분석을 할 수도 있고 현재 파일에 속해 있는 키 값을 문자열 검색으로 찾아 볼 수도 있다.

나는 후자를 선택하여 strings로 문자열을 먼저 검색해보도록 하겠다.


[그림 2 - 문자열 검색]


문자열 검색 결과 마지막을 보면 뭔자 알 수 없는 문자열들이 보이는데, 이는 퍼지해시 툴로 많이 알려진 ssdeep의 출력 값이다.

여기서 ssdeep를 한번이라도 사용 해 본 사람이라면 해당 해시 값을 이용해 무엇을 할 수 있는지 알 수 있을 것이다. 일단 이부분에 대해서는 조금 더 뒤에 이야기 하도록 하겠다. 일단 저 문자열을 기억해 두도록하자.


그럼 이제 해당 파일을 FTK Imager 등으로 열고 안에 무슨 파일들이 존재하는지 살펴보도록 하자.


[그림 3 - 문제파일의 내용]


[그림 3]에서는 모두 보이지 않지만, 모두 png 파일 포맷의 이미지 파일들이 잔뜩 들어 있다. 간혹 정상적으로 보이는 이미지도 있고 안보이는 이미지도 있는데, 이는 왜 그런지 해당 파일들을 모두 Export 해보면 알 수 있다.


[그림 4 - 정상적으로 보이지 않는 이유]


보이지 않는 파일들의 속성을 보면 너비와 높이가 모두 1픽셀로 수정되어 있어 정상적으로 열려도 우리들 눈에 보이지 않는 것이다. 여기서 대부분의 사람들은 해당 파일들이 key와 관계가 있다는 것을 직감하고 1픽셀로 수정 된 모든 파일들을 아까 보았던 ssdeep 문자열에서 512*384를 생각해 픽셀을 해당 크기로 수정하여 문제를 풀었을 것이다.(추측일 뿐입니다.)

물론 그렇게 해도 1픽셀로 수정되어 있는 이미지는 유한정하기 때문에 key와 관련되어 있다면 얼마 시간이 지나지 않아 풀 수 있다. 하지만 문제 출제자의 의도는 그렇지 않다는 것이 현재 내 생각이다. 이런 방법으로 풀기 원했다면 힌트아닌 힌트로 ssdeep 출력 값을 넣어놨을리 없기 때문이다. 

문제 출제자가 공들여 ssdeep 출력 값을 넣어두었으니 나는 그것을 이용해 풀어보도록 하겠다. 먼저 txt 파일등에 해당 문자열을 넣어둔다.


[그림 5 - ssdeep 출력 값을 txt파일에 저장]


그 후 해당 해시 값과 비슷한 해시 값을 가지고 있는 파일을 위 이미지 목록에서 찾기 위해 ssdeep를 사용하자. ssdeep는 지정한 해시 값과 비슷한 해시 값을 찾아 그 유사율을 체크하고 사용자에게 그 유사율을 출력해주는 기능을 가지고 있다.



[그림 6 - ssdeep가 출력한 해시 유사율]


ssdeep는 지정해 준 해시 값과 jukrptdjdy.png의 해시 값이 99% 일치한다고 알려주었다.(99%의 이유는 픽셀 오프셋이 수정되었기 때문) 실제로 해당 파일을 보면 1픽셀로 수정되어 있는 수상한 파일이다.


[그림 7 - ssdeep가 찾아준 수상한 파일]


이제 해당 파일을 원본파일이름에 명시 된 512*384 크기로 수정을 해주자. 수정은 png 파일 포맷을 보고 하면 되니 이 부분은 생략하도록 하겠다. 수정을 하면 다음과 같은 이미지를 볼 수 있다.


[그림 8 - 키 값이 적혀 있는 이미지 파일]


드디어 문제에서 찾으라던 키 값을 찾았다. 사실 어려운 문제도 아니고 풀이 방법도 어렵지 않기 때문에 출제자 역시 해당 문제를 레벨 1로 두었었으리라 생각된다. 하지만 출제자도 포렌식을 공부하는 사람이었기에, 풀이하는 사람들이 포렌식에서 유용하게 사용하는 해시 값에 대해 조금 더 깊이 있고 넓은 지식을 가지길 원해 이런 문제를 출제 한 것이 아닌가라는 생각해 본다. 아님 말고 :-)


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

OverTheWire Natas All Clear  (0) 2013.06.24
pCTF 2013 Forensic 150점 풀이  (0) 2013.04.30
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14
exploit-exercises Nebula - Level05  (0) 2012.07.27