창작의 고통

우리가 연구를 처음 시작하게 되면, 성공한 사람들의 사례를 주로 보게 됩니다. 트위터만 보더라도 획기적 연구 결과가 하루가 멀다고 쏟아져 나오니까요. 이 글에서는 연구의 다른 측면, 즉 질 좋은 연구를 하는 것이 얼마나 길고, 고된 과정인지를 얘기하고자 합니다. 이것은 분명 연구자들에게 흔히 일어나는 일임에는 분명하지만, 잘 알려진 이야기는 아닙니다.

“성공의 확률을 높이려거든, 실패의 확률을 높여라.”

토마스 왓슨, IBM CEO

토마스 왓슨이 했던 이 말은, 어찌 보면 당연한 이야기입니다. 실패를 통해 성공하는 것은 누구나 일반적으로 겪는 과정이니까요. 물론, 실패는 고됩니다. 특히 주변의 우수한 연구자들이 앞으로 쭉쭉 뻗어가는 모습을 볼 때 가슴은 더욱더 쓰라립니다. 저 같은 경우엔 트위터를 끊어야만 했습니다. 트위터에서 연일 이야기되는 성공담을 듣기가 고통스러웠기 때문입니다. 제가 이 글을 쓰는 것도 저처럼 연구에 고전하는 사람들을 위로하기(?) 위해서입니다.

연구자는 항상 실패에 대비해야 합니다. 그리고 그것은 주변의 훌륭한 동료들이 있을 때 가능하죠. 물론 제가 처음부터 실패를 대비한 것은 아니지만, 돌이켜보면 사이버보안연구센터의 훌륭한 동료들, 그리고 저의 훌륭한 멘토였던 차상길 교수님이 있었기에 이러한 성공이 가능했다고 생각합니다.

방황

2017년 여름이 끝나갈 무렵, 저는 제 인생 최초의 논문을 썼습니다. 오랜 노력의 끝에서 처음 들었던 생각은 바로 “이제 뭘 하지?”였습니다.

이미지 출처: Narcos Season 1 (2015), Netflix

확실한 건 리눅스 커널 보안에 관한 연구를 더 하고 싶지는 않다는 것이었습니다. 무언가 새로운 것을 하고 싶었고, 그랬기에 약 6개월간 센터의 다른 동료들을 도우며 시간을 보냈습니다.

센터에 있던 동료 중에는 퍼징을 연구하는 친구들이 있었습니다. 당시에는 퍼징의 기본 원리 외에는 깊게 공부해보지 않았지만, 흥미로운 분야라 느꼈고, 그 분야의 논문을 본격적으로 읽기 시작했죠. 그리고 연구의 대부분이 스케쥴링 알고리즘에 집중되어있다는 것을 알게 되었습니다. 이때부터 스케쥴링이 아닌 퍼징의 다른 부분에 관심을 두기 시작했습니다.

그해 말이 되던 무렵, 센터의 연말 회식이 있었고, 당시 센터장이었던 문수복 교수님은 저에게 이런 질문을 했습니다. “퍼징에서 기계학습을 적용하면 어떻게 되니?” 처음엔 이 말을 대수롭지 않게 생각했습니다. 왜냐면 기계학습이라는 용어는 누구나 말하고 다니는 유행어에 불과하다고 생각했기 때문이죠. 마침 그 무렵 알파고 Zero가 등장했고, 저는 관련 논문을 무심코 읽게 되었습니다. 그리고는 저도 모르게 그 아이디어에 푹 빠지게 되었죠. 강화학습이라는 구성이 퍼징과 정확히 일치했기 때문입니다. 강화학습에서 말하는 에이전트(agent)란 퍼저에 해당하고, 환경(Environment)은 퍼징의 대상이 되는 프로그램, 그리고 우리의 에이전트는 환경(프로그램)에 대해 여러 가지 입력을 대입하며 학습해나가는 것이죠.

이미지 출처: Megajuice (2017), “The typical framing of Reinforcement Learning”

