1부에 이어서 곧바로 2부 가보겠다.
Q. 본인은 여러 해킹대회에서 계속 우승했다. 해킹대회의 경험과 지식이 분명 도움이 될 것으로 생각하지만, 산업군이나 군에 들어갔을 때 이런 능력이 어떻게 사용될 수 있다고 생각하는가
해킹대회 문제를 풀면서 관심 있는 주제를 찾았다. 이런 경우가 흔한 경우인지는 모르겠다. 언젠가 CTF 문제를 풀다가 자동으로 해킹하고 프로그램 하나만 돌리면 취약점을 찾아준다든지 하는 자동 취약점 탐지 프로그램 분야에 관심이 갔다. 정확히는 자동으로 취약점을 찾는다든지 하는, 어떤 문제를 증명해주는 프로그램 말이다. 그러다 보니 이쪽과 관련하여 부수적으로 공부하고 있다. 이론적으로 가능한 것인지 확인해보고 싶은 마음이 있어서 더 파고들게 되었고 나중에 이런 분야에 관해 연구하고 싶다는 생각이 들었다. 특히나 이 분야는 계속해서 발전하고 있는 분야처럼 보였고 어느 정도 일정 수준이 되면 아마 대회 문제 등에서 취약점을 찾는데에도 많은 도움이 될 것 같다고 생각한다. 이런 분야에 한 번 빠져들어 보고 싶다.
Q. 무엇을 하고 싶은 것인지 좀 더 자세히 말해줘라
자동으로 어떤 문제를 증명하거나 취약점을 탐지하는 프로그램을 구현하는 것이다. 근데 막상 실전에서 사용하려면 변수가 너무 많아 어렵다. 예를 들어 프로그램 구조를 보면 어떻게 풀 수 있을 것 같다는 전략이 생긴다. 가령 알고리즘 문제도 비슷하다. 어떤 문제가 있는데 그것을 푸는 방법에는 여러 알고리즘이 있을 것이다. 또한, 알고리즘 수행 시간도 다 다르고 문제 구조에 따라 적용할 알고리즘이 달라진다. 이런 것까지 고려하여 취약점을 찾고 풀려면 해커들은 알고리즘까지 공부해야 한다. 솔직히 대회에서 이렇게 알고리즘까지 끼면서 광범위한 방면으로 문제를 내는 건 가혹할지도 모르지만 이런 문제 하나 정도는 괜찮을 것 같다.
프로그램 앵거(angr)를 예시로 들면 보면 앵거 프로그램으로 프로그램이 실행할 수 있는 여러 길을 찾아 앵거가 가지고 있는 몇 개의 알고리즘을 이용하여 더 빨리 풀 수 있다. 근데 막상 앵거에는 알고리즘이 몇 개 들어가 있지 않다. 이런 식으로 앵거는 프로그램이 실행할 수 있는 길을 찾아 문제를 푼다. 그런 의미로 앵거를 적용할 수 있는 문제는 길을 예상할 수 있는 프로그램으로 한정적이다. 하지만 내가 하고 싶은 것은 프로그램 길 찾기를 예상할 수 없는 프로그램 혹은 문제의 취약점이나 답을 풀 수 있는 프로그램을 만들고 싶다.
알고리즘을 직접 생각하거나 그런 문제들이 도전적이라 생각하고 재밌는 문제라고 생각하지만, 막상 대회에서 보면 너무 어려워서 재미가 없다. 그래서 그런 문제는 최대한 나중에 풀려고 한다. 어쨌든 다시 돌아와서 예를 들어 한 마디로 얘기하자면 프로그램에 브라우저를 넣어 주면 사전 지식이 없더라도 취약점을 찾아주는 프로그램을 만들고 싶은 거다. 근데 이게 가능 하려면 프로그램이 자바 스크립트도 알아야 하고 html도 알아야 하고 코드도 구현해야 하는데 사실 어려운 얘기긴 하다. 아마 나중에 생각하게 되지 않을까 싶다.
Q. 누군가 얘기했지만, 예를 들어 브라우저 같은 경우 이제는 다들 방어기법도 엄청 잘 구현해서 더는 취약점을 찾기가 어렵다는 말을 했다. 이제는 거의 예술의 경지라는 것이다. 이렇게 되면 먹고 살기 힘들어질 수도 있는데 그렇다면 다음은 무엇을 어떻게 해야 한다고 생각하는가
이 질문의 답변은 좀 다른 쪽에서 끌어와 답변하자면 지금 어려워지는 것이 아마 메모리 커럽션(Memory corruption)이 미티게이션(mitigation)을 통해서 어려워지거나 그런 식으로 특정 공격을 막으려고 할 것이다. 근데 취약점이라는 것을 보안으로 확장한다면 어떻게 될 것 같은가. 사실 로지컬 버그도 어떻게 보면 버그다. 근데 그건 어떻게 정의를 할 수 있을까. 그니까 어떤 식으로 보안을 정의할 수 있을지를 보려면 먼저 그 정의나 정책이 옳고 그름을 증명할 수 있는지, 사실 그거부터 봐야 하지 않나 싶다. 메모리 커럽션 같은 것도 그런 식으로 일반화할 수 있지 않을까 싶기도 하지만 아직 무언가 정의를 하기에는 감이 잘 안 와서 여러모로 배워나가는 입장이다. 한 마디로 보안이나 로지컬 버그나 그런 거 자체를 어떻게 정의하고 이를 적용해서 프로그램이 원하는 보안 정책을 가진 프로그램을 어떻게 만들 수 있을지를 말하기에는 아직 덜 배웠기 때문에 좀 확실하게 말하기 어려울 것 같다.
Q. 원하지는 않는 행동 혹은 생각지 못했던 행동 그걸 이용한다면 문제가 생길 수 있다는 이야기인가
그렇다. 프로그램을 구현하는 입장에서 완전하게 논리적으로 생각하지 못하는 부분이 있을 수 있다.
Q. 맞다. 해커들은 바늘구멍만 있어도 들어오는 것 같다.
사실 어떻게 연결하고 연결해서 들어가면 그 시스템은 뚫린 거다. 그거에 대한 정의가 솔직히 궁금하다. 아 근데 뭔가 그거만 또 너무 파고들면 재미가 없을 것 같아서 취미 같은 다른 관심사를 만들려고 하고 있다. 요즘 음악을 만드는 것이 흥미롭다.
Q. 한쪽 팀만 계속해서 우승하면 어떻게 될 것 같은가
잘해서 우승하는 것 자체에는 딱히 추가적인 의미를 부여하고 싶지는 않다. 개인이 잘하고 팀원들이 시너지를 내서 우승하는 것이라 생각한다. 개인적인 생각으로는 국내에서 CyKor가 우승한다는 시선도 있겠지만, 더 큰 무대에서 서로의 실력을 겨룰 기회가 많아져서 상향 평준화를 불러왔으면 좋겠다
Q. 고려대 싸이코(Cykor) 동아리가 어디까지 갈 수 있을 것으로 보는가.
많은 세계 대회에서 계속해서 우승하면서 이름을 알리면 되지 않을까 생각한다. 또 저력을 키울 필요도 있을 것 같다.
Q. 팀을 합쳐서 나가는 것에 대해 어떻게 생각하는가
그거에 대해서는 별생각이 안 든다. 합쳐져서 강팀이면 당연히 강팀이라고 본다. 가령 싸이코에 네 명이 있는데 서로 떨어트려 놓고 잘하느냐 물어볼 필요는 없다고 본다. 팀은 팀 자체로 의미가 있다고 본다. 서로 시너지가 있을 수도 있고 그 과정에서 배울 수도 있으니 그거에 대해서 크게 상관하지 않는다.
Q. 로키라는 이름 옆에 싸이코가 있다는 이런 얘기에 대해서 어떻게 생각하는가
매우 든든하다. 그 분 옆에서 대회를 함께 하면서 많은 것을 배울 수 있어서 좋았다. 한편으론 옆에서 뵐 때 무척 잘하시니 한번 쯤은 순수한 마음으로 겨뤄보고 싶기도 하다. 내가 약간 카트라이더를 어느정도 하는데 앞에 무척 잘하시는 분이 계시다면 한번쯤은 겨뤄보고 싶은 그런 마음이다.
Q. 어떻게 보면 그런 것이 슬램덩크의 산왕이다. 잘하는 애들끼리 모아놨더니 무조건 이기고 다닌다. 자기들끼리도 누가 잘하는지 모른다. 자체 경쟁이 잘 안된다.
말하기가 애매한 것 같다. 사실 그러다 보니 그분을 보면 그런 생각이 난다. 그래서 회의감이 좀 든다. 나는 잘하기 위해같이 하는 것인지 아니면 잘하려고 같이 하는 것인지 계속해서 생각하게 된다. 이런 부분에서 주변이 만든 틀이 있고 이미지도 있고 무의식적으로 계속 영향을 받는다. 사실 그러다 보니 그런 부분은 힘들다. 계속해서 그거에 대해서 마음속으로 논리를 부여하려고 고민 중이지만 그 부분을 치고 들어오는 무언가가 있다. 그래서 올해나 내년, 대학교 2학년 때쯤 폰투온(Pwn2own)에 나간다든지 시간이 좀 지나서 그런 식으로 해결해 보려 한다. 아무튼, 그런 마음들이 섞여서 계속해서 대회에 참여하고 있다. 그래서 여전히 고민이다. 대회에 참여하는 것이 맞는 것인지 하지만 다시 생각해보니 그건 맞는 것 같다. 대회에 나간다고 해를 주는 것도 아니고 근데 역시 계속해서 고민이 되는 것은 맞는 것 같다.
Q. 도전이랑 승리라는 공식에서 도전할 존재를 같은 편으로 껴놓으면서 생겨버린 그늘인 것 같다.
질문이 좀 자극적인 것 같다. 다른 분들은 어떻게 생각할지 모르지만 나는 벨루미나에서 키리졸브(KeyResolve)팀을 이길 수 있다고 팀원들에게 농담처럼 말하곤 했다. 아쉽게도 2등을 했지만 재밌었다. 국제적으로 Cykor팀을 알릴 수도 있었고 키리졸브랑 경쟁할 수도 있어서 좋았다. 아무튼 일단 그렇게 계속 하다 보면 이런 경쟁에 익숙해지지 않을까라는 생각이 든다. 서로 봐주는 경쟁도 아니고 서로 경쟁을 해야 재미있고, 재미가 있으면 되는 것 같다.
Q. 제일 중요한 건 자가발전인데 스스로 잘하시는 것 같다.
어떻게 생각을 해야 나에게 도움이 될지, 어떻게 해야 재미가 있을지 기준점을 정하기는 아직도 어려운 것 같다. 그렇지만 멈춰 있기는 싫은 것 같다. 뭔가를 배우든 다른 것을 배우든 그게 서로 합쳐져서 조금 더 나아갈 수 있는 것을 기다린다. 어떻게 보면 혼자서 하는 치열한 고민인 것 같다. 이는 개인적인 생각인 것이지 팀은 어떨지 모른다. 그래도 나아가는 것은 좋은 거라 생각이 든다. 다른 사람들과 함께 나아가는 것도 나쁘지 않아 보인다.
Q. 다른 팀원들도 이런 고민을 하는 것 같은가
그 부분에 대해서는 잘 모르겠지만, 자기들만의 고민이 있고 생각이 있을 거로 생각한다. 그들도 배우고 싶을 정도로 속이나 무척 깊어서 더욱 알 수 없다. 나의 입장에서는 팀원들을 알면 알수록 점점 그들에게서 배워가고 있다. 헛말이 아니라 정말 진짜로 그 친구, 후배, 선배님들에게 하나하나 배울 점들이 있다. 계속해서 참고하고 있다.
Q. 분위기를 좀 전환하여 더 가벼운 질문을 하겠다. 공부를 언제 시작하고 어떻게 했는지 새내기 보안 친구들에게 해줄 수 있는 말이 있는가.
초등학교 6학년 때부터 컴퓨터를 시작했다. 그때는 보안보다는 비주얼 베이직, 프로그래밍이었다. 당시 자주 가는 프로그래밍 카페가 있었는데 거기에서 누가 인터넷 브라우저를 만들었다며 자랑했다. 그걸 보고 나도 나만의 웹 브라우저를 만들어서 자랑하고 싶었다. 그때 IE에서 브라우저 컴포넌트를 이용해 웹뷰를 만들었었다. 그걸로 탭만 추가했지만 뭔가 UI를 그 때 나온 IE7, 8이나 크롬처럼 만들어보고 싶었던 것 같다. 이 후 중학교 1학년 때 본선에는 못 갔지만, 정보 올림피아드도 살짝 공부해보기도 하기도 했다.
그러다 중학교 2학년 때 외고 진학을 위해 컴퓨터를 잠시 그만뒀다. 그 전에 당시 ‘텍스트큐브 닷컴’에서 블로그 베타테스트를 한다고 하여 블로그를 시작했었다. 나는 얼리어답터가 멋있다고 생각하고 그런 걸 좋아한다. 아무튼, 그렇게 블로그를 시작하게 되었다. 블로그에다 프로그래밍한 것도 올리고 IT 소식도 퍼와 갈무리해서 올리다 보니 어느새 파워 블로거 같이 블로그 순위권에 올라가 있었다. 당시 윈도우7이 나온 10월 22일에 하는 블로그 런칭파티에도 초대되기도 했었다. 이렇게 컴퓨터를 계속 잡고 있다 보니 성적이 떨어졌고 아버지께서 공부하라며 블로그를 그만두라고 하셨었다. 그때 전교 4등이었는데 컴퓨터를 하면서 거의 1년 후에 100등으로 떨어졌다. 그렇게 컴퓨터랑 블로그를 그만두고 계속해서 미련이 남아있는 상태로 지내다가 중학교 3학년 말쯤에 다시 컴퓨터를 하게 된 것 같다.
당시 어떤 대회에 참가하려고 한 달간 공부했었다. 물론 한 달 동안 공부한다고 해서 되시는 분도 계시겠지만 나는 아니었다. 결국, CTF 하다가 본선도 못 올라가고 더군다나 사실 그 대회가 상을 좀 많이 줬었는데 하나도 못 타니 컴퓨터를 본격적으로 시작했다. 당시 불미스러운 일도 있어서 결국 외고는 못 갔지만 3학년 말쯤 다시 본격적으로 컴퓨터를 한 것 같다.
근데 컴퓨터라는 것이 내가 컴퓨터를 좋아해서 인지 모르겠지만, 컴퓨터를 하고 있으면 다른 것은 덜 떠올랐다. 그러다 컴퓨터 중독이 되고 음, 결국에는 빠져나왔으니 뭔가 중독이라 말하기 좀 뉘앙스가 그렇다. 아무튼, 어느 날 카트라이더 20시간씩 하다 보니까 갑자기 어느 순간 허무하다고 느꼈다. 그 후에는 거의 항상 아침에 일어나면 프로그래밍 카페 채팅방 켜놓고 온종일 채팅방에 눌러살았는데 갑자기 카페 회원 중 어떤 이가 웹해킹.kr 문제를 풀기 시작했다. 그러면서 나도 같이 문제를 푼 것 같다. 그걸 시작했을 때 보안은 생판 모르는 상태여서 어떻게 풀 수도 없고 그나마 내가 할 수 있는 것 프로그래밍이었다.
당시 SQL 인젝션 문제가 있었는데 그것이 무엇인지도 모르겠고 내가 할 수 있는 건 코딩이었다. 마침 학교 도서관에 플래시랑 MYSQL로 웹 페이지를 만드는 책이 있었고 책이랑 웹해킹.kr이랑 같이 공부하니 SQL 인젝션이 어떤 식으로 이루어지는지 개발 베이스로 이해한 것 같다. 특히, 코딩으로 하니 어떻게 다루고 어떻게 돌아가는지 빨리 배울 수 있었다. 해킹도 프로그램 위에서 돌아가는 것을 해킹하는 것이니까 괜찮은 방법이었던 것 같다. 결국, SQL 인젝션도 SQL에서 돌아가는 것이 맞으니까 말이다.
그렇다고 해도 처음에는 SQL 인젝션이 뭐고 웹 해킹이 무엇인지 잘 몰랐던 터라 사실 풀이를 봤다. 이것이 무엇인지 알아야 플래그를 딸 텐데 무엇인지도 모르니 워 게임 풀이 같은 것을 보면서 공부했다. 보면서 혼자서 ‘아 이렇게 되는구나’하기도 하고 하나하나 읽어보면서 중간에 ‘아~’하기도 했다. 그런 식으로 가지를 계속 뻗어 나가면서 공부를 했다.
워게임에서 한두 문제는 몇 가지 지식만 있으면 되지만 그것을 다 풀라면 이야기가 다르다. 여러 가지 지식이 있어야 했다. 그래도 프로그래밍 관련해서는 웹 언어도 배웠었고 독학도 해본 경험도 있고 가장 컸던 것은 공부해서 성적이 잘 나왔던 경험이 있다 보니 할 수 있을 것 같았다. 배워본 경험이 있으니 이 분야도 배울 수 있을 것으로 생각했다.
앞에 서론이 길었지만 결국에는 나뿐만 아니라 다른 분들도 자신감을 가졌으면 좋겠다는 말을 하고 싶다. 내가 그런 공부한 것에 대한 성공한 경험을 한 것은 초등학교 경험이다. 초등학생한테 컴퓨터는 어렵다고 본다. 그렇지만 자신감은 가져 볼 만한 것 같다. 더군다나 지금 하는 친구들을 보면 그 정도는 이해해서 스스로 가지를 쳐서 공부할 정도는 된다고 본다. 문제는 주변에서 물질적이든 정신적이든 지원이 가능한지가 문제인 것 같다.
또한, 어떤 것을 배우면서 이건 되고 이건 계속 공부해야 하니까 절대 안 되고 약간 이런 식으로 재면서 공부하는 것은 아니라고 생각한다. 그러지 않았으면 좋겠다. 그렇게 재지 않고 공부할 수 있는 그런 환경을 주변에서 만들어줬으면 좋겠다. 설령 그것이 보안이든 아니든 이렇게 재지 않고 공부해서 성공한 경험이 있는 것은 가치 있는 경험이라 생각이 든다.
한 마디로, 내 생각은 자신감을 가지고 모르면 풀이 보면 되고 어떤 것에 대해서 무조건 하면 안 된다 이런 건 없다고 본다. 물론 당연히 배우려면 답만 베끼지 말고 그게 어떻게 돌아가는지는 알아야 한다.
개인적인 추천으로 처음 시작할 때 어떻게 돌아가는지 좀 더 쉽게 이해하려면 개발을 해보는 것도 좋을 것 같다. 나는 ‘개발’이 도움이 된 것 같다. 좀 더 덧붙이자면 개발뿐만 아니라 정보처리기사나 자격증 취득할 때 운영체제 그런 배경지식 같은 것도 도움되는 것 같다. 사실 SQL 인젝션도 거기서 처음 알았다. 설령 엑셀, 워드 이런 거 하나하나도 나중에 배경지식으로 도움이 되는 것 같다. 그 지식 자체가 도움되거나 혹은 어떤 도구로 도움이 되거나 어쨌든 도움이 되는 것 같다. 물론 이거부터 무조건 배워야 한다는 것은 아니지만 이런 지식도 도움이 될 것이라는 생각에 말씀을 드리고싶다.
이런 걸 구체적으로 말하는 것이 좀 죄책감이 드는 것도 있다. 이건 정해진 해결 방안같은게 아니기 때문이다. 내가 그렇게 말함에도 결국 생각하는 거나 행동하는 것은 자기 자신이다. 다른 분들이 만약 하다가 절망하거나 힘들어하면 좀 마음이 아프기도 하고 괜히 말해줬나 하며 나중에 후회할 때도 있곤 한다.
Q. 어떻게 보면 배려가 심한 걸 수도 있다.
그렇다고 너무 또 어중간하면 그것대로 문제가 있을거같다. 말에 의미를 다 담을 수는 없지만.. 일단 스스로 배우면 가지치기 하면서 공부할 수 있게 되고 그 과정에서 당연히 도움도 받을 수 있을 것이다. 그 과정에서 패턴을 익히든 무엇을 배우는 것이든 원리를 깨닫는 것은 당연히 중요하고 일단 할 수 있다는 자신감을 가지는 게 제일 중요한 것 같다. 결론은 어떤 작은 문제를 풀었어도 그건 하나의 성공한 경험이니까, 그 부분에서는 충분히 자신감을 얻어도 좋은 것 같다.
한 가지 덧붙이자면 맨 처음에 답안지를 볼 때 답만 봐야하는지 풀이를 봐야하는지 모르는 경우도 있는데, 당연히 풀이를 보는게 더 좋을 것 같다. 어느 정도 실력이 되면 분명 답만 체크해도 되는 것들이 있을 것이다. 하지만 처음부터 풀이 없이 답만 보는 것은 잘못된 생각인 것 같다. 수학 선생님이 재차 해주셨던 말이다.
Q. 마지막으로 청소년 때 우승했고 지금도 우승했고 과거를 돌아봤을 때 다음 청소년부를 우승할 아이들과 아니면 동 세대 친구들에게 하고 싶은 말이 있는가
각자 생각하거나 배운 것이 다 다르다. 어떻게 생각할 수 있는지 어떻게 돌아가는지 구조를 보는 관점도 다 다르다. 보안 분야를 시작한 그 사람이 이 분야에 있는 문제를 어떻게 생각하고 어떻게 해결해 나갈지 기대가 된다. 개인적인 경험을 좀 더 말하자면 항상 대회의 문제를 풀 때 다른 분들의 라이트업을 본다. 다른 분들은 어떻게 생각하고 풀었는지 그게 궁금해서 보게 된다. 나는 대회 측면에서는 거기서 많이 배운다. 그런 것들이 기대가 된다.
또 한 가지 하고 싶은 말은 본인도 맨 처음에 코드게이트 문제 하나도 못 풀었다. 청소년 대회 나간 것도 어느정도 하다 나가긴 했지만 사실은 이러면 안되는데 어찌어찌 물어가 보며 풀었다. 그래서 간신히 15등 하기도 하고 그랬다. 상 탄것도 아니니 지금은 얘기할 수 있지 않을까 싶다. 그러며 안된다. 규정상 어긋난다. 말하고 싶었던 것은 당연히 처음부터 잘 한 것도 아니니 그런 부분도 자신감을 가졌으면 좋겠다. 일단 본인이 그런 종류의 천재는 아닌 것 같다..!
이번 인터뷰에서 나오는 질문이나 답변은 고려대 싸이코팀(Cykor)의 생각이 아닌 팀원 진용휘(Jinmo) 친구의 의견임을 밝힌다. 더불어 이 친구의 생각이나 답변이 자신과 다르다 하여 나쁘게 보실 분은 없으실 거라 믿는다. 실제로 인터뷰할 때 자신의 답변으로 다른 분들에게 피해가 가거나 기분이 상하지 않도록 조심스럽게 얘기하기도 했다.
아무튼, 무려 한시간 반에 가까운 인터뷰에 기분 좋게 응해준 진용휘 친구에게 고맙다는 말을 전하고 싶다. 앞으로 꽃 길만 걷기를 바랍니다. :)
P.S. 인터뷰가 끝나고 간장게장을 맛있게 먹던 너의 모습이 생각나, 몸 챙겨 이 친구야. 건강최고