포스테키안

2019 여름호 / 세상 찾기Ⅱ

2019-07-18 58

세상 찾기Ⅱ / Capture The Flag 알아보기

우승 증명서 이미지, 특별상상금과 함께 찍은 기념사진, cooe blue 대회 winner: cykor

CODEGATE CTF대회 중 찍은 기념촬영 사진, CODEGATE CTF 과학기술정보통신부 장관상 상금 이미지, G03 Sansung CODEGATE CTF 2018 장현식

안녕하세요, 저는 POSTECH 컴퓨터 보안 동아리 PLUS 소속의 정현식입니다. 이번에 국내에서 열리는 가장 큰 보안 대회 중 하나인 CODEGATE CTF 본선에 참가해 대학생부 1위를 차지했고, 기말고사 이후에는 중국에서 열리는 0CTF에 참가합니다. 그런데 대회마다 ‘CTF’라는 단어가 보이죠? 여러분들에게는 생소한 단어일 겁니다. 이 글에서는 여러분께 CTF에 대한 제 경험을 공유해 보고자 합니다.

제가 교내 보안 동아리 PLUS에 들어간 지 벌써 5년 차가 되어가네요. PLUS에서는 컴퓨터 보안과 관련된 여러 학술 활동을 하는데, 그중 하나가 바로 ‘CTF’라고 불리는 대회에 참가하는 것입니다.

CTF는 ‘Capture The Flag’의 약자로, 대부분의 컴퓨터 보안 대회가 채택하는 형식 중 하나입니다. 대회 중에는 말 그대로 플래그(Flag)를 빨리빨리 얻어야 하는데요, 대부분 24시간 동안 진행이 되며 길면 48시간에서 72시간 동안 진행이 됩니다. 정말 길죠? CTF는 플래그를 얻는 방법에 따라서 크게 두 가지로 나뉩니다. 하나는 Jeopardy로, 여러 개의 문제를 풀어내서 문제에 숨겨진 플래그 정보를 얻어 내는 대회 방식입니다. 플래그를 얻어 낸 뒤 대회 사이트에 입력하면 그 문제에 해당하는 점수를 얻을 수 있습니다. 가장 일반적인 방식으로 대부분의 대회가 채택하고 있죠. 다른 하나는 ‘Attack & Defense’로, 취약점이 있는 프로그램이나 사이트가 팀마다 주어지게 됩니다. 팀들은 주어진 파일의 취약점을 찾아 내야 하고, 이를 통해 다른 팀을 공격해서 그 팀의 플래그를 얻어 내거나 자기 팀의 파일의 취약점을 패치해서 새로 업로드할 수 있습니다. 대회가 진행됨에 따라 공격 점수와 방어 점수가 쌓이게 되어서 1등을 가리게 되는 방식입니다.