강화학습에 관한 공부를 하다 보니, 끝없는 (연구) 가능성이 보였습니다. 이미 강화학습 분야에는 수많은 기술이 있었고 퍼징의 다양한 부분에 적용할 수 있을 것으로 생각했기 때문입니다. 그래서 저는 일단 몇 개월간 퍼징에 기계학습을 접목하는 연구를 진행하기로 했습니다. 물론, 몇 개월이라는 저의 예상은 보기 좋게 빗나갔습니다. 2년이라는 세월 동안 이 연구를 하리라고는 꿈에도 생각지 못했으니까요.

실험의 즐거움

새로운 분야에서의 프로젝트를 시작하는 설렘은 가히 최고였습니다.

“시작할 때마다 우리는 마법에 빠진다.”

헤르만 헤세

헤르만 헤세가 말했듯이, 저는 마치 마법이 깃든 것처럼 연구에 몰입할 수 있었습니다. 나만의 퍼저를 제작하고 그것이 발전해가는 모습을 보는 것을 볼 수 있었으니까요. 처음에는 기본적인 블랙박스 형태의 퍼저를 만들고, 스케쥴링 알고리즘을 적용하고, 적합 함수(fitness function)를 도입함에 따라 성능이 급상승하는 것을 볼 수 있었습니다. 정말 신나는 경험이었죠.

물론 처음에 제가 만든 퍼저는 AFL과 비슷한 수준에 불과했습니다. 거의 AFL을 새롭게 다시 작성한 정도였죠. 하지만, 그 이후로는 새로운 세상이 열린 것처럼 아이디어가 끊임없이 떠올랐습니다. 매일 아침 눈을 뜨면 새로운 기술을 적용해보고 싶은 생각뿐이었죠. 퍼저를 처음부터 내 손으로 만들고, 다양한 알고리즘을 적용하는 과정, 여러 가지 기계학습 알고리즘을 적용하고 실험하는 과정을 통해 저는 많은 것을 배울 수 있었습니다.

강화학습을 활용할 때 해야 하는 첫 번째 질문은 바로 보상(reward)가 무엇이냐? 라는 것입니다. 적절한 보상이 정의되어야 사실상 강화학습을 논할 수 있습니다. 에이전트는 보상을 통해 다음에 취할 행동을 정할 수 있고 과거의 행동에 대해 학습할 수 있는 것이기 때문이죠. 즉, 보상은 퍼저의 목표를 정의한다고 말할 수 있습니다. 퍼저의 목표라는 것이 단순해 보일 수 있지만 실은 그렇지 않습니다. 퍼저가 잘 동작하는지를 평가하는 것은 그 자체로도 연구 문제일 정도로 어렵습니다. 그래서 저는 일단 다양한 퍼징의 보상을 정의하고 그것이 어떻게 동작하는지 보기로 했습니다. 그리고 그중의 하나가 강화학습 상황에 잘 맞는다는 것을 알 수 있었습니다.

이렇게 강화학습에 기반한 퍼저가 준비되고 나니 처음으로 의미 있는 실험을 돌릴 수 있었습니다. 물론, 이미 몇 달이라는 기간이 훌쩍 지나고 난 후였지만, 이 실험을 통해 제가 개발한 아이디어가 실제로 의미가 있는지 없는지를 판별할 수 있었던 거죠.

저는 이 결과를 가지고 차 교수님을 만났고, 이 미팅을 통해 다시 차가운 현실을 마주하게 됩니다. 비록 처음엔 인정하고 싶지 않았지만, 차 교수님은 그 결과가 왜 좋은 결과가 아닌지를 알려주었습니다. 제가 선정한 기준으로는 분명 좋은 결과였지만, 일반적으로 퍼저를 평가할 때 사용하는 커버리지나 버그의 개수 측면에선 그렇지 못했죠. 물론 이러한 과정이 의미 있는 배움의 과정임에는 분명했지만, 연구자로서는 실패를 마주한 순간이었습니다. 제가 생각한 아이디어가 훌륭하다는 것을 증명하지 못한 셈이니까요. 제가 만든 퍼저는 우리가 기준점으로 삼은 AFL보다도 현저히 낮은 성능을 갖는다는 것을 확인할 수 있었습니다.

