diff --git a/_posts/2021-08-12-about-love.md b/_posts/2021-08-12-about-love.md new file mode 100644 index 0000000000000..75113fe47011d --- /dev/null +++ b/_posts/2021-08-12-about-love.md @@ -0,0 +1,19 @@ +--- +title: 진정한 사랑에 대하여 +date: 2021-08-12 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +사람들이 보편적으로 얘기하는 사랑과 진정한 사랑은 거리가 멀다. 우리가 미디어를 통해 접하는 사랑은 불타오르는 정열적인 사랑이지만 이것은 사랑의 전부가 아니다. 진정한 사랑은 감정을 넘어서 그저 헌신하기로 결정하는 것이다. + +### 본문 +사람들이 보편적으로 얘기하는 사랑과 진정한 사랑은 거리가 멀다. 물론 정말 많은 사람들이 진정한 사랑을 찾고자 노력한다. 가요나 영화등의 대중매체를 보면 사람들이 얼마나 사랑을 원하는지 알 수 있다. 옛날 사람들도 다를 바 없어서 오래된 사랑 노래나 소설도 쉽게 찾을 수 있다. 하지만 사람들은 진정한 사랑이 무엇인지 잘 모르고 있다. + +우리가 미디어를 통해 접하는 사랑은 불타오르는 정열적인 사랑이지만 이것은 사랑의 전부가 아니다. 물론 사랑에 감정적인 요소는 분명히 존재한다. 하지만 이런 뜨거운 감정은 유효기간이 불과 1년 반에서 3년밖에 되지 않는다. 따라서 영화 주인공들 같은 사랑을 기대했다면 짧게는 1년 반 안에 상대에게 실망하여 그 다음 "진정한 사랑"의 후보를 찾게 될 것이다. 설렘도 사라진다. 동일한 자극에 익숙해 질수록 분비되는 호르몬의 수준은 점차 줄어들 것이고 결국 내성이 생기게 된다. + +진정한 사랑은 감정을 넘어서 그저 헌신하기로 결정하는 것이다. 앞서 말한 정서적인 요인들은 스스로 조절할 수 없지만, 선택과 결정은 자신의 통제 범위 안에 있다. 이러한 시각으로 사랑을 바라본다면 뜨겁지 않다거나 설레지 않아서 헤어진다는 것은 핑계에 불과하다는 것을 알 수 있다. 결국 헤어지는 것은 자신의 선택이고, 더 이상 사랑하지 않기로 결정하는 것이다. 따라서 오랫동안 흔들리지 않는 사랑을 하기 위해서는 상대방을 계속해서 사랑하겠다고 약속하고 그 약속을 지키는 것이 중요하다. 뜨거운 사랑보다 변함없는 사랑이 더 진정한 사랑이라 할 수 있을 것이다. \ No newline at end of file diff --git a/_posts/2021-08-26-about-fault-localization.md b/_posts/2021-08-26-about-fault-localization.md new file mode 100644 index 0000000000000..835d555293760 --- /dev/null +++ b/_posts/2021-08-26-about-fault-localization.md @@ -0,0 +1,21 @@ +--- +title: 결함 위치 추정 기술에 대하여 +date: 2021-08-26 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +결함 위치 추정은 자동으로 프로그램의 결함이 존재하는 위치를 찾아내는 기술이다. 이 분야에서 지금까지 제안된 기술들은 크게 두 가지로 나눌 수 있다. 최근에는 다양한 기술들의 결과를 조합하는 기술들이 연구되고 있다. + +### 본문 +결함 위치 추정은 자동으로 프로그램의 결함이 존재하는 위치를 찾아내는 기술이다. 프로그램에 결함이 발생하였을 때, 자동으로 이를 찾아 준다면 개발자 입장에서는 많은 시간이 절약될 수 있다. 또한 결함 위치 추정 기술은 소프트웨어 유지 보수 자동화의 완성체인 자동 프로그램 수정 기술의 등장과 맞물려 재조명을 받게 되었다. 왜냐하면 결함 위치 추정 기술은 프로그램을 수정할 위치의 정보를 제공해주기에 자동 프로그램 수정 기술에 꼭 필요한 요소이기 때문이다. + + +이 분야에서 지금까지 제안된 다양한 기술들은 크게 두 가지로 나눌 수 있다. 이 두 가지는 Spectrum-based, 그리고 Mutation-based 방법으로 각각 주어진 테스트 케이스 실행을 통해 수집된 커버리지 정보를 활용하는 방법, 그리고 프로그램을 변이시켜 그 실행결과를 활용하는 방법이다. Spectrum-based는 매우 단순하지만 효과적인 발상으로 문제를 접근하는데, 이는 특정 프로그램 위치를 실패한 테스트 케이스가 많이 지나가고, 성공한 테스트 케이스는 덜 지나갈 수록 해당 위치에 결함이 있을 확률이 높다는 것이다. Mutation-based 또한 단순한 발상에서 시작한다. 특정 프로그램 위치를 변이시켰을 때, 성공하던 테스트 케이스는 유지하면서 실패하던 테스트 케이스는 줄어든다면, 해당 위치에 결함이 있을 확률이 높다는 것이다. 해당 발상에 기반하여 많은 연구자들이 지금까지 다양한 기술을 제안해왔다. + + +최근에는 다양한 기술들의 결과를 조합하는 기술들이 연구되고 있다. 이러한 접근은 기존의 기술들로부터 도출된 결함위치 추정 결과들을 함께 학습하여, 더 정확한 결과를 도출하고자 하는 노력으로 이어졌다. 구체적으로는 특히 Learn to Rank로 불리는 방법을 사용하여 각 프로그램 위치들을 어떻게 정렬하면 될지 학습하고, 새로운 프로그램이 주어졌을 때, 그 안의 위치들을 올바르게 정렬하는 것을 목표로 한다. \ No newline at end of file diff --git a/_posts/2021-09-09-know-wide.md b/_posts/2021-09-09-know-wide.md new file mode 100644 index 0000000000000..08f31677990b4 --- /dev/null +++ b/_posts/2021-09-09-know-wide.md @@ -0,0 +1,21 @@ +--- +title: 다양한 분야의 지식을 갖춰야 하는 이유 +date: 2021-09-09 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +연구를 할 때, 한 분야에서 널리 알려진 사실이 다른 분야의 새로운 돌파점이 될 수 있다. 이러한 경우의 가장 대표적인 사례는 전자공학에 불 대수를 도입한 것이라 할 수 있다. 이렇게 새로운 돌파구를 찾기 위해서는 다양한 지식을 아는 것이 중요하다. 따라서 새로운 지식을 탐구하고자 하는 연구자는 자신의 분야에만 몰두하지 않고 여러 분야에 귀를 기울이는 자세를 갖춰야 한다. + +### 본문 +한 분야에서 널리 알려진 사실이 다른 분야의 새로운 돌파점이 될 수 있다. 연구를 하다 보면 자신의 연구 주제에만 몰두하여 시야가 좁아지기 쉽다. 그러나 같은 분야의 사람들이 같은 생각과 지식으로 오랜 시간 매달리던 문제가 새로운 분야의 지식으로 해결되는 경우가 있다. 이 때 주목할 점은, 이것은 새로운 분야의 지식일 뿐이지, 새로운 지식이 아니라는 점이다. + +여러 사례들 중 가장 인상적인 것은 전자회로 설계에 불 대수를 도입한 것이다. 불 대수는 이미 논리학 분야에서 발표되어 널리 받아들여지고 있었지만 두 세계는 서로에게 미지의 영역으로 남아있었다. 이 때 이 사이에 다리를 놓은 것이 바로 클로드 섀넌이다. 가장 위대한 석사 논문 중 하나로 인정받는 클로드 섀넌의 석사 졸업 논문을 통해 불 대수가 전자회로 설계에 도입되어 디지털 컴퓨터의 시대가 열리게 되었다. + +그 외에도 다양한 사례들이 존재한다. 진화론의 자연선택설에서 영감을 받은 유전 알고리즘은 컴퓨터 공학 분야에서 NP 문제의 근사해를 구할 때 때 활용되고 있다. 또한 인간의 시신경 구조를 바탕으로 설계된 딥러닝 기법 CNN은 영상처리 성능을 월등하게 끌어올렸다. 직접적인 적용이 아니더라도 영감을 얻은 경우까지 고려한다면 정말 수많은 사례들을 나열할 수 있을 것이다. + +이렇게 오래된 문제의 새로운 돌파구를 찾기 위해서는 좁아진 시야를 넓혀 다른 분야에도 귀를 기울일 필요가 있다. 한 영역의 문제의 답이 반드시 그 영역 안에만 존재한다는 보장이 없기 때문이다. 그렇기에 연구를 하는 사람이라면 편식하지 말고 다양한 지식을 접하도록 노력해야 한다. 그 지식을 자신의 것으로 만들고 이를 엮어낼 때, 새로운 지식이 탄생할 가능성이 있기 때문이다. \ No newline at end of file diff --git a/_posts/2021-09-23-expression.md b/_posts/2021-09-23-expression.md new file mode 100644 index 0000000000000..a2ab1dc978c50 --- /dev/null +++ b/_posts/2021-09-23-expression.md @@ -0,0 +1,21 @@ +--- +title: 표현의 중요성 +date: 2021-09-23 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +마음을 전달할 때처럼 지식을 전달할 때도 표현하는 방식이 중요하다. 컴퓨터 프로그램도 일종의 지식으로 그 의미를 전달하는 다양한 방법이 있다. 코드 그 자체도, 사람이 작성한 설명도, 모두 프로그램의 의미를 표현하는 방법이다. 이 때, 두 표현 방식이 전달하는 의미의 수준이 비슷하다면 쉽게 상호변환이 가능하다. 따라서 모든 프로그램 표현 방식을 의미 수준에 따라 연결한다면, 코드에서 사람이 작성한 것 같은 설명으로의 전이적 변환도 가능할 것이다. + +### 본문 +무엇이든 잘 표현하는 것이 중요하다. 가족이나 연인 관계에서 자신의 마음을 잘 표현하는 것이 중요하듯이 연구에서도 표현은 중요한 문제다. 지식을 더 잘 전달하고 설명하기 위해서이다. 잘 그린 그림이나 공식으로 수십페이지의 글을 설명할 수 있고, 간결하게 개념을 전달할 수 있다. + +컴퓨터 프로그램을 표현하는 것도 굉장히 중요한 문제이다. 적절한 프로그램 표현 방식은 자동으로 프로그램을 수정/생성하는 연구, 자동으로 결함의 위치를 찾는 연구, 또는 퍼징이나 정적분석 등 많은 연구 분야에서 중요한 요소이기 때문이다. 이때, 적절하다는 것은 각 연구의 필요에 따라 다양한 의미를 지니게 된다. 따라서 어떤 경우에는 코드의 있는 그대로, 어떤 경우에는 추상구문트리나 유한상태오토마타가, 또는 단순한 문자열 토큰의 나열이 사용된다. + +이처럼 다양한 프로그램 표현 방식들이 사용되지만 대부분이 공통적으로 표현하고자 하는 것은 프로그램의 의미다. 이 때, 주석 하나 없는 코드에서부터 사람의 언어로 구구절절 풀어쓴 설명까지의 범위를 의미 표현의 스펙트럼이라고 한다면, 대부분의 프로그램 표현 방식들은 이 안에 들어갈 것이다. 넓게 보면 코드 그 자체로도, 추상구문트리 등의 프로그램 구조를 통해서도, 프로그램 상태의 집합을 통해서도 프로그램의 의미를 표현할 수 있지만 사람이 직관적으로 이해할 수 있는 정도는 다르기 떼문이다. + +이러한 의미 표현 스펙트럼이 잘 정리된다면 코드에서 사람이 작성한 것 같은 설명으로, 혹은 그 반대로의 변환도 수월할 것으로 예상된다. 코드로부터 풀어쓴 설명은 도출하기 어려워도, 추상구문트리는 쉽게 만들 수 있기 때문이다. 이처럼 보다 수월한 작은 단계의 변환이 연쇄적으로 이루어진다면 스펙트럼의 끝에서 끝으로의 변환도 가능할 것이다. \ No newline at end of file diff --git a/_posts/2021-10-07-afl.md b/_posts/2021-10-07-afl.md new file mode 100644 index 0000000000000..f79917c989295 --- /dev/null +++ b/_posts/2021-10-07-afl.md @@ -0,0 +1,21 @@ +--- +title: AFL, 무작위성도 꿰어야 보배 +date: 2021-10-07 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +Fuzzing은 사람이 예측하지 못한 무작위 입력을 통해 프로그램을 테스트하는 기법이다. 하지만 무작위성만 갖춘 단순한 Fuzzing은 명백한 한계가 존재한다. 이를 보완하기 위해 Mutation과 Greybox의 개념을 탑재한 AFL이라는 도구가 등장하였다. AFL은 놀라운 성능을 보여주었고 수많은 후속 연구들이 이를 기반으로 다양한 Fuzzer를 제안하였다. 무작위성엔 강력한 힘이 있지만 AFL과 같이 적절히 통제하였을 때 더 유용한 도구가 된다. + +### 본문 +말 그대로 태풍속에서 태어난 Fuzzing은 일반적이지 않은 무작위성 입력을 통해 프로그램을 테스트 하는 기법이다. 사람이 만든 테스트는 프로그램의 일반적인 실행에 상식적인 예외사항이 더해져서 만들어지지만, Fuzzing은 그보다 훨씬 넓은 범위의 입력을 테스트로 던지게 된다. 이를 통해 개발자가 예상하지 못했던 프로그램의 결함을 더 많이 찾을 수 있다. + +하지만 순전히 무작위성에 기대서는 프로그램을 깊이 관통하는 입력을 생성할 수 없다. 프로그램에 들어갈 수 있는 입력은 거의 무한하지만 실제로 프로그램이 처리하는 입력은 제한되어 있기 때문이다. 따라서 올바른 입력을 변형하여 새로운 입력을 생성하는 Mutation이라는 개념이 도입되었다. 하지만 아무리 좋은 입력을 생성해도 실행 결과만 가지고는 Fuzzing 과정이 잘 되고 있는지 확인할 방법이 없다. 이에 최소한의 프로그램 실행 정보, 즉 커버리지 달성률을 통해 Fuzzing을 보조하는 Greybox Fuzzing이라는 개념도 등장하였다. + +AFL은 상술한 두 개념에 기반하여 탄생한 Fuzzing 도구이다. AFL은 효과적인 커버리지 달성을 통해수많은 버그를 발견하였으며, JPEG 파일을 입력으로 받는 프로그램의 경우, Fuzzing을 하며 6시간만에 "hello"라는 문자열에서 JPEG 파일을 생성해 내기도 하였다. 이러한 성능에 매료된 수많은 후속 연구들이 이를 기반으로 한 Fuzzer를 제안하였으며, AFL은 마치 하나의 플랫폼처럼 자리잡았다. + +AFL은 무작위성과 컴퓨팅 파워가 있는 그대로도 강력한 도구지만 이를 적절히 통제한다면 비약적인 성능 향상을 이룰 수 있는 것을 보여주었다. 이처럼 주어진 자원을 효과적으로 잘 사용하는 것은 공학의 기초이고, 연구자가 항상 고민해야 될 문제일 것이다. \ No newline at end of file diff --git a/_posts/2021-10-21-directed-fuzzing.md b/_posts/2021-10-21-directed-fuzzing.md new file mode 100644 index 0000000000000..076d0ffd52561 --- /dev/null +++ b/_posts/2021-10-21-directed-fuzzing.md @@ -0,0 +1,21 @@ +--- +title: "지향성 퍼징: 선택과 집중의 미학" +date: 2021-10-21 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +퍼징은 효과적으로 프로그램 전체를 탐색하는 테스팅 기법이지만 프로그램의 특정 부분만 테스트하는 용도로는 적절하지 못하다. 이에 제안된 것이 기존의 무지향성 퍼징과 차별화된 지향성 퍼징이다. 지향성 퍼징은 사용자가 원하는 지점까지 도달하는 입력을 생성하는 것이 목적을 가지며 다양한 상황에서 활용될 수 있다. 이 글에서는 Def-use Graph를 통해 기존의 지향성 퍼징 기술보다 더 탐색 범위를 좁히는 방법을 제안하고자 한다. + +### 본문 +퍼징은 무작위한 입력을 생성하여 프로그램을 전반적으로 테스트하는 기술이다. 대상 프로그램에 대한 정보가 거의 없는 상황에서도 프로그램을 효과적으로 관통하는 입력을 만들어내는 등, 퍼징은 강력한 성능으로 인해 많은 사랑을 받아왔다. 그러나 은 총알(Silver Bullet)은 없다는 말[1](#silverbullet)처럼 퍼징도 모든 상황에 적합한 만능 도구는 아니다. 별다른 정보 없이 무작위성에 기대어 프로그램의 모든 부분을 탐색하려다 보니, 검사하고 싶은 특정한 위치가 있는 경우에는 퍼징이 적절하지 않다고 볼 수 있다. + +이러한 기존의 퍼징, 즉 무지향성 퍼징과 차별화된 기법이 바로 지향성 퍼징이다. 지향성 퍼징의 목적은 사용자가 원하는 지점까지 도달하는 입력을 빠르게 생성하는 것이다. 코드를 새로 추가하거나 수정했을 때, 혹은 결함위치추정 결과가 있을 때는 일부의 코드만 우선적으로 검사해야할 필요가 있다. 하지만 전체 코드에서 원하는 부분을 실제로 실행하는 입력을 만들어내기 어려울 수 있다. 지향성 퍼징은 이런 상황에서 효과적으로 필요한 입력을 생성하고 원하는 코드를 시험할 수 있도록 한다. + +기존의 지향성 퍼징 기술들은 Control Flow Graph를 활용하는 등의 방식으로 목표하는 지점에 도달하였다. 하지만 Control Flow Graph는 프로그램의 문법적인 구조만 나타내기 때문에 목표하는 지점과 실제로는 상관이 없는 지점들을 구분할 수 없다. 따라서 정적분석을 수행하여 Def-use Graph를 활용한다면, 각 지점에 실제로 영향을 주는 프로그램의 위치들을 알 수 있고, 이를 통해 더욱 빠르고 효과적으로 목표 지점에 도달할 수 있을 것이다. + +[1] Brooks, F. & Kugler, H. (1987). No Silver Bullet \ No newline at end of file diff --git a/_posts/2021-11-04-beacon.md b/_posts/2021-11-04-beacon.md new file mode 100644 index 0000000000000..e958b44a1be94 --- /dev/null +++ b/_posts/2021-11-04-beacon.md @@ -0,0 +1,24 @@ +--- +title: "BEACON: 감탄고토 Fuzzing" +date: 2021-11-04 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +지향성 퍼징은 대상 프로그램의 특정 위치에 도달하는 입력을 생성하는 것을 목적으로 한다. 기존의 지향성 퍼징 도구들은 어떻게 더 의미있는 입력을 생산할지에 관심을 가져왔다. BEACON[1](#beacon)은 이와 달리 어떻게 목표 지점에 도달 할 수 없는 입력의 실행을 조기에 종료할 지에 관심을 가진다. 기존의 지향성 퍼징과 BEACON은 함께 사용될 시, 서로를 보완하며 더 뛰어난 성능을 보여줄 것으로 기대된다. + +### 본문 +지향성 퍼징의 목적은 사용자가 원하는 지점까지 도달하는 입력을 빠르게 생성하는 것이다. 기존의 지향성 퍼징 도구들, 특히 Greybox 퍼징 도구들은 목표 지점과의 거리 등을 고려하여 점진적으로 목표 지점에 더 가까이 도달하는 입력을 만드려고 노력하였다. 따라서 퍼징 과정에서 목표 지점과 더 가까운 입력을 찾는다면 그 입력을 새로운 Seed로 삼는 접근을 취해왔다. + +BEACON은 기존의 퍼징 도구들과는 조금 다른 방식으로 목표 지점에 도달하는 입력을 찾는다. BEACON은 직접적으로 목표 지점으로 향하는 입력을 찾기보다, 목표지점으로 향하지 않는 입력을 조기에 종료한다. 무의미한 실행을 조기에 종료함으로써, 주어진 시간안에 목표지점에 도달하는 입력을 찾을 가능성을 높이는 것이다. + +구체적으로 BEACON은 두가지 기준을 가지고 입력의 목표지점 도달 가능성을 판단한다. 이 기준들은 입력이 지나는 프로그램의 각 위치에서 검사가 이루어진다. 첫번째 기준은 Control Flow Graph상에서 현재 지점과 목표지점 사이의 길이 존재하는 지의 여부이다. 두번째 기준은 현재 위치에서 가지고 있는 변수의 값들이, 목표지점에 도달하기 위한 조건을 만족하는지의 여부이다. +BEACON은 이 두 기준을 각 프로그램 지점에 assert문의 형태로 삽입하여 특정 입력이 목표지점에 닿을 수 없는 것이 확인되면 해당 입력의 실행을 즉시 종료한다. + +기존 지향성 퍼징이 목표지점에 더 가까이 도달할 입력을 "생성"하는 것에 더 관심을 두었다면, BEACON은 이미 생성된 입력이 목표지점에 도달하지 못할 경우, 조기에 "종료"하는 것에 관심을 둔다. 따라서 두 접근은 서로 독립적인 접근이며 서로를 보완할 수 있을 것이다. + +[1] "BEACON : Directed Grey-Box Fuzzing with Provable Path Pruning", Huang et al., S&P 2022 \ No newline at end of file diff --git a/_posts/2021-11-19-aflgopt.md b/_posts/2021-11-19-aflgopt.md new file mode 100644 index 0000000000000..8725d988d1a05 --- /dev/null +++ b/_posts/2021-11-19-aflgopt.md @@ -0,0 +1,23 @@ +--- +title: AFLGo 최적화 하기 +date: 2021-11-19 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +지향성 퍼징은 원하는 지점에 도달하는 입력을 생성하는 것을 목표로 한다. AFLGo[1](#aflgo)는 이 목표를 탐색문제로 접근하여 풀었는데, 탐색이 Local optima에 빠지는 것을 방지하기 위해 Exploration 과 Exploitation 단계를 나눈다. 하지만 그 전환 시점은 사용자의 입력에 의존하기에 매번 다양한 대상 프로그램에 대한 적절한 값을 찾기가 어렵다. 여기에 대한 대안으로 다른 탐색 기법을 적용한다면 별도의 입력없이도 대상 프로그램을 효과적으로 탐색할 수 있을 것이다. + +### 본문 +지향성 퍼징 도구들의 목적은 사용자가 원하는 지점까지 도달하는 입력을 빠르게 생성하는 것이다. 이 중 AFLGo는 각 프로그램 지점 사이의 거리를 고려하여 목표 지점에 더 가까이 도달하는 입력을 탐색해나간다. 만약 특정한 입력이 지난 경로가 평균적으로 목표 지점과 가깝다면 해당 입력을 기반으로 더 많은 입력을 생성하는 방식이다. + +하지만 계속해서 제일 가까운 입력만을 사용한다면, 더 이상 목표지점과 가까워 질 수 없는 막다른 길로 빠질 위험이 있다. 따라서 AFLGo는 전반적인 탐색을 충분히 한 후에 거리 정보를 적극적으로 활용하는 탐색으로 넘어간다. 이 때, 그 전환 시점은 사용자의 입력에 의해 결정되는데, 대상 프로그램마다 적절한 전환 시점은 다를 수 있어 어려움이 발생한다. + +이에 대한 대안으로 참고할 수 있는 것은 Ant Colony Optimization(ACO)라는 경로 탐색 기법이다. ACO는 개미가 길을 표시하듯이 매력적인 길에 페로몬으로 표시를 하고, 페로몬이 가장 강한 길을 최적의 경로로 선택한다. 이때, local optima에 빠지지 않는 핵심은 이 페로몬이 시간이 지날수록 감소한다는 것이다. 따라서 한때 매력적이었던 길도 새로운 업데이트가 없으면 그 매력을 잃음으로써 최적 경로의 후보에서 제외된다. + +AFLGo가 local optima에 빠질 위험은 거리 정보가 고정된 값이기 때문에 발생한다. 이 때, ACO의 페로몬 개념을 AFLGo에 적용한다면 막다른 지점에 다다른 입력은 그 매력을 잃게 되고, 계속해서 뻗어나갈 수 있는 입력은 살아남을 것이다. 먼저, 특정 입력의 거리 정보를 초기 페로몬 값으로 설정해주되 이는 시간에 따라 감소하도록 한다. 그리고 해당 입력으로부터 더 좋은 입력이 발생하였다면 기존 입력에 페로몬을 추가해주면 된다. + +[1] "Directed Greybox Fuzzing", Bohme et al., CCS 2017 \ No newline at end of file diff --git a/_posts/2021-12-03-search-directed-fuzzing.md b/_posts/2021-12-03-search-directed-fuzzing.md new file mode 100644 index 0000000000000..9c6c2f7c69ef2 --- /dev/null +++ b/_posts/2021-12-03-search-directed-fuzzing.md @@ -0,0 +1,21 @@ +--- +title: 탐색 문제로 본 지향성 퍼징 +date: 2021-12-03 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +지향성 퍼징은 프로그램 내부의 길을 찾는 탐색문제로 볼 수 있다. 그렇기에 대부분의 탐색문제와 마차가지로 국소 최적해(local optima)에 빠질 위험을 가지고 있다. 기존 기술인 AFLGo는 탐색 과정을 탐험과 집중 단계로 나누어 이러한 문제를 해결하려고 하였다. 하지만 정적분석을 활용한 지향성 퍼징에서는 정적분석 단계가 탐험을 대체하기에 더 효율적인 탐색이 가능하다. + +### 본문 +지향성 퍼징의 목적은 특정한 지점에 도달하는 입력을 찾는 것이다. 이는 프로그램이라는 미로 속에서 길을 찾는 것으로도 볼 수 있고, 이러한 시각은 지향성 퍼징을 탐색문제로서 접근할 수 있게 한다. 다른 현실적인 탐색 문제들이 그렇듯이 지향성 퍼징도 국소 최적해(local optima)의 위험이 존재한다. + +기존 기술인 AFLGo는 이 문제를 해결하기 위해 탐색 과정을 두 단계로 나누어 진행하였다. 먼저 탐험 단계를 통해 프로그램을 전체적으로 둘러보고, 이후 집중 단계에서 더 매력적인 길을 집중적으로 탐색하게 된다. 어디서 시작해야 원하는 지점에 도달 할 수 있을지 모르기 때문에 탐험 단계에서 가능한 시작 지점들을 최대한 많이 수집하는 것이다. 이 때, 탐험 단계에서는 주어진 정보(AFLGo의 경우에는 거리정보)를 온전히 활용하지 못하는 대신 막다른 길에 도달하지 않기 위한 공학적 등가교환(trade-off)이 이루어진다. + +하지만 정적분석을 활용한 지향성 퍼징에서는 별도의 탐험단계가 필요하지 않다. 정적분석 과정에서 탐험의 목적이 성취되기 때문이다. 정적분석을 통해 얻은 정의-사용(Def-Use) 정보는 특정 지점에 어떻게 데이터 흐름이 도달하는지 알려준다. 이는 달리 말해, 어디서부터 시작해야 원하는 지점에 도달할 수 있을 지 알려주는 단서로써, AFLGo의 탐험 단계보다 더 구체적이고 직접적인 정보가 된다. 따라서 정적분석을 활용한 지향성 퍼징은 주어진 정보를 처음부터 적극적으로 활용하여 더 효과적인 탐색, 즉 퍼징을 할 수 있을 것으로 기대된다. + +이렇게 문제의 특성이 무엇이고, 접근의 특성이 무엇인지 이해하는 것이 중요하다. 그렇지 않다면 정적분석을 활용함에도 불구하고 별도로 탐험 단계를 두는 등, 접근 방식의 장점을 제대로 살리지 못할 수 있기 때문이다. \ No newline at end of file diff --git a/_posts/2021-12-17-unseen-threat.md b/_posts/2021-12-17-unseen-threat.md new file mode 100644 index 0000000000000..729191a70846c --- /dev/null +++ b/_posts/2021-12-17-unseen-threat.md @@ -0,0 +1,22 @@ +--- +title: 보이는 것 너머에 있는 소프트웨어 결함의 위험성 +date: 2021-12-17 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +소프트웨어의 결함은 그 심각성에 비해 큰 주목을 받지 못한다. 눈에 보이지 않고, 손으로 만질 수 없는 그 특성 때문이다. 하지만 +이제 소프트웨어는 우리 삶 안으로 너무 깊숙히 들어왔다. 그렇기 때문에 우리는 소프트웨어 결함의 심각성을 인식하고 안전한 소프트웨어를 만들어야 한다. + +### 본문 +소프트웨어는 다른 공학 분야에서 다루는 대상들과 달리 물리적인 실체가 존재하지 않는다. 이러한 특성으로 인해 소프트웨어는 결함을 찾기도 힘들 뿐 아니라 그 심각성과 위험성을 쉽게 체감하기 어렵다. 보이지 않는다는 점은 소프트웨어의 결함이 제대로 다루어지지 못하는 결과로 이어진다. 우선 사회적인 측면에서는 중요성을 체감하기 어려운 소프트웨어 품질과 안전에 너무 적은 예산이 할당될 수 있다. 또한 개인적인 차원에서는 개발자 본인이 느끼는 소프트웨어 안전에 대한 심각성과 도덕적 책임감이 충분하기 않다면 그만큼 안전에 덜 신경쓰게 될 것이다. + +물리적 실체가 없는 것 말고도 소프트웨어 결함의 위험성을 체감하기 어려운 이유가 또 있다. 오픈소스로 관리되는 프로젝트가 많아지면서 누구나 소프트웨어에 기여할수 있게 되었고 그 소프트웨어는 어디에나 쓰일 수 있게 되었기 때문이다. 따라서 누군지도 모를 사람이 작성한 코드가 어디에서 쓰일지도 모르기 때문에 어떤 문제가 발생할지 예상하는 것이 더 어려워지는 것이다. + +최근에 심각하게 다뤄지는 Log4J 라이브러리의 보안 취약점 문제는 좋은 예시가 된다. 어느 한 오픈소스 개발자가 8년 전에 날린 커밋이 불씨가 되어 전 세계가 불타고 있는 중이다. 해당 라이브러리는 프로그램의 로그를 기록하는 일반적인 목적으로 사용되는데, 그렇기 때문에 개발자들도 이 패치가 얼마나 큰 영향을 끼치게 될지 감히 상상하지 못했을 것이다. 하지만 자신의 코드가 어디서, 얼마나 많이 사용될 지 알았다면 더 꼼꼼하고 철저하게 보안의 위험요소를 검토하지 않았을까 하는 아쉬움이 생긴다. + +메타버스의 시대가 왔다고 한다. 우리에게 주어지는 새로운 자연환경이 바로 소프트웨어인 셈이다. 앞으로는 마치 환경운동을 하듯이 소프트웨어 안전을 지키려는 관심과 노력이 필요하다. 오염된 현실에서 벗어나려 만든 메타버스에는 더욱 무시무시한 버그들이 숨어있을 수 있기 때문이다. \ No newline at end of file diff --git a/_posts/2021-12-30-human-friendly-research.md b/_posts/2021-12-30-human-friendly-research.md new file mode 100644 index 0000000000000..ba2256a7b1389 --- /dev/null +++ b/_posts/2021-12-30-human-friendly-research.md @@ -0,0 +1,21 @@ +--- +title: 인간 친화적인 결함 연구 +date: 2021-12-30 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +그 어느 개발자도 소프트웨어 결함으로부터 자유롭지 않다. 결함이 발생하는 것을 피할 수 없다면 결함이 발생했을 때 어떻게 대처하는지가 중요할 것이다. 다양한 연구들이 어떻게 개발자를 보조하여, 혹은 대체하여 결함에 대처할 것인지를 제안한다. 본 글에서는 이러한 연구들이 공통적으로 염두에 두어야 할 점을 고민해 볼 것이다. + +### 본문 +개발자라면 누구나 소프트웨어 결함으로부터 자유롭지 못하다. 언젠가는 어떠한 형태로든지 소프트웨어 결함에 기여하게 될 것이다. 이처럼 소프트웨어 결함을 피할 수 없다면 우리 연구자들은 어떻게 개발자를 도와서 효과적으로 소프트웨어 결함에 대처할 수 있을까? + +우선 결함이 발생했다는 것을 알려야 한다. 하지만 단순히 프로그램 위치를 하나 뱉어내는 것은 개발자를 귀찮게 할 뿐이다. 적절한 시점에 적절한 정보와 함께 주어져야 한다. 지난주에 수정한 코드의 결함을 오늘 알려준다면 개발자는 기억을 더듬어가야 간신히 관련된 내용을 떠올릴 수 있을 것이다. 따라서 결함이 발생하는 시점에 최대한 가깝게 이를 알리는 것이 중요하다. 또한 적절한 정보라 하면 해당 결함을 이해할 수 있도록 보조하는 정보를 말한다. 이 때, 시각적 자료가 효과적인데, 결함 위치와 실행흐름, 혹은 정보흐름으로 연결된 함수들을 그래프로 시각화하여 보여준다면 개발자에게 큰 도움이 될 것이다. + +더 적극적으로 개발자를 돕는 것에는 자동으로 패치를 생성하고 개발자에게는 그 검토만 맡기는 방법이 있다. 하지만 현재 자동 패치 생성 도구들은 테스트만 통과하는 부정확한 패치들을 많이 생성한다. 따라서 검토해야 하는 패치의 수가 많고 이는 개발자에게 새로운 부담이 된다. 이 때, 결함 위치와 마찬가지로 시각적 정보를 함께 제공한다면 더 쉬운 검토가 가능할 것이다. 예를 들어 실패했던 테스트의 결함 위치 주변의 실행 정보를 그래프로 시각화해서 패치 전과 후를 비교하는 것이다. 이렇게 실행흐름과 정보흐름의 변화를 시각적으로 비교하여 제공한다면 패치의 의미를 파악하기 더욱 수월할 것이다. + +결국 핵심은 사람 친화적인 기술이 되어야 한다는 것이다. 사람은 시각적 자료를 통해 더 직관적으로 사고할 수 있고, 작업 맥락과 연관 있는 내용을 더 잘 이해하고 처리할 수 있다는 등 사람에 대한 이해가 필요하다는 것이다. 이것이 앞으로 결함 관련 연구들이 염두에 두어야 할 점이다. \ No newline at end of file diff --git a/_posts/2022-01-13-question.md b/_posts/2022-01-13-question.md new file mode 100644 index 0000000000000..01874bd515483 --- /dev/null +++ b/_posts/2022-01-13-question.md @@ -0,0 +1,23 @@ +--- +title: 나는 질문한다, 고로 흘러간다 +date: 2022-01-13 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +질문하는 것은 우리가 계속해서 앞으로 나아가게 해주는 원동력이다. 연구를 함에 있어서, 혹은 삶을 살아가면서 끊임없이 성장하고 진보하는 것이 중요하다. 변화가 없고 정체되면 발전도 없고 재미도 없기 때문이다. 따라서 나의 상태는 어떠한지 계속 질문하는 것을 통해 스스로를 점검하고 어떻게 하면 달라질 수 있는지 찾아가야 한다. + +### 본문 +고인 물은 썩는다. 단순히 수질을 염려하는 말이 아니다. 사람도 변화가 없이 정체되면 자신의 가능성을 썩히기 때문이다. 그렇다면 고이지 않고 흐를 수 있는 방법은 무엇일까? 어떻게 하면 계속해서 달라지고, 발전하고, 성장할 수 있을까? 리차드 해밍의 글, "당신과 당신의 연구"(이하 당당연)[1](#you)를 읽으며 그 실마리를 잡을 수 있었다. + +당당연에는 세계적인 석학의 경험에서 우러나오는 다양한 조언들이 담겨있었다. 비단 연구 뿐 아니라 인생에도 적용이 되는 내용이었다. 그러나 그 핵심은 하나였다. 계속해서 질문하는 것이다. 정말 중요한 질문들은 메타인지적인 질문이라고 생각한다. "나는 지금 최선을 다 하고 있는가?", "내가 하는 연구는 무슨 의미가 있는가?" 등. 스스로에 대해 질문하면서 나를 돌아보고, 지금보다 더 나아지려면 무엇을 해야 할지 질문을 던지는 것이다. 이러한 질문들은 현 상황에 대한 문제의식에서 출발한다. 따라서 이러한 질문들을 던지기 위해서는 현 상황에 대한 냉철한 시선이 필요하다. + +또 다른 종류의 중요한 질문은 추상적인 질문들이다. "창의성이란 무엇인가?", "성공적인 연구는 무엇인가?" 등, 자신이 중요하게 생각하는 가치에 대해 고민하는 질문들이다. 가치에 대한 질문은 내가 추구할 가치를 명확히 정의내리는 작업이다. 명확히 정의내린 가치는 곧 삶의 방향성이고, 모든 선택의 기준이 된다. 따라서 우리는 모두가 공유하는 모호한 추상적인 가치를 가져와 자신이 추구할 개인적인 목표로 삼는 작업을 해야 한다. + +석사 기간은 짧다. 벌써 한 학기가 흘러갔지만 믿기지가 않는다. 작년 7월에 비해 얼마나 성장했는지도 잘 모르겠다. 확실한 것은, 남은 1년 반 후의 내가 지금의 나와 다르길 원한다면 이 훈련의 기간 동안 계속해서 질문해야 한다는 것이다. + +[1] http://ropas.snu.ac.kr/~kwang/quote/hamming.pdf \ No newline at end of file diff --git a/_posts/2022-02-25-jeju-trip.md b/_posts/2022-02-25-jeju-trip.md new file mode 100644 index 0000000000000..688addc11f7e1 --- /dev/null +++ b/_posts/2022-02-25-jeju-trip.md @@ -0,0 +1,19 @@ +--- +title: 제주도 출장기 +date: 2022-02-25 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +2월 초, 석사 과정의 첫 출장을 제주도로 다녀왔다. 처음으로 많은 사람들 앞에서 내 연구를 소개하였고, 많은 관심과 질문을 받을 수 있었다. 또한 다른 사람들의 연구를 엿보며 경쟁심과 동질감을 동시에 느끼기도 하였다. 이번 출장을 통해 연구 흐름이 끊길까 우려하였지만 오히려 한 박자 더 빨라지는 신기한 경험을 할 수 있었다. + +### 본문 +2월 9일 아침, 아직 동이 트기도 전, 우리 연구실 사람들은 버스 터미널로 하나둘씩 모여들었다. 한 손에는 5박 6일간의 짐을 싼 캐리어를, 한 손에는 각자의 연구 성과를 정리한 커다란 전지를 돌돌 말아 들었다. 제주도에서 열리는 ERC 워크숍과 SigPL 겨울학교에 참석하기 위해서였다. 연구실이 출범한 이후 첫 대외 행사였기에 다들 설레는 마음이었다. 그렇게 설레는 마음으로 시작한 제주도 일정이 내게 남긴 세가지에 대해 이야기 해보려 한다. + +우선 자신감이 남았다. 행사의 순서 중 내가 직접 참여한 것은 번개 발표와 포스터 세션이었는데, 발표로는 최우수 발표상을 받았고, 포스터 세션에서는 많은 사람들의 관심을 받았다. 내 연구의 중요성을 내가 아는 것도 중요하지만, 같은 분야의 사람들에게 인정 받는 것도 중요하다고 생각하기에 이는 큰 힘이 되었다. 또한 연구에 대한 뜨거운 마음이 남았다. 나와 같은 관심사와 배경을 가진 사람들이 치열하게 연구해온 결과를 보고 있자니 경쟁심이 느껴지는 동시에 동질감이 느껴졌다. 그래서 나도 저런 멋진 연구를 해야겠다는 생각을 하게 되었다. 마지막으로 좋은 추억이 남았다. 제주 올레길을 산책하는 동안 평소 존경했던 이광근 교수님과 독대할 기회가 있었다. 교수님의 책을 읽으며 느꼈던 교육과 언어에 대한 교수님의 생각들에 대한 얘기를 나눌 수 있었는데, 20분 정도의 그 시간을 오래오래 잊지 못할 것 같다. + +사실 처음에는 봄 학기 개강 전 6일 간 출장을 떠나게 되어 연구 흐름에 지장이 갈까 속으로 염려하였다. 하지만 오히려 어서 연구를 하고 싶은 마음으로 제주도에서 돌아오게 되었고 결국 연구 흐름에는 지장이 없었다. 앞으로도 이렇게 반기별로 연구 성과를 정리하여 발표하고, 또 다른 사람들의 이야기를 들어보는 시간이 필요할 것 같다. 또한 한편으로는 세계적인 학술대회는 얼마나 더 짜릿할까 기대가 되었다. diff --git a/_posts/2022-03-11-alice-in-metaverse.md b/_posts/2022-03-11-alice-in-metaverse.md new file mode 100644 index 0000000000000..7bfc4dafb0178 --- /dev/null +++ b/_posts/2022-03-11-alice-in-metaverse.md @@ -0,0 +1,19 @@ +--- +title: 이상한 메타버스의 앨리스 +date: 2022-03-11 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +메타버스의 시대가 열린다고 한다. 사람들은 메타버스를 통해 새로운 경험을 하고 그 안에서 또 다른 삶을 살아갈 수 있게 되었다. 그러나 사람들의 일상이 메타버스로 많이 옮겨갈수록, 메타버스를 구성하는 소프트웨어의 안전성이 더욱 중요해진다. 이 때, 정적분석 기술을 통해 사람들이 안심하고 메타버스를 누릴 수 있게 될 것이다. + +### 본문 +메타버스에 대한 엄밀한 정의는 아직 내려지지 않았지만 보편적으로는 현실너머의 현실, 즉 현실 세계를 가상세계로 확장 시킨 것을 말한다. 코로나19로 인해 오프라인 활동이 단절되면서 메타버스에 대한 관심과 수요가 급증하였고, 이에 따라 다양한 서비스들이 새로이 출시되거나 다시 주목을 받고 있다. 그리하여 사람들은 이제 메타버스에서 거래도 하고, 땅을 사고, 공연을 관람하기도 한다. + +여기서 우리가 주목할 점은 사람들의 일상이 메타버스로 옮겨갈수록 현실 세계의 물리적 보안 문제들이 소프트웨어의 세계로 넘어가게 된다는 것이다. 단적인 예로 가상세계에서의 자산이 더 이상 단순한 게임머니가 아닌 실제 자산이 되기 때문에 가상 세계의 물건을 안전하게 지킬 필요가 있다. 따라서 메타버스 시대를 준비하려면 플랫폼과 컨텐츠를 만들 뿐 아니라 안전한 가상세계를 만들 수 있어야 한다. + +메타버스 시대에 정적분석 기술은 가상세계의 법칙들을 보장해 줄 수 있을 것이다. 가상세계의 법칙들, 예를 들어 집의 벽은 아무도 뚫고 들어올 수 없다는 법칙,은 모두 프로그램으로 구성될 것이다. 하지만 그런 프로그램들이 안전하지 않다면, 가상세계는 매우 위험한 공간이 될 것이다. 사람들은 마치 이상한 나라의 앨리스처럼 물리법칙이나 상식이 통하지 않는 세상을 경험하게 될 것이다. 따라서 그런 중요한 프로그램들에 취약점은 없는지, 실제로 프로그램을 통해 정의된 법칙들이 잘 지켜질지를 확인할 수 있다면, 사람들은 안심하고 가상세계의 삶을 누릴것이다. diff --git a/_posts/2022-03-24-buffer-overrun-set.md b/_posts/2022-03-24-buffer-overrun-set.md new file mode 100644 index 0000000000000..a7bb6b7001cba --- /dev/null +++ b/_posts/2022-03-24-buffer-overrun-set.md @@ -0,0 +1,21 @@ +--- +title: 버퍼 오버런 종합보수세트 +date: 2022-03-24 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +버퍼 오버런은 보안과 직접 연결되는 심각한 결함이다. 악성 사용자의 경우 버퍼 오버런을 통해 중요한 데이터를 훼손하거나 탈취할 수도 있기 때문이다. 다행히 버퍼 오버런만 목표로 한다면, 그 특성을 활용하여 효과적인 대응시스템을 고안할 수 있다. 특히 메모리 접근 분석 도구, 정적 분석기, 지향성 퍼저, 자동 프로그램 수정기와 같은 도구를 종합하여 적용한다면 버퍼 오버런으로부터 우리 프로그램을 지킬 수 있을 것이다. + +### 본문 +버퍼 오버런(buffer overrun)은 빈번히 발생하면서도 위험성은 높기에 심각한 종류의 결함이다. 그 유명한 하트블리드 사태의 경우도 사실은 버퍼 오버런으로 인해 발생하였다. 버퍼 오버런이 발생하면 권한이 없는 메모리에 값을 쓰거나 읽어올 수 있게 되는데, 악성 사용자는 이를 의도적으로 발생시켜 중요한 데이터를 오염시키거나 탈취할 수도 있다. 따라서 버퍼 오버런의 위험을 확실하게 줄일 수 있는 방법이 필요하다. + +이 때, 버퍼 오버런에 특화된 접근을 구상한다면 이에 더욱 효과적으로 대응할 수 있을 것이다. 일반적인 기능 오류와 달리, 버퍼 오버런의 발생은 메모리 접근 분석 도구를 활용해 잡아낼 수 있다. 따라서 이 점을 적극 활용하여 대응책을 구상해야 한다. 다음과 같은 도구 사슬을 생각해보자: 정적 분석기, 지향성 퍼저, 자동 프로그램 수정기. + +먼저 정적 분석을 통해 버퍼 오버런이 발생할 가능성이 있는 지점을 찾는다. 그 후, 지향성 퍼저를 통해 의심되는 지점들을 차례대로 테스트하면 실제로 결함이 발생하는지에 대한 정보와, 결함을 발생시키는 입력을 찾을 수 있다. 이 때, 입력만 있으면 메모리 접근 분석 도구를 통해 버퍼 오버런 결함이 발생하는지 확인할 수 있다. 마지막으로 자동 프로그램 수정기로 결함이 발생한 위치를 수정하되, 그 전 단계인 퍼징 시에 생성된 입력들로 생성된 패치를 더욱 확실하게 검증할 수 있다. + +위의 도구 사슬이 버퍼 오버런에 효과적으로 대응 할 수 있는 것은 세 도구의 시너지가 발생하기 때문이다. 각각의 도구는 한계가 존재하지만, 함께 사용하는 것이 이를 보완한다. 이렇게 각 도구의 한계를 파악하고, 서로 보완할 수 있는 도구를 조합할 수 있다면 버퍼 오버런과 같은 중요한 문제도 해결할 수 있을 것이다. \ No newline at end of file diff --git a/_posts/2022-04-07-reproducibility.md b/_posts/2022-04-07-reproducibility.md new file mode 100644 index 0000000000000..65de48407b512 --- /dev/null +++ b/_posts/2022-04-07-reproducibility.md @@ -0,0 +1,25 @@ +--- +title: "투명성: 영향력 있는 연구의 열쇠" +date: 2022-04-07 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +연구자에게는 자신이 발견하고 정리한 지식을 잘 기록하여 사람들에게 전달할 책임이 있다. 특히 컴퓨터 공학 분야에서는 구현체를 공개하는 것이 연구자의 책임을 완성하는 중요한 기준이다. 이 책임을 다할 때에는 영향력있는 연구를 할 수 있지만, 그렇지 않을 때는 별다른 기여를 하지 못하는 연구에 그치게 된다. + +### 본문 +연구자의 책임은 자신이 발견하고 정리한 지식을 잘 기록하여 사람들에게 전달하는 것이다. 이 때, 지식이 전달되는 가장 보편적인 형태는 논문이다. 하지만 컴퓨터 과학 분야에서는 연구자의 책임이 논문으로 끝나지 않는 경우가 많다. 연구자의 책임을 완성하는 마지막 조각은 구현체를 공개하는 것이다. + +연구자의 책임을 다하지 않은 연구는 공허한 메아리일 뿐이다. 안타깝게도 일부 연구에서는 구현체의 공개가 제대로 이루어지고 있지 않다. 예를 들어 지향성 퍼징 도구인 Hawkeye[1](#hawkeye)는 구현체를 아예 공개하지 않았다. 마찬가지로 지향성 퍼징 도구인 ParmeSan[2](#parmesan)은 구현체를 공개하긴 했지만, 논문에 나온 실험과 관련된 추가적인 설정들은 공개되지 않았다. 이런 상황에서는 다른 연구자들이 기존 기술과의 객관적인 성능 비교를 하기 어려워진다. 따라서 새로운 기술이 논문으로 쓰이는 것이 어려워지고, 기술 발전이 더뎌진다. + +반면, 연구자의 책임을 다한 연구는 정말 영향력 있는 연구가 된다. 우선 우수한 논문이 발표되면 그 분야의 사람들이 웅성거릴 것이다. 그리고 호기심이 생긴 사람들은 실험 결과와 구현체를 찾아보게 될 것이다. 구현체가 잘 정리되어 공개되었기 때문에 사람들은 이를 활발하게 돌려보고 비교하고 개선해나갈 것이다. 그렇게 기술이 더욱 발전하는 것이다. + +연구를 통해 진정한 기여를 하려면 논문 통과가 목적이 아니어야 한다. 진정한 기여는 그 다음에 이루어지기 때문이다. 따라서 논문이 발표된 이후에 학계에 불러일으킬 웅성거림과 뚝딱거림을 목표로 하는 연구는 반드시 성공할 것이다. + + +[1] "Hawkeye: Towards a Desired Directed Grey-box Fuzzer", Chen et al., CCS 2018 \ +[2] "ParmeSan: Sanitizer-guided Greybox Fuzzing", Österlund et al., USENIX Security 2020 diff --git a/_posts/2022-04-22-ossfuzz.md b/_posts/2022-04-22-ossfuzz.md new file mode 100644 index 0000000000000..cd16068c4eb5f --- /dev/null +++ b/_posts/2022-04-22-ossfuzz.md @@ -0,0 +1,21 @@ +--- +title: "OSS Fuzz: 구글의 지구방위 프로젝트" +date: 2022-04-22 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +소프트웨어의 결함은 현실의 큰 문제에까지 영향을 미친다. 소프트웨어의 오류가 재산 피해, 인명 피해와 직결 될 수 있기 때문이다. 따라서 구글은 이러한 프로그램 결함들을 잡아내기 위한 OSS Fuzz 프로젝트를 운영중에 있다. OSS Fuzz의 운영은 성공적이었으며 많은 연구의 귀중한 밑거름이 되었다. 이 때, 프로그램 분석 도구까지 OSS Fuzz에 통합한다면 더 효과적으로 결함을 찾아낼 수 있을 것이다. + +### 본문 +우리는 소프트웨어 결함이 큰 위협이 되는 세상에 살고 있다. 소프트웨어에 문제가 생긴다면 하늘의 새는 아니더라도 하늘의 로켓이 떨어지고, 자동차가 급가속하며, 데이터화된 우리의 재산이 증발할 수도 있다. 오픈소스로 관리되는 프로젝트들은 이러한 결함의 위협으로부터 특히 더 위험할 수 있다. 왜냐하면 각 개발자들의 전체 코드에 대한 이해가 떨어지기 쉽기 때문이다. 또한 오픈소스는 그 특성상 수정과 배포가 빈번하게 일어난다. 따라서 한번 결함이 유입되면 그 파급력이 더욱 크다. + +이러한 상황에 구글이 발벗고 나섰다. 때는 바야흐로 2016년, OSS Fuzz 프로젝트를 발표한 것이다. 제안은 간단했다. 구글이 막대한 서버 인프라로 컴퓨팅 파워를 지원할테니, 오픈소스 프로젝트는 검사를 위해, 퍼징 도구들은 성능 평가를 위해 등록하라는 것이었다. 그 이후로 6년이 지난 현재, OSS Fuzz 프로젝트에는 500여개의 오픈소스 프로젝트가 등록되어있고, 다양한 퍼저들을 통해 35000여건의 결함을 발견할 수 있었다. 구글이 우리 세상의 안전을 지키고 있는 것이다. + +OSS Fuzz의 가장 큰 기여는 퍼징 대상과 퍼징 도구를 한데 모으는 플랫폼을 제공했다는 것에 있다. 오픈 소스 프로젝트 관리자들과 퍼징 도구 개발자들의 필요가 만나는 지점이 형성된 것이다. 또한 OSS Fuzz를 통해 계속해서 발견되는 결함은 벤치마크화 되어 이후 연구들의 초석이 되고 있다. + +만약 OSS FUZZ에 정적 분석 도구들도 가세한다면 더 효율적으로 소프트웨어 안전을 도모할 수 있을 것이다. 막대한 컴퓨팅 파워는 공짜로 주어지지 않는다. 많은 전기가 소모되며, 많은 열이 발생한다. 따라서 이러한 자원을 전략적으로 사용할 필요가 있다. 이 때, 프로그램을 안전(Sound)하게 분석한 후, 결함이 발생할 것으로 예상되는 지점들에 집중한다면 결함을 놓치지 않는 동시에 더 효과적인 퍼징이 될 수 있을 것이다. \ No newline at end of file diff --git a/_posts/2022-05-05-fuzz-driver.md b/_posts/2022-05-05-fuzz-driver.md new file mode 100644 index 0000000000000..51739649d2f7f --- /dev/null +++ b/_posts/2022-05-05-fuzz-driver.md @@ -0,0 +1,21 @@ +--- +title: Fuzz Driver 합성 +date: 2022-05-05 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +퍼징은 자동으로 생성된 수많은 입력을 통해 프로그램을 테스트하는 기법이다. 만약 퍼징으로 라이브러리의 결함을 찾고 싶다면 퍼즈 손잡이가 필요하다. 퍼즈 손잡이 작성은 복잡한 작업이라 주로 수작업으로 이루어져 왔다. 하지만 최근들어 자동화의 움직임이 불고 있다. + +### 본문 +퍼징은 자동으로 생성된 수많은 입력을 통해 프로그램을 테스트하는 기법이다. 구글의 OSS Fuzz 프로젝트에 의하면, 지난 6년간 다양한 퍼저들은 3만5천 건의 결함을 발견했다. 이렇게 효과적인 퍼징이 가장 필요한 곳은 아마 오픈소스 라이브러리일 것이다. 왜냐하면 라이브러리에 있는 결함은 해당 라이브러리를 사용하는 다양한 프로그램들에게까지 영향을 미치기 때문이다. 하지만 라이브러리를 퍼징하는 것은 그리 단순하지 않다. + +라이브러리 프로그램을 퍼징하기 위해선 퍼즈 손잡이(퍼즈 드라이버-Fuzz Driver라고도 한다)가 필요하다. 왜냐하면 라이브러리 프로그램은 그 자체로 실행될 수 없기 때문이다. 따라서 해당 라이브러리의 함수를 호출하여 사용해주는 프로그램이 있어야 라이브러리의 코드가 실행될 수 있다. 이 때, 퍼즈 손잡이는 라이브러리를 호출하는 작은 프로그램으로써, 퍼저와 라이브러리를 이어주는 역할을 한다. + +제대로 된 퍼즈 손잡이는 올바르게 라이브러리를 사용하며, 동시에 라이브러리의 핵심적인 코드를 최대한 많이 실행해야 한다. 우선 올바르게 작성되어야 제대로 라이브러리의 기능을 실행할 수 있을 것이다. 또한 퍼즈 손잡이의 목적은 퍼징이므로, 퍼즈 손잡이를 통해 결함을 발견할 수 있어야 한다. 이 때, 핵심적인 코드를 최대한 많이 실행할 수록 결함을 발견할 확률도 높아진다. 따라서 제대로 된 퍼즈 손잡이를 작성하기 위해서는 라이브러리의 사용법과 내용을 잘 이해하고 있어야 한다. 그렇기 때문에 퍼즈 손잡이는 주로 수작업으로 작성되며, 이는 퍼징을 손쉽게 시행하기 어려운 이유가 된다. + +최근 들어, 퍼즈 손잡이를 자동으로 합성하는 기술이 연구되고 있다. 아직까지는 라이브러리의 실제 사용 예제를 통해 올바르기만 한 퍼즈 손잡이를 만들어내고 있다. 하지만 여기에 데이터 흐름을 고려한다면 더 많은 라이브러리 코드를 실행할 수 있을 것이다. 그렇다면 올바르면서 효과적이기까지 한 퍼즈 손잡이를 자동으로 생성할 수 있을 것으로 기대된다. \ No newline at end of file diff --git a/_posts/2022-05-19-deathly-hallows.md b/_posts/2022-05-19-deathly-hallows.md new file mode 100644 index 0000000000000..c51c81b976da6 --- /dev/null +++ b/_posts/2022-05-19-deathly-hallows.md @@ -0,0 +1,23 @@ +--- +title: 프로그램 분석과 죽음의 성물 +date: 2022-05-19 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +프로그램 분석의 자동성, 종료성, 정확성은 동시에 쟁취할 수 없는 꿈의 성질이다. 따라서 실제 프로그램 분석은 이 셋 중 하나를 포기함으로 가능해진다. 연구자들은 자신이 풀고자 하는 문제의 성질이 어떠한지를 바탕으로 어떠한 성질을 포기할 지 잘 선택해야 한다. + +### 본문 +예로부터 지금까지 소설이나 전설에서 뭔가 좋은 것은 꼭 세 가지가 묶여서 전해진다. 해리포터의 죽음의 성물, 일본 신화의 삼신기, 단군신화의 천부인 등이 그렇다. 이러한 물건들은 보통 다 모으면 굉장한 힘을 발휘하지만 다 모으기가 굉장히 어려운 성격을 가진다. 프로그램 분석의 성질에도 이러한 3종 세트가 존재한다. 그것은 바로 자동성(Automatic), 종료성(Terminating), 그리고 정확성(Exact) 이다. + +프로그램 분석은 현실의 문제지만 그 세가지 성질을 다 모으기가 아예 불가능하다는 점에서는 전설보다 더 전설같다. Rice의 정리에 의하면 프로그램의 모든 중요한 성질은 결정 불가능(Undecidable)하기 때문이다. 여기서 결정 불가능하다는 것은 프로그램을 자동으로 정확하게 분석한 후 종료하는 분석이 불가능하다는 것이다. 이 세가지가 동시에 가능하다면, 우리는 멈춤 문제(Halting Problem)를 비롯해서 수많은 난제들을 해결할 수 있을 것이다. 그야말로 컴퓨터 과학계의 죽음의 성물인 셈이다. + +따라서 프로그램 분석이 필요한 경우 세 가지 중 하나를 포기한 방법을 택한다. 자동성을 포기하고 수동 작업으로 증명을 보조하거나, 종료성을 포기하고 무한히 테스팅을 돌린다. 또는 정확성을 포기하고 그 의미를 뭉뜽그려 프로그램을 분석하기도 한다. + +프로그램을 연구하는 입장에서는 자신이 풀고자 하는 문제의 성질을 잘 이해하고, 필요에 맞게 위의 세 가지 중 무엇을 포기해야할지 결정해야 한다. 프로그램의 의미가 결정 불가능하기 때문에 결국 사람에게 그 선택이 넘어오는 것이다. 예를 들어, 사용자가 전문성이 있다면, 수동 작업으로 증명을 보조하는 방법을 선택할 수 있다. 혹은 항상 종료한다는 보장이 없어도 괜찮거나, 경험적으로 그럴 가능성이 매우 작은 경우에는 종료성을 포기하고 모델 체킹을 할수도 있다. 마지막으로 가끔 거짓 경보가 나오더라도 큰 비용 없이 확실한 결과가 필요한 경우는 정적 분석을 사용할 수 있다. + +비록 프로그램을 자동으로 정확하게 분석한 후 종료하는 분석은 불가능하지만, 연구자들은 위와 같이 다양한 대안들을 제시하였다. 이렇게 제약 조건의 틈바구니에서 살 길을 도모하는 것이 바로 공학의 참 아름다움이 아닐까 한다. \ No newline at end of file diff --git a/_posts/2022-06-02-responsibility.md b/_posts/2022-06-02-responsibility.md new file mode 100644 index 0000000000000..61cd524b26f27 --- /dev/null +++ b/_posts/2022-06-02-responsibility.md @@ -0,0 +1,19 @@ +--- +title: 정보화 시대를 살아가는 컴퓨터 과학자의 책임 +date: 2022-06-02 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +정보화 시대에 컴퓨터 과학은 사람들의 일상에 가장 밀접한 학문이라고 할 수 있다. 하지만 여전히 컴퓨터 과학에 대한 대중적인 지식은 그리 깊지 않은 편이다. 따라서 보편적인 언어로 전문적인 지식을 모두에게 전달하는 것이 우리 전문가에게 주어진 의무로 여겨야 할 것이다. + +### 본문 +정보화 시대에 가장 핵심적인 기여를 했으며, 여전히 그 중심에 있는 학문은 바로 컴퓨터 과학이다. 그리고 자연스럽게 컴퓨터 과학은 어느때보다 사람들의 일상에 가까워졌다. 그 시작은 인터넷이었을 것이다. 인터넷이 등장함에 따라 정보 전달에 있어 물리적인 거리의 제약이 극복되었고, 지식의 대중화가 이루어졌다. 모두가 핸드폰과 노트북 등 여러대의 컴퓨터를 소유하며, 중요한 업무를 처리하거나 오락을 즐긴다. 또한 인공지능의 등장으로 사람들의 삶이 편해지고 있는 것으로 보인다. + +하지만 이렇게 일상에 가까운 컴퓨터 과학에 대한 대중적인 이해도는 생각보다 낮은 편이다. 이제 정보화 시대라는 단어도 낡은 어감을 줄 정도로 시간이 흘렀지만, 여전히 사람들은 컴퓨터 과학의 원리에 대해서는 낯설어 한다. 물론 모든 기술의 구체적인 원리를 파악해야 할 필요는 없다. 다만 일상을 살아가면서 필요한 지식의 범주에 컴퓨터 과학이 들어오고 있기에 우리가 이를 잘 따라가고 있는 지 확인해볼 필요가 있다. 최근에 어느 교육감 후보의 공약이 기억에 남는다. 교육에 빅데이터와 인공지능을 도입하겠다는 공약이었는데, 구체적으로 뭘 하겠다는 것인지는 알 수가 없었다. 아직 컴퓨터 과학에 대한 인식이 그저 막연하다는 뜻이 아닐까 생각했다. + +이런 상황에서 우리 컴퓨터 전문가들의 역할은 전문 지식을 보편적인 언어로 세공하여 모두에게 공급하는 것이다. 우리는 높은 곳에서 뛰어내리면 아래로 떨어진다는 사실과, 해가 지면 추워진다는 사실들을 상식으로 알고 있다. 이렇게 자연벅칙에 대한 지식처럼 컴퓨터 과학의 지식을 보편화해야 한다. 컴퓨터 과학의 원리, 기술적/이론적 한계를 통해 컴퓨터로 현재 무엇이 가능하고, 무엇이 어렵고, 무엇이 불가능한지를 조금은 알 수 있을 것이다. 그렇게 된다면 컴퓨터 과학에 대한 막연한 환상에 현혹되지 않고 건전한 관심을 통해 우리 사회가 더욱 발전할 수 있을 것이다. \ No newline at end of file diff --git a/_posts/2022-06-16-briliance.md b/_posts/2022-06-16-briliance.md new file mode 100644 index 0000000000000..8abca3ce75020 --- /dev/null +++ b/_posts/2022-06-16-briliance.md @@ -0,0 +1,21 @@ +--- +title: 기발함에 대한 환상 +date: 2022-06-16 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +연구를 함에 있어 사람들이 흔히들 하는 오해는 바로 기발함이 필요하다는 것이다. 하지만 그것은 환상일 뿐이고, 환상이 걷히고 나면 치열함과 꾸준함만이 남는다. 사람이 하는 생각은 다 비슷하기 때문에 결국 누가 실제로 끝까지 하는지가 중요하기 때문이다. 따라서 우리는 기발함이 아닌 꾸준함에 우리 가치를 두어야 한다. + +### 본문 +혹시 연구라는 단어를 들었을 때 "번뜩이는 아이디어"와 같은 단어가 생각나는가? 놀라운 일은 아니다. 우리는 위인 전기에서 사람들의 천재성만을 기억하기 때문이다. 뉴턴의 사과 이야기, 아인슈타인의 상대성 이론 등은 우리가 기발함에 대한 환상을 갖도록 한다. + +하지만 연구의 실상은 기발함에 있지 않다. 분명 뉴턴은 사과 하나 떨어진 것을 가지고 만유인력의 법칙을 고안하지 않았을 것이다. 떨어지는 사과는 단지 그가 관찰한 수많은 현상 중 하나일 뿐이다. 나는 뉴턴이 실제로 한 일은 다양한 현상을 관찰하고, 수치를 기록하고, 매일매일 괴롭게 고민했던 것이라고 확신한다. 즉, 기발한 아이디어라는 결과는 번뜩이는 천재성이 아닌, 꾸준한 관찰과 고민에서 나오는 것이다. + +기발함이 아닌 꾸준함으로 연구를 해야 하는 이유는 다음과 같다. 누군가 남들보다 탁월한 지성으로 인해 짧은 시간 안에 기발한 아이디어를 생각해냈다고 하자. 하지만 그 아이디어는 높은 확률로 다른 누군가 언젠가 한번쯤은 해 보았던 생각일 것이다. 사람의 생각은 다 비슷한 역량과 한계를 갖고 있기 때문이다. 따라서 결국 누가 먼저 생각하는지가 아닌, 누가 먼저 끝까지 해 내는지가 중요한 것이다. 그리고 그 작업이 몇번 반복되면 생각을 실제로 옮기는 것이 점점 익숙해지며 전문가가 될 수 있을 것이다. + +이 글을 쓰는 이유는 나 스스로 얼마 전까지 기발함에 대한 환상에 빠져있었기 때문이다. 그러다 보면 조급해지고 불안해지기 마련이다. 스스로 연구에 자신이 없고, 지금까지의 성과가 초라해보인다면 자신이 현재 기발함을 쫓고 있는 것은 아닌지 점검해보자. 그리고 진정한 힘은 꾸준함에 있다는 것을 기억하자. 이 글이 미래의 나를 비롯한 연구 초년생들에게 힘이 되기를 바란다. diff --git a/_posts/2022-07-01-shout.md b/_posts/2022-07-01-shout.md new file mode 100644 index 0000000000000..a188f77af2c2e --- /dev/null +++ b/_posts/2022-07-01-shout.md @@ -0,0 +1,24 @@ +--- +title: 동적 세상의 중심에서 정적 분석을 외치다 +date: 2022-07-01 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +퍼징은 강력한 컴퓨팅 파워를 기반으로 수많은 입력을 자동으로 생성하여 프로그램을 테스트하는 기법이다. 따라서 어떻게 보면 가장 동적인 프로그램 테스트 방식이라고 볼 수 있다. 하지만 최근, 특히 지향성 퍼징에서 정적 분석 정보를 활용한 방식들이 큰 성과를 거두고 있다. + +### 본문 +퍼징은 다양한 입력을 무수히 생성하여 프로그램을 자동으로 테스트하는 기법이다. 이 때, 강력한 컴퓨팅 파워가 뒷받침해준다면 퍼징은 굉장히 효과적으로 프로그램의 결함을 잡아낼 수 있다. 특히 구글은 현재도 실시간으로 OSS-FUZZ 라는 프로젝트를 운영하여 퍼징을 통해 수많은 오픈소스프로젝트에서 다양한 결함을 찾아내는 중이다. + +퍼징은 어떻게 보면 가장 동적인 프로그램 테스트 기법이다. 입력을 생성함에 있어 중요한 철학이 "질보다 양"이기 때문이다. 물론 입력의 품질을 완전히 포기할 수는 없어 커버리지 정보를 활용한다거나(Greybox Fuzzing) 문법구조를 참고하기는 하지만(Grammar-based Fuzzing), 여전히 생성하는 입력의 양이 절대적으로 중요한 것은 사실이다. + +하지만 최근, 이러한 퍼징에 정적분석 정보를 활용한 방식들이 두각을 드러내고 있다. 정적분석 정보는 특히 지향성 퍼징에서 많이 활용되는데, 프로그램에서 집중하는 지점이 더 좁혀지는 그 특성 때문에 정적분석의 부담이 비교적 줄어들기 때문이다. + +지향성 퍼징에서 정적 분석 정보의 활용은 다양하게 이루어진다. 각 입력이 실행흐름그래프 상에서 목표 지점에 얼마나 가까운지를 통해 더 좋은 입력을 선별하거나, 목표지점에 도달 할 수 있는 조건을 미리 분석한 후 가능성이 없는 입력을 조기에 쳐내기도 한다. 특히 내가 현재 진행중인 연구는 목표 지점과 의미있게 연관된 프로그램 지점을 지나는 입력만 고려하는 접근을 취하고 있다. + +이렇듯 가장 동적으로 보이던 퍼징 기법에서도 정적분석 기술이 활발히 활용되고 있다. 물론 퍼징을 할 때, 언제나 정적분석이 만능 열쇠가 되지는 않을 것이다. 그러나 지향성 퍼징의 경우처럼 조건이 맞아떨어질 때는 +동적 세상에 정적 분석이 들어와 굉장한 시너지를 발휘하게 된다. 각 기술의 장점과 단점, 그리고 해결하고자 하는 문제의 특징을 잘 파악하고 있다면 이렇게 굉장한 시너지를 발휘하는 또 다른 조합을 찾을 수 있을 것이다. diff --git a/_posts/2022-07-28-direction-of-directed-fuzzing.md b/_posts/2022-07-28-direction-of-directed-fuzzing.md new file mode 100644 index 0000000000000..b1b6b8cf15c84 --- /dev/null +++ b/_posts/2022-07-28-direction-of-directed-fuzzing.md @@ -0,0 +1,23 @@ +--- +title: 지향성 퍼징 연구가 지향해야 할 것들에 관하여 +date: 2022-07-28 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +지향성 퍼징은 대상 프로그램의 특정 위치에 도달하는 입력을 생성하는 것을 목적으로 한다. 최근 최우수 보안 학회에 출간되는 다양한 지향성 퍼징 논문들은 퍼징 분야에서의 그 인기를 여실히 보여준다. 하지만 아직 신생 분야인 지향성 퍼징 연구를 위한 표준이 수립되지 않은 상황이다. 특히 비교 실험과 성능 평가를 위한 기준이 마련된다면 지향성 퍼징 분야는 더욱 아름다운 꽃을 피워낼 것이다. + +### 본문 +지향성 퍼징은 사용자가 관심 있는 지점을 집중적으로 검사하는 프로그램 테스팅 기법이다. 따라서 그러한 프로그램 지점이 주어지는 상황에서는 프로그램 전체를 대상으로 하는 일반적인 퍼징보다 더 효과적으로 프로그램을 테스트할 수 있다. 최근, Hawkeye[1](#hawkeye), ParmeSan[2](#parmesan), BEACON[3](#beacon) 등의 다양한 도구들이 최우수 보안 학회를 통해 세상에 공개되고 있다. 이를 통해 많은 사람들이 지향성 퍼징에 관심을 가지고 연구하고 있음을 알 수 있다. + +그러나 아직 신생 연구분야인 지향성 퍼징은 이렇다 할 만한 연구의 표준이 정리되지 않은 상황이다. 지향성 퍼징의 경우 주로 특정 결함을 얼마나 빨리 재현하는지를 성능 평가의 기준으로 삼는다. 이 때, 목표 지점을 어디로 삼는지, 또는 발견한 결함을 어떻게 검사하는지에 따라 성능은 크게 달라진다. 그러나 아티팩트를 공개할 때, 이러한 정보의 공유는 거의 이루어지지 않고 있다. 또한 공통적으로 사용하는 벤치마크가 따로 없다. 그렇기에 논문마다 다른 벤치마크를 사용하기도 하며, 선택한 이유에 대해서도 별다른 설명이 주어지지 않는다. + +따라서 최소한 다음과 같은 내용을 준수하며 향후 지향성 퍼징 연구가 진행되었으면 한다. 먼저, 각 목표 결함의 구체적인 목표 지점과 검사 로직이 함께 제공되는 벤치마크를 공통적으로 사용해야 한다. 또한, 지향성 퍼징의 경우 목표 결함을 평균적으로 잘 찾아냄을 보여야 하기에 충분한 반복 횟수 (일반적으로 40회, 필요한 경우는 그 이상까지도)를 통해 성능을 증명해야 한다. 이런 공통된 기준 안에서 연구가 진행된다면, 지향성 퍼징은 더욱 투명하고 아름답게 꽃필 수 있을 것이다. + +[1] "Hawkeye: Towards a Desired Directed Grey-box Fuzzer", Chen et al., CCS 2018 \ +[2] "ParmeSan: Sanitizer-guided Greybox Fuzzing", Österlund et al., USENIX Security 2020 \ +[3] "BEACON : Directed Grey-Box Fuzzing with Provable Path Pruning", Huang et al., S&P 2022 \ No newline at end of file diff --git a/_posts/2022-08-11-heojun.md b/_posts/2022-08-11-heojun.md new file mode 100644 index 0000000000000..81c0e61f2d1c0 --- /dev/null +++ b/_posts/2022-08-11-heojun.md @@ -0,0 +1,19 @@ +--- +title: 멀리 보기, 가까이 보기, 즐기면서 하기 +date: 2022-08-11 +author: Tae Eun Kim +kor_author: 김태은 +tags: + - Writing Practice +classes: +--- + +### 요약 +지난 주, 필즈상 수상자인 허준이 교수님의 강연을 들을 기회가 있었다. 이 글에서는 그 시간을 통해 느낀 점 세 가지를 정리해보려 한다. 그것은 바로 멀리 보기, 가까이 보기, 그리고 즐기면서 하기였다. + +### 본문 +카이스트 학생으로서의 특권 중 하나는, 세계적인 학자들의 강연을 들을 기회가 많이 주어진다는 것이다. 특히 이번에는 필즈상 수상자인 허준이 교수님의 강연을 들을 수 있었다. 과연 한국이 배출한 인재인지에 대해서는 갑론을박이 있지만, 나는 훌륭한 연구자의 생각을 내 모국어로 들을 수 있다는 사실이 그저 감격스러웠다. 비록 내가 예상한 것과는 달리 강연은 아니고 토크쇼 형태의 시간이었지만, 그 시간을 통해서 허준이 교수님의 생각을 어느정도 엿볼 수 있었다. + +나는 그 생각들 중 다음과 같은 세 가지를 나의 것으로 간직하기로 했다. 먼저 멀리 보기이다. 박사 과정까지 계속하기로 결심한 이상 내 인생에서 연구는 더 이상 100미터 달리기가 아니다. 물론 있는 힘껏 뛰어야 할 때도 있을 것이다. 다만 더 이상 ``여기까지만 하면 돼!" 라는 생각은 통하지 않는다는 것이다. 따라서 나 스스로가 어떻게 연구와 공부를 오래오래 행복하게 할 수 있을지 고민해보려고 한다. 반면에 가까이 봐야 할 때도 있다. 그것은 바로 구체적인 목표를 세울때다. 너무 먼 미래를 그리고 꿈꾸기에 앞서 오늘 할 일들, 이번 한 주간 할 일들에 집중하려고 한다. 마지막으로 즐기는 것이다. 허준이 교수님을 보니 정말 수학을 좋아하고 사랑한다는 것이 느껴졌다. 나도 이미 내가 연구하는 분야에 자부심을 가지고 사랑하지만, 더 즐기고 더 사랑해보려고 한다. + +문든 최근에 내가 연구를 얼마나 즐기면서 해 왔는지 돌아보게 되었다. 이번에 준비하는 논문이 있는데, 내 걱정과 부담감을 마주하기 싫어서 그저 때가 되었으니 쓴다는 기계적인 태도로 임했던 것 같다. 하지만 나는 지난 1년간 이 연구에 정말 많은 것을 쏟아부었고, 이제는 진심으로 이 연구를 아끼게 되었다. 그렇다면 더 즐기면서 기대하는 마음으로 논문을 준비할 수 있지 않을까 생각이 들었다. 그래서 오늘부터는 좀 더 자신있게, 그리고 즐겁게 연구를 해보려 한다. \ No newline at end of file