CTF는 CTFtime.org(https://ctftime.org/)라고 하는 CTF 모음 사이트에서 찾아볼 수 있습니다. 처음 들어가 보시는 분이라면 정말 많은 수의 CTF가 열리고 있다는 사실에 놀라실 겁니다. 사이트를 살펴보면 Weight라는 수치가 있는데, 유명한 CTF는 Weight가 높아 쉽게 찾아볼 수 있습니다. 이런 대회는 동아리 사람들과 함께 나가기도 하고, 동아리와 다른 CTF 팀이 연합해 나가기도 합니다. 이번에 출전하는 0CTF는 LeaveCat이라고 하는 팀과 함께 연합해서 본선에 진출하게 되었습니다. CTF 대부분은 팀에 인원 제한이 따로 있지 않기 때문에, 이렇게 연합 팀으로 나가면서 서로에게 배우기도 하고 도움을 주기도 할 수 있죠.

CTF에 나간다면 CTF 준비를 해야겠죠? 하지만 평소엔 CTF를 위한 준비를 본격적으로 하고 있지는 않습니다. 대신 예전 CTF에 나온 문제나 보안 관련 논문을 읽으면서 보안 관련 지식을 쌓곤 하죠. 이렇게 쌓은 지식이 대회 문제를 푸는 역량에 중요한 역할을 해서 어떻게 보면 대회 준비라고 볼 수도 있겠습니다. 예를 들어서, 작년 초에 발표되었던 인텔 CPU의 취약점인 Meltdown이나 Spectre를 직접 시도해 보는 문제가 작년 여러 CTF에서 나오기도 했답니다. 이렇듯 컴퓨터 보안의 최신 트렌드가 CTF에도 그대로 반영되기 때문에, 잘 공부해 두는 것이 좋겠죠?

다만 CTF 준비에 있어 세계에서 가장 권위 있는 CTF인 DEFCON CTF의 본선은 예외입니다. 본선 대회는 Attack & Defense로 치러지는데, 대회장에서 서로 주고받는 네트워크 패킷을 볼 수 있기 때문에 상대방이 보냈던 패킷, 그리고 상대방이 현재 사용하고 있는 파일을 체계적으로 관리하는 인프라가 중요합니다. 올해도 DEFCON CTF의 본선에 나가게 되어서 이를 준비하고 있답니다.

이제 CTF 대회장 분위기에 관해서 이야기해 볼까요?  지금까지 다양한 대회의 본선에 나가봤지만, 분위기가 밝지는 않습니다. 수많은 팀이 자기 테이블에 앉아서 모니터만 열중해서 보고 있을 뿐이죠. 큰 홀 안에 100여 명 남짓의 사람들이 컴퓨터만 쳐다보고 있다고 생각해보세요. 심지어 24시간 내내 컴퓨터를 쳐다보고 있어서 다들 피곤해 보이기까지 합니다. 그렇기에 중요한 것은 바로 영양 공급입니다. 대회장에는 항상 에너지 드링크를 포함한 음료수와 각종 간식거리가 제공됩니다. 문제가 안 풀리면 한 번 갔다 오고, 졸리면 음료수 가지러 또 갔다 오고 하는 거죠. 그렇게 대회를 치르다 보면 노트북 옆에 수북이 간식 쓰레기가 쌓여있곤 합니다. 대회장에 에너지 드링크가 따로 없어서 팀원 한 명이 직접 편의점에서 에너지 드링크를 대량으로 미리 사 오기도 합니다. 온라인으로 진행하는 대회의 경우에는 다 같이 야식을 시켜서 먹는 것이 일상이랍니다.

하지만 예외가 단 하나 있는데, 바로 대회가 끝나갈 무렵입니다. 문제를 하나 푸는 데 긴 시간이 걸리다 보니, 대회가 끝날 무렵 몇몇 팀들을 살펴보면 한 사람을 중심으로 모여있는 모습을 볼 수 있습니다. 다들 더 풀 수 있는 문제가 없어서 문제를 거의 다 풀어가는 사람을 중심으로 모여있는 이 모습은 마치 기우제를 지내는 듯한 간절함을 엿볼 수 있는데, 그 사람이 문제를 풀면 다 같이 손뼉을 치며 팀의 등수를 확인하러 가는 걸 볼 수 있죠. 우리 팀도 그럴 때가 종종 있는데, 이 순간만큼 기분 좋은 순간이 없을 겁니다. 대회가 끝나기 직전 버저비터가 되는 그 순간, 그만큼 짜릿한 것이 어디 있을까요? 24시간 내내 깨어있어 피곤하다가도 그 순간만은 온몸에 빠르게 피가 도는 느낌을 지울 수가 없습니다.

그렇게 대회를 마치고 나면 많은 것을 배웠다는 생각이 들곤 합니다. 마치 24시간 단기 육성 과정을 밟은 느낌이죠. 보안이란 분야가 정말 넓기 때문에, 제가 아무리 공부해도 공부하지 않은 것이 나오는 경우가 잦습니다. 대회 시간 내내 열심히 공부해서 풀다 보면, 대회가 끝난 뒤에도 그와 관련된 내용을 찾아보면서 또 공부하게 되죠. 어떻게 보면 매 CTF가 저에게 공부 촉매가 되어주고, 좀 더 넓은 시야를 가져다주는 자극제 역할을 한다고 볼 수 있을 것 같습니다.

만약 여러분들이 CTF에 관심이 있다면, 지금부터라도 여러 사이트를 풀어보세요. 포너블 분야를 공부할 수 있는 pwnable.kr 과 같은 사이트도 있고, 리버싱 분야를 공부할 수 있는 reversing.kr 과 같은 사이트도 있습니다. 컴퓨터 보안 분야의 장점 중 하나는 인터넷을 통해서도 공부할 수 있다는 점입니다. 모르는 게 있다면 구글을 통해 검색해보고, 지식을 넓혀가 보세요. 만약 이 과정에서 즐거움을 느낀다면, 여러분들도 훌륭한 CTF 플레이어입니다. CTF는 항상 여러분들에게 열려 있습니다.

창의IT융합공학과  14학번  정현식

창의IT융합공학과  14학번  정현식