2016년, 화이트햇 컨테스트 일반부 CTF는 고려대 싸이코(Cykor)가 우승을 차지했다. 그런 의미로 사냥감을 노리듯 수상자들을 찾아 배회했지만 아무도 보이지 않았다. 막간 open CTF를 하는 용휘를 발견하기 전까지.. 슬금슬금 눈치보며 open CTF가 끝날 때쯤 그 친구에게 다가가 인터뷰 요청을 했더니 기분 좋게 승낙해줬다. 그럼 그날 나름 화기애애했던 인터뷰 현장을 들여다보자.
Q. 우승한 기분이 어떤가.
감회가 새롭다. 청소년 때 이 대회를 나가서 상을 받았었다. 그러고 나서 지난해 일반부로 출전했지만 아쉽게도 떨어졌었다. 그리고 올해 다시 참가하여 대상을 받으니 감회가 새롭다. 특히나 2년 만에 오는 대회에 우승하여서 기분이 좋다.
Q. 대회 문제는 어땠는가
대회 문제는 괜찮았다. 특히나 재미있는 문제들이 많았다. 이번 대회는 크게 2차전으로 이루어졌는데 1라운드는 블랙펄, 2라운드는 NSR에서 문제를 제공한 것으로 알고 있다. 블랙펄 문제는 전형적인 CTF 문제와 같았다. 코드 게이트랑 문제는 달랐지만 느낌이 비슷했다. 문제를 풀고 나서 기분이 나쁘지 않고 좋았다. 더군다나 문제 하나하나가 너무 쉬운 것이 아니어서 괜찮았던 것 같다. 하지만 1차 공격 방어 문제들이 생각보다 금방 풀렸고 2라운드 문제는 14시 30분에 공개되기로 하여 한 시간이 비게 되었다. 이런 상태에서 새로운 문제가 나오지 않으면 그것은 그거 나름대로 팀의 손해라고 생각되어 운영진한테 말씀을 드린 거로 알고 있다. 그 때문인지 모르겠지만 13시 30분에 2라운드 문제가 나왔고 문제가 생각보다 쉽지 않았던 터라 기다리지 않고 말씀드리길 잘했다는 생각이 들었다.
Q. 인상 깊었던 문제는 무엇이었는가
인상 깊었던 문제는 2라운드의 문제로 악성코드 하나를 줬다. 보통 CTF에서 악성코드 문제는 단순하게 루틴을 따라가서 거꾸로 하면 풀리는 문제들이 많았는데 이 문제는 보통 악성코드 문제와는 좀 달랐다. 이번 CTF에서 나온 문제는 처음부터 끝까지 분석을 해야 했다. 프로그램 자체는 정상적인 프로그램이었지만 어떠한 기능을 삽입한 형태의 악성코드여서 그것이 약간 신선했다.
Q. 좀 더 정확하게 어떤 악성코드 문제였는가
아마도 악성코드 문제는 CNC 서버에 연결하여 GIF 형식 같은 패킷을 TCP로 주고받는 거였는데 어떤 특정 메시지가 전달되면 패킷이 호출되었다. 이런 문제는 가령 CNC가 어떤 요청을 했으니 CNC 문제만 해결하면 답이 풀리는 문제였다. 그래서 이 악성코드 중간에 소켓 관련 함수들이 어떻게 호출되고 지정되는지 그리고 이 함수들이 어떻게 쓰이는지 이런 식의 CNC 중점으로 분석했다. 중간서부터 분석해서 어찌어찌 푼 것이지 아마도 처음부터 분석하라고 했으면 못 풀 수도 있지 않았을까 생각한다.
좀 더 자세히 얘기하자면, CNC로 패킷으로 GIF 파일 2개와 어떤 프로그램을 줬다. 본 문제는 이렇게 CNC에서 날아와 네 번째로 실행되는 명령어가 무엇인지 푸는 문제였다. GIF파일 두 개 중 하나는 연결 전에 암호화를 담당하는 파일이었고 다른 하나는 연결한 다음에 암호화를 담당하는 루틴이었다. 게다가 CNC 서버가 그냥 서버가 아니라 블루투스 서버였다. 블루투스로 통신한다는 문제였는데 내용도 신선하고 문제도 신선해서 재밌었던 것 같다.
Q. 다른 문제는 뭐 풀었는가
사실 위에 문제를 푸느라 다른 문제를 많이 못 봤다. 거의 완전히 저 문제에 삘(Feel!!)이 딱 꽂혀 있었기 때문에 다 풀고 나니 팀원들이 다른 문제는 다 풀어놓고 몇 문제 안 남겨 놨었다. 팀원들이 참 잘한다.
Q. 보통 CTF에서 어려운 문제만 골라 푼다는 이야기가 있다. 어떻게 생각하는가
그런 경우는 보통 배점이 높은 경우다. 그런 문제를 잘 풀면 금상첨화지만 쉽지가 않다. 그래도 그런 문제 대충 스스슥 풀어서 점수 어느 정도 올려놓으면 다른 팀들이 ‘아 얘네 뭐지’ 그런 시선이 재미있는 것 같다. 근데 그런 상황이 거의 없다. 특히나 PPP같은 그런 사람들이 참가했을 때에는 그런 상황이 거의 없다.
Q. 고대 사이코(Cykor)팀이 우승할 수밖에 없었던 이유는 무엇이라 생각하는가
제가 생각하기에 저를 포함해서 팀원들이 잘해서 우승하는 것 같다.
Q. 어떻게 그렇게 잘하는가
문제풀이에 대한 생각이 다 다르고 어떻게 공부하는지 몰라서 다른 팀원들이 어떻게 잘하는지는 모르겠다. 저 같은 경우는 평상시에 열리는 대회 문제는 다 풀려고 한다. 그렇게 계속 문제를 풀다 보니 다른 문제의 플래그 함수가 어디 있는지가 보인다. 그러면 다른 부분은 보지 않고 곧바로 플래그 함수를 찾아 역으로 분석하다 보면 문제가 풀린다. 너무나 꼼수지만 이런 것이 생각 외로 잘 먹힌다. 그런 의미로 이번 NSR 문제가 좀 신선했던 것 같다. 뭔가 답이 어느 부분에 있어서 그 부분으로 가면 되는 문제가 아니라 그냥 처음부터 어떻게든 분석을 해야 했던 문제였다.
Q. 어린 다른 같은 친구들은 중간 이후에 문제들을 잘 못 푼다. 한마디로 초반에는 등수를 따라가려고 하지만 마지막에는 등수가 미끄러지는 경우가 많다. 이런 점에서 왜 그런지 이유가 무엇인 것 같은가
무언가 답변하기 모호한 질문 같다. 그래도 이걸 객관적으로 얘기하자면 못 풀었으니 당연히 점수가 안 올라가는 것이 맞다. 그러면 그 못 푼 원인을 알아야 하지만 사실 이건 너무 많은 요인이 있다. 그래서 무언가 딱 집어서 말씀드리기가 어렵다. 그래도 생각나는 이유가 하나 있다면 처음에 쉬운 문제들만 풀어 나중에는 어려운 문제만 남았거나 혹은 자기가 모르는 문제만 남았을 것이다. 이 같은 원인은 사실 풀어보는 수밖에 없는 것 같다. 이게 아니라면 뭔가 다른 원인이 있을 것이라 본다. 더불어 그 원인은 사실 자기 스스로 더 잘 알 것이라 생각이 든다. 그리고 그런 원인을 스스로 고쳐 나가면 이러한 문제를 해결해 나가지 않을까 하는 생각이 든다. 즉, 자기 자신을 잘 알아보고 그 원인을 찾아 극복해 나가야 할 것 같다.
추가로 얘기하자면 자기를 아는 방법은 여러 가지가 있을 것이다. 자아 성찰하는 방법도 있을 터이고 남들에게 물어볼 수도 있을 것 같다. 그렇다고 이렇게 말했다 하여 기죽어 할 필요는 없는 것 같다. 그냥 일단 몰랐던 것은 해보면 되는 것이다. 자기가 지금 못 한다는 것이 자기를 프레임을 씌운 것일 수도 있고 진짜 못하는 것일 수도 있고 이건 직접 겪어봐야 안다. 따라서 자기가 할 수 있다는 자신감을 느끼는 것이 좋은 것 같다. 내가 보기에는 누구나 할 수 있다고 생각한다. 좀 더 얘기해서 다른 분께 어떤 말씀을 드리면 이해하고 잘 따라온다. 이런 모습을 봤을 때 못 한다는 것은 그냥 자기 스스로 생각해서 못하는 것이거나 안 해봤거나 혹은 요령이 없거나 스스로 못한다고 한정 짓는 것으로 생각한다.
Q. 확실히 어린 친구들에게 자신감이 필요할 것 같다는 생각이 든다. 그러면 재작년에는 강력한 강자가 있었는데 최근에는 이렇다 할 강자가 없어 보인다. 그 이유는 다른 강자들의 실력이 떨어진 것일까 아니면 다 흩어져서일까 어떻게 생각하는가. 그런 친구들에 대해서 어떻게 생각하는가
제가 무엇이라 말씀드리기 어려운 것이 그분들이 어떻게 서로 이야기를 하고 랭킹에 대해서 어떻게 생각하는지 잘 모르기 때문에 무엇이라 말씀드리기 어려울 것 같다. 그나마 말씀드릴 수 있을 만한 것이 저의 경험인 것 같다. 저 같은 경우 갑자기 임정원이라는 친구가 나타나 해본 적 없는 시스템 해킹을 잘하고 데프콘 문제를 풀며 잘한다는 이야기를 들었다. 같은 동갑인데 계속해서 잘한다는 이야기를 들으니 뭔가 ‘아 얘 뭐지’ 이런 생각이 들었다. 특히나 고등학교 시절 대회에 참가하면서 뭔가 꼭 1등 할 것이라는 목표가 있었는데 갑작스레 임정원이라는 친구가 나타나니 뭔가 경쟁 마인드가 생겨났다. 그런 의미로 그 친구는 매우 강력한 동기부여가 되어준 것 같다.
Q. 지금 본인에게 임정원은 무엇인가
지금 정원이 같은 경우는 같은 팀이다 보니 서로 분담을 효율적으로 하면 시너지가 확 올라간다. 사실 그런 부분에서 집중하고 있어서 시스템 문제는 임정원 맡기고 나머지는 본인이 싹쓸이해서 문제 푸는 형식으로 한다. 그런 식으로 생활하다 보니 협력관계라는 생각이 든다.
Q. 그렇게 되면 본인은 시스템 문제를 못 풀지 않는가
못 푼다 해도 나 또한 못지않게 시스템 해킹 문제를 잘 풀어서 그다지 걱정되지 않는다. 물론 가끔 그 친구에게 시스템 해킹 문제를 다 맡기고 많이 안 풀다 보면 실력이 줄지 않을까도 생각이 든다. 뭐 그래도 그 친구가 간혹 대회에 안 나간다고 했을 때 내가 시스템 해킹 문제를 다 풀면 된다고 생각한다. 더군다나 솔로 플레이를 해도 점수가 어느 정도 나오니 괜찮다고 생각한다. 하지만 역시 그래도 그 친구와 함께 팀에 있으면 서로 협력하고 부족한 부분을 메꿀 수 있으니 좋다고 생각한다. 팀에서 부족한 부분을 메꿔 나가려고 최대한 노력을 했다. 그래서 리버싱이나 웹이나 이런 식으로 풀고 있다.
Q. 지금의 진용휘에게 예전의 임정원은 누구인가
진짜 한 명 있다. 물론 로키님도 계시지만 또 다른 한 분이 계신다. 그 분이 예전에 나를 해킹했었다. 그 분 나이가 1998년생이니 아마도 만으로 18살인데 그 분과 한번쯤은 얘기를 해보고 싶다. 한편으로는 임정원 때처럼 그 분이 잘하는 부분에 대해서 나도 못하겠냐는 생각이 들기도 하지만 그래도 뭔가 배우고 싶은 느낌이 더 큰 것 같다.
Q. 옛날에 이정훈이 지오 핫을 생각하던 그런 느낌인가
나이 가지고 뭔가 얘기하기는 정말 안 좋아하지만 그래도 그 친구가 존재한다는 것만으로도 재미가 있다. 영감을 많이 받고 사실 이 친구를 보며 나도 할 수 있지 않을까 그런 오기도 생기고 크롬 취약점도 찾아보고 그랬던 것 같다. 이 친구는 대학교 1학년부터 2학년 중반까지 동기부여를 준 친구인 것 같다. 당시 그 친구한테 해킹당한 것도 있고 슬럼프였는데 동기부여가 된 친구였다.
Q. 그러면 국내 최고라는 것에 대해 어떻게 생각하는가
국내 최고는 사실 목표가 좀 작아 보이고 세계 최고를 목표로 잡을 것 같다. 사실 인원이 적다 보니까 각자 잘하는 분야가 다 있을 텐데 인력풀이 작으면 그 분야 자체도 작을 수밖에 없다. 근데 본인이 관심 있는 분야가 외국에 있으면 당연히 해외 최고로 잡을 것이다. 국내에서 혼자 알고 있다면 그것이 무슨 의미가 있을지 생각이 든다.
Q. 이번 청소년부에서 우승한 친구들, 또 다른 어린 친구들이 또 다른 본인이라고 생각한다면 즉, 세대교체 그런 존재들이 계속 나와줘야 한다. 이거에 대해 어떻게 생각하는가
개인적인 생각으로는 당연히 그 친구들이 잘되었으면 좋겠다. 어떻게 보면 그 친구들이 집단으로 혹은 스스로 틀을 세워버리면 개인들이 주눅이 들고 못 견딜 것 같아서 그래서 그거에 대해 조심하려 한다. 페이스북에 글을 최대한 조심히 올리려고 하는 이유기도 하다. 그래서 그들을 본인이 판단하는 것이 그 당사자 귀에 들어갔을 때 어떤 영향을 미칠지 생각이 돼서 그냥 마음속으로 격려만 하고 있다.
Q. 어린 친구 중에 한 친구가 경쟁 이런 생각보다는 순수하게 지식을 습득하는 거에 대해서 흥미로워하고 그런다. 그래서 문제를 푼다는 느낌보다 지식을 봐서 좀 더 코딩에 가깝다. 이런 거에 대해서 어떻게 생각하는가
좋은 거로 생각한다. 그게 둘 중 하나만 존재하지 않는다. 즉, 서로 배제된 것이 아니므로 독립적으로 생각할 수 있는 부분이라 생각한다. 나도 배우는 것을 좋아한다. 더불어 나는 배우는 것은 중요하다고 생각하고 꼭 문제 푸는 거에 대해서 연연할 필요는 없다고 본다. 더군다나 나랑 비교한다면 좀 다르다. 나는 사실 아직 대회 문제를 풀어 순위를 올리고 그런 것이 재밌어서 계속하는 것이기 때문이다. 또한, 지식을 습득하는데 해킹대회, 꼭 그런 한 가지 방향일 필요는 없다고 생각한다. 대회가 아니더라도 지식을 키울 수 있는 다른 방법이 분명 존재하지만, 아직 발견이 안 된 것이라 생각이 든다.
2부에서 계속..