저는 이 프로젝트에 너무 감정적으로 몰입하다 보니 논리적인 판단을 하기 어려웠습니다. 그리고 그제야 비로소 저는 “연구지도”의 필요성을 이해할 수 있었습니다. 저의 감정은 저 자신에게 프로젝트의 결과가 좋다는 자기최면을 걸고 있었던 셈입니다. 결국, 연구자에게 꼭 필요한 것은 바로 연구자의 기술을 이해하면서도 동시에 객관적 시야로 그 연구 결과를 해석할 수 있는 지도자였던 것입니다.

인고의 시간

돌이켜보면, “뭐가 문제지? 분명 동작해야 하는데.”라는 이 질문이 절 계속해서 함정에 빠뜨렸습니다. 아이디어가 잘 동작하지 않을 때 그 아이디어를 바로 포기해 버리긴 어렵습니다. 왜냐면 현재 아이디어가 궁극의 목표에 아주 근접했을지도 모른다는 미련 때문이죠.

처음에는 Ankou(우리의 퍼징 시스템)가 단순히 느려서 발생한 문제라 생각했습니다. 프로토타입이었으니 최적화가 되어있지 않았다고 생각한 것이죠. 만약 AFL처럼 빠르게 만든다면 충분히 잘 동작할 것으로 생각했습니다. 그래서 병목현상을 찾아 성능 최적화를 하는 데에 시간을 쏟았지만, 결과는 바뀌지 않았습니다.

한참 뒤에야 저는 제가 생각했던 기술 자체에 문제가 있음을 깨닫게 되었습니다. 그제야 다른 강화학습 알고리즘과 신경망 구조들을 하나하나 시도해 볼 수 있었습니다. 대부분 성능의 문제가 있었고 결국엔 가장 단순한 강화학습의 형태 중 하나인 Multi-Armed Bandit(MAB)을 사용하기에 이릅니다. 그때 저는 MAB를 통해 의미 있는 성능 향상을 볼 수 있었지만, MAB를 활용한 퍼징 논문은 이미 있었다는 것을 알게 되었죠 [1].

만약 제가 생각한 방향이 잘못되었음을 일찌감치 인정하고 다른 연구주제를 선택했다면 더 좋은 결과가 있었을지도 모릅니다. 하지만, 저는 이미 2개월이라는 시간을 소모해 제가 가진 아이디어가 잘못되었다는 것을 알았음에도 불구하고 6개월이라는 시간을 더 투자하고 고민했습니다. 그리고 이 6개월간 저는 엄청난 스트레스를 받았습니다. 모든 정신적 에너지와 시간을 소모한 상태였으니까요. 물론 완전한 포기는 아니었지만요.

저는 일단 프로젝트를 떠나 잠시 휴식을 취하기로 했습니다. 스스로 마음의 여유를 되찾고 싶었기 때문이죠. 한동안 같은 생각에만 사로잡혀 논리적 사고를 할 수 없는 지경에 이르렀으니까요. 아마 저 스스로 감정에 휘말려 있었던 것 같습니다. 잠시 프로젝트를 떠나 멀리서 바라볼 수 있기를 기대했던 것 같기도 합니다. 지금까지 생각하지 못한 무언가가 떠오를지도 모른다는 기대와 함께 말이죠.

전환점

이때 떠오른 생각은 통계학 시간에 배운 차원축소에 관한 기술(주성분 분석)이었습니다. 차원이 너무 많을 때 가장 대표적인 축(axis)을 찾아내는 방식이었죠. 만약 이 방식으로 축 2개를 선택했다면, 복잡한 차원의 그래프를 2차원 그래프로 시각화가 가능한 것입니다. 실제로 강화학습을 활용한 퍼징 프로젝트에선 모든 브랜치가 하나의 차원을 형성하고 있었기 때문에 고려해야 할 차원의 개수가 너무 많았습니다. 하지만 그 차원의 개수가 너무 크기 때문에 주성분 분석을 적용하는 것 자체가 퍼징에서는 큰 비용이 될 것이 분명했죠. 하지만, 시각화의 측면에선 충분히 시도해볼 만한 가치가 있다고 생각했고, 시드에 대해서만 이를 적용해보기로 했습니다.

