1편 이어 2편으로 바로 넘어가 보겠다. 오늘은 페이스북과 메시지, 그레이해쉬의 익명게시판을 통해 받은 질문을 가지고 박세준님과 함께 인터뷰했던 내용을 담아봤다. 오프라인에서 뵌 박세준님은 필자보다 인터뷰 분위기를 더 편안한 분위기로 만드시고 많은 이야기를 담아 내주려고 하셔서 개인적으로 너무 감사했다. 오늘은 인터뷰를 기다렸던 만큼 이 글을 보시는 모든 분들이 재미있는 시간이 되길 바란다. 혹여 나온 질문 중 내 질문이 없다면 아직 안 나온 걸 수도 있고 혹여 전 편의 질문과 중복되어 분류된 걸 수도 있으니 참고하기 바란다.
Q. 엄청난 실력자들이 모여있는 PPP인데 본인을 제외하고 PPP에서 해킹 최강자는 누구인가. |
해킹, 제일 잘한다... 딱 한 명 고르기가 어렵다. 전반적으로 말하는 건가 |
Q. 맞다. 세 명을 고르자면? |
세 명을 말하라면 일단 앤드류라는 친구. 룸메이트이기도 하고 PPP의 초대 멤버로서 계속 활동하는 친구다. 이 친구는 정말 다양한 분야에서 잘하는데 특히 시스템 해킹이나 리버싱을 전문적으로 한다. 두 번째는 리키라는 친구인데 중국 친구다. 근데 미국에서 자라 영어를 더 잘한다. 이 친구는 크롬 보안팀에 있다가 최근에 스패너라는 분산 데이터베이스 시스템 팀으로 옮겼는데 이 친구도 정말 잘한다. 한 때 포너블 문제는 거의 혼자서 휩쓸었던 적도 있었다. 최근에는 큰 대회 몇 개 정도만 하고 대회를 많이 참여 안 해서인지 감이 살짝 떨어져 문제 푸는 것이 이전 같지 않다. 그래도 어려운 문제가 나오면 어떻게든 풀어내는 친구다. 마지막 한 명은 로버트라는 친군데 그 친구는 학교에서 박사 과정을 하고 있다. 현재 보안 분야로 공부하고 있는 친구는 아니다. 그가 밟고 있는 박사과정은 보안과 전혀 무관한 휴먼 컴퓨터 인터랙션(HCI, Human Computer Interaction)이라는 것으로 HCI는 터치 패드 같은 것을 좀 더 생동감 있게 터치한다는 느낌이 들도록 하는 기능이다. 예를 들어, 핸드폰을 만질 때 터치 느낌을 전극같은 신호를 조정해서 보내 사용자가 생동감 있는 터치를 느낄 수 있도록 그런 쪽의 연구를 하고 있다. 현재 보안 분야를 하는 것은 아니지만, 국제 정보 올림피아드(IOI, International Olympiad in Informatics)라고 해서 국제 컴퓨터 프로그래밍, 구글 코드잼 같은 것도 잘한다. 해킹은 뭔가 취미로 시작했다가 PPP에 들어와서 극강 캐릭터가 된 친구 중 한 명이다. 수학적으로도 잘 알아서 암호도 잘하고 리버싱이나 포너블도 꽤 잘한다. 사실 다양성만 보자면 로버트 친구가 1인자다. 보안과 관련 없는 필드도 잘하면서 보안도 잘한다. 근데 해킹만 놓고 시스템과 보안만 보자면 우열을 가리기 힘들다. 그래도 손을 들자면 좀 더 옆에서 봐왔던 앤드류에게 한 표다.
|
Q. 많은 이가 박세준님을 보고 감탄사를 한다. 그걸 알고 있나. |
과대 포장 현상이 어느 정도 있는 것 같다. 워낙 팀원들이 잘해서 캐리 받은 것도 많고 물론 내가 더 많이 풀 때도 있었다.ㅎ 그건 그때그때 컨디션과 상황에 따라 그리고 문제에 따라 달라진다. PPP에 있는 친구들은 저보단 훨씬 더 잘하는 친구들이다. 그래서 항상 배우고 있고 그 부분은 질문의 여지가 없다. |
Q. PPP 내에서 실력 격차에 대해 어떻게 생각하는가. 너무 확연하게 느껴져서 따라잡고 싶은 사람이 있는가. 아니면 다들 비슷하다고 생각하는가. 비슷하다면 경쟁의식이 없는 건가. |
아까도 말했다시피 자기가 좋아하는 분야가 확실하고 잘하는 분야도 확실해서 말하기가 어렵다. 예를 들어 포너블 문제가 나오면 리키 같은 경우는 타이핑이 무척 빠르고 익스플로잇 코드도 좀 기계적으로 구현한다. 취약점을 찾았을 때 익스플로잇 코드를 작성하는 것은 그 친구가 제일 빠르다. 하지만 가끔씩 리버싱 삼매경에 빠져서 필요없는 분석까지 하느라 느릴 때가 종종 있다. 하지만 버그를 찾거나 리버싱을 하는 것은 좀 다른 문제다. 다시 말해 리버싱을 잘하는 것과 익스를 잘하는 것은 다르다. 버그헌팅은 어떻게 보면 하나하나 이해하면서 버그를 찾기 위해 꾸준히 봐야 하는 것으로 앤드류나 나는 그런 것을 잘한다. 반면 리키라는 친구는 조금 활발한 성격이라 가만히 있는 걸 잘 못한다. 분석하다가도 여기서 좀 보고 넘어가고 다른 곳에서 좀 보고 넘어가고 그러다가 하나 걸리면 빨리 찾는 거다. 반대로 찾기 어려운 곳에 버그가 있다면 그런 것들은 놓치는 경우가 있다. 그런 부분에서 리키는 예전에 “자기는 그런 부분이 부족하니까 나는 너희처럼 차근차근 분석하고 확실하게 이해하고 넘어가고 싶다”라고 말한 적이 있다. 또 나름대로 나는 리키 친구의 스피드가 부럽다. 왜냐면 뭘 하든지 나는 종이에 써가면서 천천히 해야 딱 그림이 나오는 방면에 이 친구는 스타크래프트 보는 것처럼 화면이 슈슈슉 바뀐다. 그걸 보면 “어떻게 저걸 따라가지”란 생각이 든다. 다시 답변을 정리하자면 “나도 그런 걸 할 수 있었으면 좋겠다.” 하는 거지 그걸 따라잡는다는 느낌은 아니다. 그래서 서로 자신의 단점을 고치기 위해 연습하고 또 반대로 서로 잘하는 것을 잘 융합해 상당히 좋은 효과를 나타낸다. 이런 점을 보면 확실히 우리는 팀워크가 잘 맞는다. 나랑 앤드류가 분석을 해서 취약점을 찾으면 보통 이 친구한테 넘긴다. 물론 여유가 있다면 나나 앤드류도 하지만, 급할때는 이 친구가 더 빠르니까. 다른 팀원들 역시 비슷하게 2-3명이 보통 조를 이루어 작업한다. |
뭔가 공장 같다. 문제 푸는 공장. |
맞다. 마치 공장에 분업화처럼 저희가 할 부분을 하고 넘긴다. 사실 그렇게 해야 경쟁력이 있다. 왜냐면 혼자 다 하다 보면 쉽게 피로해지고 대회 같은 경우는 오래 해야해서 체력적으로도 무시할 수 없다. |
Q. 대회를 잘 풀 수 있는 노하우 같은 건가. |
맞다. 그런 것에 일종이다. 아무튼, 서로 보면서 항상 자기 단점을 고치려고 노력한다. 자기가 딱 봐도 이 친구에 비해 뭐가 부족한지 직관적으로 보이지 않는가. 좀 더 덧붙이자면 팀 내에 경쟁 그런 것이 거의 없다. 오히려 대회 문제 중에서 못 푼 것이 있으면 나중에 그거에 대해서 물어볼 친구들이 옆에 있다는 점에서 좋다. 예를 들어 문제를 풀다가 막히면 “그럼 이거 어떻게 해야 해”라고 바로 물어볼 수 있다. 그나마 팀 내에서 경쟁이 있을 때는 문제들이 크게 어렵지 않을 때거나 열려있는 문제의 갯수가 적을 때 간혹 발생한다. 이것도 그냥 말이 경쟁이지, 경쟁이라고 해서 자기가 안 것을 서로 안 알려주고 공유 안 하고 그런 것도 아니고 서로 찾은 것을 던져 놓고 그걸 이용해서 누가 더 빨리 플래그까지 가느냐 그런 식으로 경쟁한다. 이게 더 재미있지 않은가. |
Q. 그런 팀 내 ‘경쟁’을 하면서 팀원들끼리 기분이 상했던 적은 없는가. |
기분이 상했다기보다 그냥 아쉬운 마음 정도? 답에 근접했을수록 그런 마음이 든다. 더욱이 문제를 풀면 어쨌든 팀한테는 좋은 점이 아닌가. 아, 그래도 예전에 한 번 그런 일은 있었다. 커뮤니케이션(communication)을 안 하고 문제를 풀다가 서로 저격당한 적이 있었다. |
Q. “저격당했다”는 말이 무슨 말인가 |
“저격당했다”는 같은 문제를 잡고 있는 두 명 중 한 명이 다른 사람보다 먼저 문제를 푼 시점에서 그 다른 사람도 문제를 거의 다 풀어둔 상황을 말한다. 그래서 이걸 보통 풀기 전에 저격을 당했다고 얘기를 한다. 근데 이게 무조건 기분 나쁜 것이 아니라 서로 작업하고 있다는 것을 알고 저격을 당하면 “아 저격당했네” 말은 하지만 막상 기분은 나쁘지 않다. 그냥 플래그에 거의 다 갔는데 먼저 했으니까 아쉬울 뿐. 근데 서로 모르는 상태에서 저격을 당하면 기분이 나쁠 수 있다. 같은 문제를 작업하고 있는데 알려주지 않았을 때 서로 감정이 상할 수 있다. 그런 일이 딱 한 번 있었다. 그래서 팀에 내분이 있을 뻔했지만 잘 화해하고 좋게 풀렸고 그 이후에는 자기가 무슨 작업을 하고 있으면 무슨 문제를 풀고 있다고 말하고 서로 공표하여 나중에 그런 일이 없도록 예방한다. 아무래도 이런 건 처음 팀을 만들고 모두가 겪어보지 못해 이런 거에 미숙하다 보니 생긴 일 같다. 더욱이 보통 학교에 있을 때는 같은 방에 모여 다 같이 하다 보니까 누가 뭘 작업하고 있는지 말하면 바로 서로 얘기할 수 있는데 그땐 딱 한 명이 원격으로 일하고 있었을 때였다. 그 당시에는 슬랙 같은 것도 없었고 IRC를 사용했는데, IRC를 잘 확인 안하다 보니까 누가 어떤 문제를 풀고 있는지 몰랐다. 그런 상황에서 원격으로 작업하던 친구가 딱 풀고나서 제출하려고 보니까 이미 누가 풀어둔 상황이었다. |
하긴 너무 아쉬울 것 같다. |
그 친구는 감정이 상해서 자러가버렸다... 하지만 이건 옛날 얘기고 요즘 그런 문제는 없다. 자기가 무언가를 찾으면 다 공유하고, 경쟁보다 “내가 이거 작업하고 있다”라고 알려주는 정도다. |
Q. 날로 발전하는 보호 기법 때문에 점점 취약점 익스플로잇 하기가 어렵다. 본인이 생각하기에 가까운 미래 취약점 익스플로잇이 불가능한 날이 올 것 같은가 |
확실하게 말하자면 취약점이 없어지고 있는 것은 아니다. 어찌됐든 사람은 계속 실수하기 때문에. 취약점은 존재하지만 단지 그것을 성공적으로 공격하기는 기하급수적으로 어려워지고 있다. 그래서 그 부분에는 나도 사실 확신이 안 선다. 이게 어려워지고 있는 것은 사실인데 그렇다고 이게 불가능한 것은 아니다. 매번 뭔가 나올 때마다 그 난이도와 신뢰성은 확실히 올라간다. 그래서 2~3년 뒤에 이게 불가능해질까. 그건 아니라고 보는데, 10년, 20년 뒤에는 확실히 지금 타겟들은 성공적으로 익스플로잇하기엔 불가능에 가까워질 수 도 있지 않을까라는 생각은 한다. 하지만 다행인 것은 (취약한) 새로운 플랫폼이 꾸준히 나오고 있다는 점이다. 예를 들어 최신 윈도우 환경에서 새로 나온 브라우저는 여러 최신 보호 기법이 다 들어가 있어서 공격하기 어렵다. 하지만 그렇다고 해서 모든 프로그램에 다 적용이 되어 있는 것은 아니다. 그리고 또 IoT같은 임베디디 기기도 여러 위협에 그대로 노출되어 있다. 사실, 요즘의 최신 보호 기법을 적용할 수 있는 가장 큰 이유는 최근 나오는 하드웨어의 퍼포먼스가 상당히 높아져서이다. CPU가 엄청나게 좋아지고 램도 많이 가지고 있고 디스크도 SSD로 바뀌었고 그래서 보안기법 추가로 어쩔 수 없이 따라오는 오버헤드를 커버할 수 있게 되었다. 예전에는 느려서 못했던 것들을 이제는 모두 적용할 수 있게 되었다. 반면, IoT 기기는 보통 CPU를 저가로 맞춘다. 그렇기 때문에 사양이 상당히 낮다. 그런 경우에는 이런 보호 기법을 적용할 수 없다. 그래서 공격을 당할 수밖에 없고 익스플로잇하는 난이도도 쉬운 편에 속한다. |
Q. 즉, 임베디드 기기를 익스플로잇하기 좀 더 쉽다는 말하는 것인가. |
그렇다. 하지만, 임베디드 기기에서 취약점을 찾으면 익스플로잇 하기 쉬운 편에 속한다는 말을 했지만 그렇다고 해서 접근하기가 쉽다는 것은 아니다. 이건 또 다른 문제다. 왜냐하면, 최신 운영체제에서의 브라우저 같은 프로그램들은 디버깅 환경이 잘 갖추어져 있기 때문에 분석하기가 편하다. 이쪽은 사람들이 계속 연구해왔고, 관련된 툴이나 지식이 많이 쌓였다. 반면에 IoT, 임베디드 기기 같은 경우에는 하나로 단일화 되어있는 플랫폼이 아니고 제품에 따라서 환경 또한 아주 다양하다. 하드웨어도 다르고, 당연히 그에 따른 디버깅 환경도 달라진다. 그래서 임베디드를 위한 툴이나 디버깅 환경을 구축하기 어렵고, 간혹 디버깅을 하는게 불가능에 가까운 상황도 존재한다. 예를들어, 아이폰을 포함한 요즘 나오는 폰들이 그렇다. 이런것들은 웬만해선 OEM 처럼 해당 기기를 실제로 만들거나 부품 파트너 회사 등이 아닌 이상 로우레벨 디버깅 환경을 얻기 어렵다. 탈옥 등을 막기 위해 많은 보안 체계를 추가했을 뿐만 아니라 하드웨어 상에서도 내부 테스팅 이외에는 디버깅을 허락하지 않는 장치를 해두기도 한다. |
Q. 디버깅을 못하는 기기가 무엇인가 |
아이폰을 포함한 요즘 나오는 폰 들을 말한다. 그런 거는 웬만해선 OEM처럼 같은 기기를 실제로 만들지 아닌 이상 보통 우리가 고객으로서 그런 환경을 보기 어렵다. 셀럽(Celeb)하기가 많이 막혀있기 때문에 보안상의 이유로 디버깅 환경에 접근하기가 쉬우냐, 어려우냐는 제품마다 다른 것 같다. |
Q. 며칠 전에 오버워치를 하는 동영상을 봤다. 오버워치 잘하나. 레벨이 몇인가 |
열심히 한다. 레벨은 높다. 요즘 일 아니면 오버워치를 한다. |
잘하는가. 주 캐릭터 뭔가. |
그냥.. ㅎㅎ 주로 서포터를 많이 한다. |
서포터라 하면은 힐러? |
힐러 쪽 많이 하고 메르시나 아니면 루시우. 가끔가다 아나 정도 그리고 딜은 그냥 필요할 때 한다. 근데 보통 필요할 때가 없다. 웬만한 사람들이 다 딜을 해서. 탱커는 손이 잘 안 간다. 탱커는 포지션닝을 잘해야 해서 보통은 돌격할 때만 윈스턴 하는 정도다. 티어는 그냥 보통 시즌마다 다이아에 상주하는 것 같다. 레벨은 500 정도… |
오,, 전 340 정도다 ..ㅎ |
아 만만치 않게 하셨군 300 이면 ..ㅎ |
Q. 그럼 본론 질문. 오버워치 후킹(hooking) 관련하여 라이트업(write up)이나 접근법에 대해 공개하실 생각이 있는가 |
그냥 호기심에 작업한 이후로는 들여다보지 않아서, 요즘에 어떻게 바뀌었는지 모르겠다. 블리자드 쪽에서 보안을 생각보다 많이 신경 쓴다는걸 느꼈다. 룸메이트인 앤드류가 리눅스 Wine에서 오버워치를 돌리기 위해 작업하는것을 도와주다보니 자연스럽게 분석하게 되었다. 코드를 보니까 안티 디버깅과 안티 리버싱이 정말 많이 들어가 있는데 이를 보고 흥미가 더 생겼다. 사실 고등학교 때 이후로 오랜만에 하게 된 게임 해킹인데 실시간으로 후킹 한 것은 아니고 그냥 메모리에서 덤프를 뜬 다음 그걸 분석하는 방식으로 진행했다. 오버워치는 바이너리가 암호화되어 있는데 필요할 때만 이를 복호화해서 사용한다. 그리고 내부적으로 쓰이는 힙 포인터도 암호화되어 있는데, 그 때문에 메모리에서 포인터를 따라가기가 쉽지가 않았다. 사실 핵을 만드는 것은 어렵지 않은데 메모리 변조를 통해 핵을 바로 쓰면 서버 쪽에서 알아채기도 쉽고, 굳이 승패에 크게 신경을 안쓰므로 핵 만들기에는 별로 관심이 없었다. 내가 만들어서 올린 것은 핵보다는 어시스트 비슷한 역할의 느낌이다. 게임을 대신해주는 것이 아니라 보통 경쟁전 들어가면 그 사람들이 가장 많이 플레이하는 영웅이나 플레이 시간 등의 스텟들을 수작업으로 확인해보는데 이것을 자동으로 보여주는 거였다. |
아 서류 검사! |
내 팀에 있는 사람들이 가장 잘하는 영웅을 알아야 서로 조합을 맞추기 쉽지 않나. 근데 그걸 사람들이 부끄러워서 그런지 귀찮아서 그런지 잘 모르겠지만 팀보로 들어와서 얘기하면 좋은데 아무 말도 안 하거나 팀보도 안 들어오는게 태반이다. 그렇다 보니 아무거나 픽하고 게임하다가 서로 감정 상해버리면서 던진다. 난 게임을 즐겁게 하고 싶어서 해당 문제점을 최소화하여 필요한 픽을 하길 바랐다. “이 사람이 진짜 잘하는 픽을 주고 나머지 픽을 채워넣자” 이 마인드인데. 그걸 위해서 애드온을 만든 거다. 그래서 탭을 누르면 그 사람들의 스텟을 다 볼 수 있게 하였다. 그 시즌에 한해서 가장 많이 플레이 한 영웅 다섯 그리고 그 옆에 각 승률이 표시된다. 아 그리고 우리 팀뿐만 아니라 상대팀의 것도 보인다. 그래서 상대팀이 어느 조합으로 나올지도 대충 예상이 가능하다. 예를 들어 상대팀에 파라가 있을 것 같다 싶으면 바로 솔저를 간다. 그런 식으로 미리 대처할 수 있는. 이건 좀 치팅 (cheating) 느낌이 나긴 한다 ㅋㅋㅋㅋ |
Q. 수비전 같은 경우는 먼저 가야 하는데 오 괜찮은 것 같다. |
그렇다. 상대팀이 나오기 전에 조합을 알고 가면 편하니까. 그래서 잠깐 취미 삼아 연구했었는데 이걸 하면서 가장 까다로웠던 것 중 하나가 코드가 매 패치마다 엄청 바뀐다는 점이었다. 아까 포인터 암호화를 한다고 했는데 이걸 복호화는 루틴이 매번 빌드마다 바뀐다. 빌드마다 바뀌는데 그게 또 설치된 컴퓨터마다 다른 코드가 실행된다. 정확히는 돌아가는 컴퓨터 사양 (physical memory 크기)에 따라서 랜덤하게 실행된다. RAM이 얼마나 있느냐에 따라서 16개의 랜덤 코드 중 하나가 돌아가는거다. 그렇게 게임 데이터를 매번 암호화를 하고 복호화를 한다. 이런식으로 매번 코드가 다 달라지니까 뭔가 딱 한 가지 알고리즘을 내놓기도 힘들었다. 그래서 해당 루틴을 메모리에서 읽어와서 CPU 에뮬레이션을 통해 필요한 결과 값을 그때그때 뽑아냈다. 이렇게 처리하니 어떤 알고리즘으로 암호화 혹은 복호화를 해도 성공적으로 데이터를 빼낼 수 있었다. 그렇게 포인터 복호화를 하면서 따라가 보면 필요한 데이터의 데이터 구조가 나오는 거다. 배틀 태그라든지 아니면 그 사람의 팀보이스 SIP 정보 등 별의별 게 다 있는데 나 같은 경우엔 배틀 태그만 필요했다. 태그를 알아낸 후, 그 사람 정보나 전적을 보여주는 웹 사이트나 배틀넷에서 API 써서 필요한 정보를 가져오고 디스플레이 해줬다. 근데 블리자드에서 생각보다 업데이트를 자주 하더라. (열일하는 블리자드..ㅂㄷㅂㄷ) 패치가 있을 때마다 업데이트되니까 그럴 때마다 코드는 랜덤으로 바뀌었다. 정리하자면 블리자드가 쓰는 난독화 솔루션은 빌드할 때마다 자동으로 다른 코드를 생성해서 그때마다 오프셋 등을 고쳐줘야 한다. 근데 이게 은근 귀찮기도 하고 바빠져서 요즘은 잘 안 한다. |
Q. 띠어리는 무슨 의미인가요 더오리와 중의적 의미인가. 뭐야 이거 웃기잖아ㅋㅋ |
오리랑은 전혀 관계가 없는데…(시무룩) 한국 명칭은 티오리 코리아다. 아무튼, 질문의 답변을 하자면 띠어리는 이론(theory)이라는 뜻을 가진 영어 단어에서 시작했다. 고급 여성브랜드 때문인지 좀 고풍스러운 느낌이 나는 것 같기도 하고. 근데 그것 때문만은 아니고 띠어리가 우리 회사에서 추구하는 연구개발 방향을 뜻하기도 한다. 그게 뭐냐면, 학계 쪽에서 나온 연구 결과들은 보통 "최상의 조건에서 이런 연구를 했더니 이런 결과가 나왔더라" 라는 이론적인 연구들이 많다. 보안분야도 마찬가지고. 근데 이걸 현실에 적용하려다 보면 항상 문제가 많이 생긴다. 현실의 벽에 부딛히는 거다. 그런 거를 우리가 어느 정도 타협해서 보안성은 조금 손해를 보지만 대신 현실에서 적용할 수 있는 단계로 구현하는 연구를 진행한다. 이론적으로만 남는 것이 아니라 현실에도 남을 수 있도록. 그런 식으로 띠어리, 이론으로 시작해서.. 'i', Imagination (상상력)을 통해 변신시키는..은 사실 지금 만들어냈다. 그럼, 그레이해쉬는 무슨 뜻으로 만들어졌는지 아는가. |
Q. ㅎㅎㅎㅎ… |
다 그런 거다. ㅎㅎㅎㅎ |
Q. 그레이해쉬 vs 띠어리 오버워치 한 판 붙는 것이 어떤가. 핵 만들기도 가능하다. |
핵 만들었다고 리포트 해야지. 게임에서 핵 사용해서 하는 것은 별로 안 좋아한다. 재미가 없다. 차라리 이런 건 좋아한다. 요즘에 제일 핫한 AI 주제로 스타크래프트 AI 끼리 만들어서 그걸 붙이는 건 재미있을 것 같다. 그건 어떻게 보면 실력 대전이잖는가. 근데 당연히 봇이 잘할 수밖에 없는 걸 만들어놓고 사람이랑 하는건 재미없다고 생각한다. 핵 만드는 건.. 분석을 많이 하셔야할 텐데 ㅎㅎㅎㅎ 그냥 오버워치 리그는 재미있을 것 같다. 우리 회사의 다른 연구원님들이랑도 피시방 가서 오버워치하고 그랬다. 다 잘하더라. 나랑 앤드류는 다이아에 있고 김대준 연구원은 많이는 안해서 랭크는 없는데 타고난 감각을 보여줬다. 빠른대전에서만 했지만, 충분히 랭전에서도 승산이.. |
한판 붙으시죠 |
여기가 에이스같은데 |
전 에이스가 아니다. 위도우 픽 |
제일 잘한다고 생각하는 친구가 누구인가. |
그냥 어린 친구들이 잘한다. 승진오빠나 다른 분들보다는 어린 친구들이 참 잘한다. 행님들 게임 멘탈은 지켜 드리고 한 판 붙으시죠. 멘탈을 지킨다고 표현하고 승리를 위해, For grayhash! |
그럴 수 있다. ㅎㅎ |
Q. 공부하면서 내가 이렇게 공부하는 것이 맞는지 의문이 들 때가 있었는가. 이런 의문이 들었을 때 어떻게 하셨는지도 말해달라 |
보안 쪽에 대해서 의문이 들었던 적은 없다. 다만, 대학교에 가서 컴퓨터 과학 전공을 공부할 때 1학년은 정말 힘들었다. 나 같은 경우에는 미국 공립고등학교에서 그냥 열심히 해서 대학을 간 케이스인데 사실 운도 많이 따라줬다. 근데 거기에서, 특히 한국에서 우리 과로 오는 친구들을 보면 거의 다 민사고, 외고, 과학고 출신.. 다른 출신을 본 적이 없다. 그래서 이미 공부는 한국에서도 탑 클래스로 잘하던 친구들인데 그런 친구들이랑 같이 공부하다 보니 친구들은 이미 알고 있는 것들 중에 내가 모르는 것이 너무 많았다. 그 때문에 한동안 스트레스를 매우 많이 받았다. 과연 컴싸 전공이 나한테 맞는 것인지도 헷갈렸고. 난 컴퓨터를 (가지고 노는것을) 좋아해서 컴퓨터 전공을 했는데, 컴퓨터 과학에 갖가지 수학 이론, 알고리즘, 로직, 증명 등 이런 이론적인 부분이 많을 줄 몰랐다. 그냥 컴퓨터만 하면 되는 줄 알았다. 학교에 들어와서 그런 고민을 겪으면서 정체성에 대한 의문을 가지게 되었고, 살짝 방황의 시기를 겪었다. 근데 좀 하다 보니까 다 비슷비슷해지더라. 처음에는 갭이 되게 크다고 생각했는데 수업 듣고 같이 하다 보니까 갭이 빠른 속도로 줄어들었다. 물론 똑똑한 동기들이 정말 많이 도와줬다. (고맙다 친구들아!) 계속 방황을 하면서 ‘일단 해보자’고 했던게 컸던거 같다. 그리고 내가 노렸던 것 중 하나는 다른 친구들이 잘 안 하는 아니면 잘 못하는 새로운 분야를 개척하면 괜찮지 않을까 싶어서 했던 것이 보안이기도 했다. 친구들을 보면 보통 수학이나 알고리즘 쪽으로 정말 뛰어난 친구들이다. 그 친구들은 국제 프로그래밍 대회나 국제 수학 경진 대회 등에 나가는 친구들이었고 나는 그냥 학교 수업 따라가는것만으로도 감사했다. 대신에 나는 해킹하는 것을 좋아하니까 그쪽만 팠다. 그러다 보니 자연스럽게 스트레스 또한 줄어들었다. 내가 조금만 잘하더라도 이 분야에서는 내가 다른 친구들 보다는 잘하지 않겠느냐는 자기 위안으로 삼으면 공부를 하기 시작했던 것 같다. (feat. 유리 멘탈이 정신승리하는 방법.txt) 한 가지 재미난 사실이 있다면, 내가 컴퓨터나 보안 쪽으로 제대로 공부를 시작한 것은 대학교에 들어와서부터다. 사실 고등학교 때부터 해킹이다, 프로그래밍이다 했지만 이해도가 거의 없는 상태였다. 원래는 보통 기본기를 하고 그 위에 쌓는 게 정석이지 않는가. 근데 난 컴퓨터에 대한 기초 하나 없이 보안, 해킹 그냥 막 쑤셔 넣었던 것이다. 그래서 내가 공부한 길은 정공법은 아니었다. 예를 들어, 고등학교 때 어떤 게임의 핵을 만든다던가 어떤 프로그램을 우회할 때 필요한 지식이나 스킬은 어렴풋이 알고 있지만 왜 그래야 했는지에 대해서는 전혀 이해를 못하고 있었다. 한 마디로 편법만 알고 있었고 이렇게 하면 되더라 식으로만 알고 있었다. 그러다가 대학교에 와서 기초부터 프로그래밍, 시스템, 컴파일러 등 하나씩 배우다 보니까 퍼즐의 조각이 하나씩 맞춰 들어가지듯이 이해가 되기 시작했다. “아, 이렇게 되어있니까 그렇게 했을때 성공했구나.” 같은? |
오 그럼 학교 공부를 진짜 재미있게 했었을 것 같다. |
고등학교 들어가서 느낀 친구들도 많겠지만 나는 그걸 대학교 들어와서 느꼈다. 항상 전교 1등, 전국 1등 인터뷰하는 것을 보면 “공부가 제일 쉬웠어요”, “배우는 재미가 있었어요”. 솔직히 이런 얘길 들으면 이게 무슨 뭔 개소리야 이랬었는데, 좀전에 말한대로 공부를 하면서 엉성하게 비어있던 것들이 하나씩 맞춰 들어가다 보니까 되게 재미있었다. 이전에 다른것들을 공부할 떄는 '내가 이걸 배우고 사용할 때가 있을까' 싶었는데 컴퓨터 공부를 하다보니 하나씩 머릿속으로 이해가 되면서 응용할 수 있는 분야가 생각나기 시작하는 거다. 이제까지 내가 해왔던 것들이 왜 되는지 잘 몰랐었는데 그걸 이해하게 되니까 엄청 재미있었다. 그래서 그때 “아, 이게 배우는 것에 대한 즐거움이구나” 라는걸 느꼈다. 그러고 나서 2학년 말부터 해킹대회를 참여하기 시작했는데, 한국에서 대회가 제일 많이 열렸었다. 특히, HUST가 PPP가 가장 처음에 했던 대회였다. 그때 연구실에는 한국 분들이 꽤 계셨었고 외국인도 몇몇 있었다. 그때 외국 애들은 HUST Hacking Festival을 처음 참여했었는데 한국어로 된 문제밖에 없었다. 요즘 국제대회들 처럼 문제가 영어 지문이 아니라 다 한국어였는데, 그걸 구글 번역기 돌려가면서 풀었었다. 일단 내가 한국어를 할 줄 아니까 열심히 번역도 해주고 그렇게 해서 HUST를 3년 연속 우승했고, 매년 다른 대회도 많이 참가했다. 그 때 대회를 하면서 개인적으로 많은 발전이 있었다. |
많은 분이 대회를 하면서 공부가 잘된다고 하시더라. |
맞다. 나한테도 가끔 페메나 이메일로 조언을 구하는 연락이 온다. 어떻게 공부해야 하는지 어디서부터 시작해야 하는지. 나도 사실 커리큘럼이나 이런 흔히 말하는 "테크트리"를 가지고 있는 것이 아니어서 보통 경험바탕으로 말씀을 드리는데 대회가 제일 중요하다. 무조건 대회를 하라고 한다. 옛날엔 있는 대회는 다 하라고 했는데 요즘에는 다하면 죽는다. 예전에는 한 달에 한 개 정도가 있어서 할 만했는데 요즘에는 워낙 많아 초보들을 위한 대회부터 메이저급 대회까지 다양하다. 중요한것은 대회에서 문제를 못 풀었어도 종료 이후에 풀이 등을 살펴보며 복습하는것이다. 그리고 누구나 그렇듯이 처음부터 잘할 수 없다는 것을 인지해야한다. 처음부터 좌절할 필요는 없다. 특히 요즘에는 예전에 비해 난이도가 상향평준화 되어있기 때문에 많이 접해보지 않으면 정말 어려울 수 있다. 자신이 풀지 못한 문제들을 다시 풀어보다 보면 자연스레 감도 좋아지고 실력도 늘게 된다. 해킹대회던 인생(?)이던 사실 큰 범주 안에서 비슷비슷한 것들의 반복이다. 비슷한 상황에 연습해둔 사람이 더 잘 대처할 수 밖에 없는건 당연한거다. 물론 어쩌다 가끔씩 못보던 녀석들이 나오긴 하지만 웬만한 건 비슷하고 거기서 조금 응용된 것들이므로 크게 겁먹을건 없다. 그래서 대회를 많이 하면 할수록 빨라지고 잘할 수밖에 없는거다. 큰 팀들, 잘하는 팀들의 우위를 결정하는 요인은 고만고만한 문제가 아니고 정말 어려운 문제, 이제까지 보지도 못했던 문제, 아무도 몰랐던 문제형식이 나왔을 때 누가 가장 빨리 이해하고 푸느냐 이걸로 보통 결정이 된다. 혹은, 모두 다 쉬운 문제들로만 구성되어있어서 결과적으로 누구나 풀 수 있는데 누가 더 빨리 푸는지 스피드 경쟁을 요하는 대회가 있기도 하고. 때문에 처음에 시작할 때는 대회들을 이기려 하지 말고 여러 문제들을 보고 자기가 취약한 문제를 풀려고 노력하는것이 중요하다. 자기가 잘하는 문제를 계속 푸는 것은 의미가 크게 없다. 이미 내가 잘하는데 또 풀어봤자 얻는게 없기 때문이다. 자기가 잘 못하는 부분들을 연습하면서 계속 공부해 나가야한다. 그런다음 대회에서 자기가 취약했던 문제나 카테고리를 풀 수 있는지 보고, 못 푼다면 풀 수 있을 때 까지 계속 반복하는 것이다. 그러면 확실히 자기 역량이 증가한다. 더군다나 요즘은 워게임이나 대회문제가 정리가 잘 되어 있기 때문에 검색하면 다 구할 수 있다. 라이트업도 잘 되어있기 때문에 ‘공부를 어떻게 해야 할지 모르겠어요’, ‘무엇을 봐야할지 모르겠어요’ 이건 사실 핑계다. 그리 오래 되지 않았지만, 내가 공부할 때만 해도 정말 자료가 없었다. 인터넷에서도 phrack이 거의 유일한 보안 문서들이었고. 더욱이 그땐 영문자료밖에 없었다. (요즘엔 한국팀들이 대회도 많이하고 기술문서도 많이 작성해서 한국어 문서들이 많아졌다.) 그런 의미로 영어를 아는 것은 정말 중요하긴 하다. 유럽, 중국도 마찬가지로 새로운 기술을 발견하면 기술 설명이나 연구결과 등을 거의 다 영어로 작성하고 발표한다. 아직 영어가 많은 곳에서 공통어로 사용되다 보니까 영어를 공부 해두면 이런저런 정보를 얻는 속도가 확 빨라진다. 보안 공부뿐만 아니라 영어 공부까지 하면 확실히 앞으로 도움이 많이 될 거다. |
인터뷰했을 때 영어랑 대회 이 두 가지는 계속 말씀하시는 것 같다. |
맞다. 이게 가장 효과적이고 빠르게 실력을 높이는 방법이다. 이런 리소스가 풍부하게 있음에도 불구하고 열심히 안해서 못하는 것은 자기 게으름이라고 생각한다. |
박세준님의 인터뷰 마지막 이야기, 3부에서 이어집니다.
=> 아! 기다리고 기다리던 박세준님 인터뷰 ②