0. 서론
7월 13일 정보보호의 날을 맞아 과 동아리 I.Sly()에서 미궁게임을 개발하여 배포했다.
해당 미궁은 디지털 포렌식과 관련된 문제로 이루어져 있으며 문제 난이도는 비전공자도 충분히 풀 수 있는 정도(물론 나는 응애전공자지만) 라고 하길래 새벽 네 시쯤 잠이 안와서 도전해보기로 하였다.
난 CTF 문제를 풀어본 적도 없고 전공에서 배운 gdb디버거 등도 따라가기 어려워 했기 때문에 한 두 문제 풀다가 포기할 줄 알고 가볍게 시작했는데, 의외로.. 다 풀어내서 공부한 것들을 정리할 겸 백업해둔다.
*다른 유저들의 플레이를 위해 flag 값은 적지 않았습니다. (정보 공유용x 그냥 내 기록용)
*모든 저작권은 미궁 게임을 개발한 동아리 학생들에게 있습니다. (관련 글 : https://hackingisly.tistory.com/350)
1. satge0
오늘은 아이슬리 전체 활동이 있는 날... 동아리방에 도착해서 기초 교육을 듣고 있다. 너무 어렵잖아? 저게 뭔소리야... 그냥 졸리다... 코오... 코오...... 응? 나도 모르게 졸아 버렸네. 근데 아무도 없잖아? 벌써 끝났구나... 주변을 둘러보는데 응? 뭔가 달라진 것 같은데... "knee_hater_wishes_?" |
힌트로 이리저리 나열된 알파벳들이 볼트모트로 변하는 파일이 주어졌다.
단번에 "knee_hater_wishes_?" 를 재조합하여 flag값을 찾는 방식임을 유추할 수 있었다.
2. stage1
동아리 로고 속 뱀이 사라졌다! 뱀이 어디 갔지...? 이때 뒤쪽에서 무슨 소리가 들리면서 초록색 형체가 나타났다가 사라졌다. 스르륵........ 혹시... 뱀인가...? 아니 그럴리가 없잖아 이 바보야! (딱콩) 그래도 살짝 궁금해진 나는 소리가 난 쪽으로 이동했고, 처음 보는 책장을 발견했다. 우리 동아리방에 이런 게 있었나... 근데 이게 무슨 책들이지...? 책장을 살펴보자! |
이 문제에는 Least Significant Bit steganography로 데이터를 은닉하는 스테가노그래피 기법이 사용되었다. 문제에서 주어지는 사진을 스테가노그래피 디코딩 사이트에서 디코딩 하면 쉽게 flag 값을 찾을 수 있다.
내가 활용한 사이트는 (https://stylesuxx.github.io/steganography/) 이다.
3. stage2
헐... 이게 뭐야?? 책장 뒤에 숨겨진 비밀의 문을 발견했다!! 그런데 비밀번호를 입력해야 들어갈 수 있는 것 같다... 비밀번호를 찾아보자. 그런데 정글 사진이 붙어있네... 갑자기 웬 정글? 좀 더 자세히 볼까? |
이 문제에는 HxD라는 툴을 사용하는 문제이다.
HxD에서 주어진 이미지 파일(.jpg)을 넣고 확인하면 알 수 없는 디코딩 텍스트들이 출력된다.
CTF를 직접적으로 해본 적은 없지만 어깨 넘어로 본 기억으로는 이 디코딩 텍스트들 사이에 flag를 숨겨둔다는 것을 본 적이 있다.
미궁게임 첫 시작화면에 flag의 값은 isly{}의 형태로 주어질 수도 있고 주어지지 않을 수도 있다고 했으니 혹시몰라 ctrl+F키로 확인해보았다.
그 결과 flag와 관련된 값을 찾아낼 수 있었다.
개인적으론 이 flag 값에서 영문과 숫자를 혼용하여 쓴 부분이 재미있었다 완전 해커같애 ㅎㅋㅋ
4. stage3
문을 열었더니 정글이 보인다. 처음 와 보는 곳이지만 어쩐지 익숙하고 누군가 나를 부르는 느낌에 나도 모르게 정글에 발을 들였다. 덜컹!!! 앗 이런!!! 정글에 들어오자마자 문이 사라졌다! 이를 해결하기 위해서는 얼른 뱀을 찾아야 될 것 같다. 뱀을 찾기 위해 정글에서 모험을 시작하자. 정글에 들어온지 꽤 시간이 흘렀지만 내가 가야할 곳이 어딘지 이 넓은 정글에서 혼자 찾기는 어려울 것같다. 좀만 쉬었다 갈까...? 그때 어디선가 소리가 들렸다. 풍덩!!! "안돼! 내 보물!!" 소리난 곳을 쳐다봤더니 보라색 용이 자신의 물건을 물에 빠뜨린것 같다. 용을 도와주고 뱀이 있는 곳에 대해 물어보자! |
이 문제부터 조금씩 시간이 소요되기 시작했다. 각 문제마다 문제 방향에 대한 힌트가 주어졌었는데 이 문제에는 그냥 "분석하라" 는 것이 다였기 때문이다.
그렇기 때문에 나는 페이지 소스 검사부터, 이미지 반전, 노출도 조정 등 여러 디지털 포렌식 기법을 동원하려 flag값을 찾으려 노력했다. 이 사이트(https://29a.ch/photo-forensics/#forensic-magnifier) 에 넣고 사진에 숨겨진 값이 있는지 이리저리 굴려보았지만 찾을 수 없었다.
그래서 앞 문제처럼 HxD 툴에서 txt를 해독해보기로 하였고 값을 살펴보던 중 flag같아 보이는 값을 발견할 수 있었다.
이 문제에서 제공한 이미지 파일의 이름이 isly{ 였기 때문에 닫는 대괄호가 없다는 점을 이상하게 생각하여 읽을 수 있는 문자 조합+"}"에 중점을 두어 탐색했던 거 같다.
5. stage4
헉!! 너무 고마워!!!! 앗 인사가 늦었네. 안녕 나는 수룡이야! 덕분에 소중한 내 보물 수정구를 찾았어!! 정말 다행이다... ... 뭐? 뱀을 찾으러 여기까지 왔다고? 그렇다면 나한테 맡겨! 그런데 말이야... 너 아까 보니 보통 실력이 아니던데... 그럼 이 문제도 풀 수 있지 않을까? 자! 이 지도는 특별한 지도야. 수수께끼를 풀어낸다면 이 지도가 너희에게 뱀이 있는 곳을 알려줄 거야. |
내가 포기를 진지하게 고민하였던 문제이다.
파일 시그니처 값에 대한 문제는 난생 처음 접해보아서 어떻게 접근할 지 감도 안잡혔던 문제이다. 다행히 구글링을 통해 비슷한 주제의 다른 CTF문제를 찾아 이 문제에도 적용할 수 있었다.
파일 시그니처란 파일 형식마다 가지고 있는 고유의 특징, 즉 포맷에 대한 정보이다.
파일 시그니처는 특정한 byte로 이루어져 있는데 이 byte 단위의 시그니처가 파일의 처음에만 존재하는 파일 포맷도 있고, 처음과 마지막에 존재하는 파일 포맷도 있다.
파일의 처음에 있는 시그니처는 헤더(Header) 시그니처, 파일의 마지막에 있는 시그니처는 푸터(Footer) 시그니처 라고 한다. 이때, 헤더 시그니처와 푸터 시그니처가 다른 형식일 경우 파일 속 다른 파일이 숨겨져 있을 수 있다.
마찬가지로 HxD 툴로 확인해보았을 때 파일의 처음은 89 50 4E 47 0D 0A 1A 0A로 png 파일에 맞는 확장자이지만,
파일의 끝 부분을 확인해보면 50 4B 03 04로 zip파일의 확장자가 삽입되어있는 것을 확인하였다.
따라서, 이 파일에는 겉으로 보기엔 png 파일이지만, 따로 zip파일 또한 숨겨져 있는 것이다.
내가 했던 첫 번째 방법은 zip파일의 헤더와 푸터를 알아내어 따로 메모장으로 옮긴 뒤, zip 파일로 저장한 후 압축을 푸는 것이었다. 하지만 이 방법으로 했을 때 자꾸 파일이 손상되어 불러올 수 없는 오류가 발생하였다.
따라서 이 파일(https://web.joongbu.ac.kr/hakbu/fileDownload?titleId=733&fileId=1&fileDownType=C¶mMenuId=MENU00491)을 참고하여 블록선택을 통해 zip 파일의 헤더와 푸터를 추출한 후 병합(사진에선 수락) 하였다.
그 결과 새로운 파일이 생성되었고 안에 있는 flag 파일을 확인할 수 있었다.
flag의 암호는 문제에서 주어진 지도 이미지에서 제시한 대로 단어를 만들면 쉽게 알 수 있다.
어려운 CTF 속 쉬운 머리풀기 문제가 나오니 기분이 좋았다.
6. stage5
드디어 뱀을 찾았다!! 뱀이 우리를 여기로 데려온 이유는 무엇일까? 뱀이 전하는 메시지를 찾아보자! |
이 문제에서는 .jpg 파일이 주어진다. 그러나 파일을 읽으려고 했을 때 "이 파일 형식은 지원되지 않는 것 같습니다."라는 문구가 보인다. 앞선 문제에서 파일 시그니처에 대해 공부했기 때문에 단숨에 이 파일은 다른 확장자로 변경해줘야 한다는 생각이 들었다.
52 49 46 46은 AVI 파일 헤더 시그니처이다. (http://forensic-proof.com/archives/300) 이 사이트에서 ctrl+F로 검색하면 편리하게 찾을 수 있다.
해당 파일을 .avi 로 변경해주면 음성파일이 나온다. 음성파일을 어떻게 분석해야하는지 몰라 "ctf 음성" 등으로 구글링하여, Audacity라는 툴을 활용해보기로 했다.
다른 ctf문제에서 음성파일은 주로 스펙트로그램-Hz 조절을 통해 음성에 있는 숨겨진 flag를 찾는 식이었다. 나도 처음에는 그렇게 접근했으나, 이 파일에는 글자가 숨겨진 것 같지 않았다.
두 번째로 접근한 방법은, 상하 좌우로 뒤집는 것이었다.
그냥 파일로만 들었을땐 너무 빨라 알아듣지 못하므로 속도를 천천히 줄여가며 알아들을 수 있는 속도로 변경하였다.
그 결과 , flag is ... 라는 음성을 들을 수 있었다.
사실 이 문제는 확실하게 답을 파악한 것이 아니라 변조된 음성 속 이거 아냐? 식으로 넣어 맞춘 문제이기 때문에 조금 찝찝한 감이 있다. 그리고 새벽에 변조 음성을 들으려니 무서웠다 . . . .
7. stage6
잠깐만. 이게 뭐지? 편지가 있다. 설마 러브레터...? 편지를 열어서 flag를 획득하자! |
이 문제에서는 .txt 파일을 제공한다. 영어로 적혀있지만 번역기를 돌려봐도 스팸메일 뿐이다.
하지만 이 문제 역시 두 번째 문제 처럼 파일 안에 정보를 숨기는 스테가노그래피 기법을 활용하였다.
나는 이 문제를 풀기위해 이 블로그(https://swfs-swuforensics.tistory.com/71)를 참고하였으며, 텍스트 스테가노그래피 디코더 사이트로는 (https://www.spammimic.com/decode.shtml) 이 사이트를 참고하였다. 그 결과 숨겨진 flag값을 찾을 수 있었다.
8. CLEAR
꺄 새벽 네시반쯤 시작해서 일곱시쯤 클리어 했으니 두시간 반 정도 걸린 거 같다!!!! 명예의 전당에 이름을 올릴 수 있어서 기쁘다.. 내가 이걸 해내다니
천재해커 어떻게 되는 건가요 나도 할래요..
문제를 풀기 위해서 여러 방법을 생각해보고 또 여러 툴들로 이리저리 시도해보는 과정이 재미있었다! 정말 딱 초심자들 혹은 비전공자들을 위한 흥미유발 난이도의 미궁게임인 것 같다. 덕분에 어렵게만 느껴졌던 CTF에 관심을 가지게 되었으며 남은 방학동안 시간 날 때마다 한 문제씩 풀어보고싶다.
중간에 안풀리고 오답 투성이일 때 포기하고 싶다는 마음이 간절했으나 다 클리어한 지금 너무 뿌듯하다 >.<
재미있는 게임을 만들어준 아이슬리 동아리 짱!! 다음에도 또 만들어주세요 (아이슬리: ??)
'정보보안 공부 > CTF(해킹)' 카테고리의 다른 글
[withCTF] basics (0) | 2023.01.15 |
---|---|
[withCTF] 우리는 이 파일에 플래그를... (0) | 2023.01.15 |
[withCTF] 저는 플래그를 이 파일에.. (0) | 2023.01.15 |
[withCTF] 제 친구의 개가 바다에서… (0) | 2023.01.15 |
[포너블] 리눅스 프로세스의 메모리 구조 (0) | 2022.12.30 |