이틀 정도 지났을까, 결과는 실로 엄청났습니다! 5개의 축만으로도(수천, 수만의 축 없이) 전체 공간의 60% 이상을 효과적으로 설명할 수 있다는 결과를 얻게 되었습니다. 아래 그래프는 제가 그 당시 얻었던 최초의 결과를 나타냅니다.

이때부터 저는 새로운 장난감이 생긴 아이처럼 들떴습니다. 이것은 프로그램의 행동 방식을 이해하는 새로운 시각을 제공해주는 것이었습니다. 강화학습 기반의 퍼징 프로젝트를 시작한 뒤로 저는 줄곧 스케쥴링보다는 퍼징의 적합 함수를 개선할 방법을 찾아왔기 때문에 이러한 발견은 더 의미 깊었습니다.

차원을 축소하여 프로그램을 바라본다는 것은 정말 멋진 장난감임에는 분명했지만, 문제가 하나 있었습니다. 그 계산 자체가 너무 비싸다 보니 퍼징에 적용하기가 어려웠다는 것이죠. 결국, 저는 이제 주성분 분석을 최적화하는 문제에 봉착하게 됩니다. 하지만 저는 다시금 연구에 몰입될 수 있었고, 새로운 알고리즘을 떠올리기 시작했습니다.

문제는 선형대수였습니다. 대학 1학년 때 공부한 적이 있었지만, 주성분 분석이라는 알고리즘을 뜯어고치기 위해서는 선형대수를 완전히 제 것으로 만들어야만 했습니다. 다행히 이때 제 곁에 수민이가 나타났습니다. 수민이의 도움에 힘입어 결국 우리는 Dynamic PCA라는 새로운 알고리즘을 만들어내기에 이릅니다. 이에 대해 더 알고 싶은 독자들은 우리의 논문을 읽어보시길 바랍니다 😉 [2].

그 이후로 마감까지는 당연히 실험의 규모를 늘리는 것을 포함한 많은 일이 있었고, 우리는 긍정적인 마음으로 임할 수 있었습니다. 우리는 끝까지 모든 실험 결과가 통계적으로 충분한 가치가 있는지를 검토했으며, 여러 번의 퇴고를 거듭하여 논문을 읽기 쉽게 만들었습니다. 물론 이 과정이 다소 힘들긴 했지만, 오히려 마음은 홀가분했습니다. 왜냐하면, 우리가 마감까지 이 일을 끝낼 수 있다는 확신이 있었기 때문입니다. 그냥 열심히 하기만 하면 되는 거였으니까요. 며칠 밤을 새우고, 마감 5분 전까지도 원고를 수정하고 제출하기를 반복하니 마침내 끝이 보였습니다!

최종 제출 이후에는 뭔가 기분이 묘했습니다. 긴장은 풀렸지만, 계속해서 논문에 관한 생각을 떨칠 수가 없었습니다. 운이 좋게도 훌륭한 리뷰어를 만나 좋은 조언을 받을 수 있었고, 우리의 논문은 한 번에 게재 승인을 받게 됩니다 🎉.

결론

저는 이번 연구를 통해 많은 것을 배울 수 있었습니다. 하나의 생각에 얽매이지 않아야 합니다. 인내심은 중요하지만, 언제 손을 떼느냐도 알아야 하며, 생각을 전환할 수 있어야 합니다. 그리고 주변에 훌륭한 동료를 많이 두어야 합니다, 그것이 연구에서의 최선의 준비입니다.

[1] Scheduling Black-box Mutational Fuzzing, CCS 2013
[2] Ankou: Guiding Grey-box Fuzzing towards Combinatorial Difference, ICSE 2020

Valentin Manès

After spending three years as a researcher at Cyber Security Research Center (CSRC) at KAIST, Korea, Valentin Manès is now a Software Engineer at Qonto, France. He received his Master’s degree from Télécom ParisTech with a specialization in information security. His interest is towards improving bug finding ability in automatic software testing.

역자 주

이글은 Valentin 연구원이 쓴 원문을 번역한 글입니다.

5 명이 이 글에 공감합니다.