주요 내용으로 건너뛰기

[논문리뷰] Fuzzing: Art, Science, and Engineering - Part 2

앞의 포스팅 : [논문리뷰] Fuzzing: Art, Science, and Engineering - Part 1 

2. 체계화, 분류, 테스트 프로그램 선정

4) 퍼저의 분류

본 연구진은 각각의 fuzz run 단계에서 관찰되는 의미론적인 세분성을 기반으로 하여, Fuzzer를 3가지 종류로 구분 지었다. 통상적인 소프트웨어 테스팅 분야에서는 크게 두 가지(블랙박스, 화이트박스) 테스로만 분류되는 것과 다르게, 퍼저는 back-, grey, 그리고 white- box로 구분할 수 있다. 사실 엄밀히 따지면, grey-box fuzzing 도 각 fuzz run에서 제한적일지라도 어쨌든 약간의 정보가 주어지는 상태에서 수행하는 것이므로 결국 white-box 퍼징의 한 가지 종류에 속한다고 볼 수도 있다. 

그림 1은 현존하는 Fuzzer들을 연대기적인 순서에 따라 구분하여 규범화시킨 것이다. 최초로는 1990년 이루어진 Miller의 연구를 시작으로, 주요 학술대회에서 발표되었거나, Github에서 100회 이상의 추천(Star)을 획득한 것들을 일일이 수집하였으며, 각각의 관계를 분석하여 그래프 형태로 표현하였다. 그림의 좌측 절반은 블랙박스 퍼저를 표현하였고, 우측에는 그레이 박스와 화이트 박스 퍼저를 나열하였다.

표 1은 각각의 퍼저들을 크게 5가지의 function(Preprocess, Schedule, InputGen, InputEval, ConfUpdate)과, 그 밖의 기타 항목(miscellaneous)을 기준으로 나뉘어 있다.

Black-box Fuzzer

블랙박스라는 용어는 보통 소프트웨어 테스팅 분야에서 주로 사용되어 왔다. 이는 PUT의 내부를 들여다보지 않는 것이다. 오직 PUT의 input과 output만을 관찰함으로써 진행을 하는 것이 마치 검은 상자와 같다고 하여 블랙박스라는 이름이 붙여졌다. Software Testing에서는 이를 IO-driven 또는 data-driven testing이라고 부르기도 한다. SPIKE, BFF, FOE, zzuf 등의 퍼 저가 바로 이러한 방식을 채택하고 있다. 비교적 현대의 funfuzz, Peach와 같은 퍼저들도 이러한 방식에서 영감을 얻었다. 

White-box Fuzzer

화이트 박스 퍼징은 PUT의 내부구조와 실행 중에 발생하는 정보들을 기반으로 하여 테스트 케이스를 생성하는 기법이다. 그러므로 화이트 박스 퍼징은 PUT의 상태에 보다 체계적으로 접근하기에 용이하다. 처음 이 방법을 제안된 것은 Godefroid의 Random Testing for Security: Blackbox vs. Whitebox Fuzzing이라는 논문인데, 여기에서는 기호 실행 기법 중 하나인 DSE(Dynamic symbolic execution)를 중점적으로 다루었다. (이와 관련해서는 concolic testing과 taint analysis라는 개념도 참고적으로 알아두면 좋다.) 한편 화이트 박스 기법은 블랙박스에 비해 오버헤드가 굉장히 큰데 그 이유는 DSE의 구현에서 dynamic instrumentation과 SMT solving을 사용하는 것 때문일 수 있다. DSE 가 폭넓게 연구되고 있음에도 불구하고, 모든 DSE가 Security Bug를 찾기 위한 목적인 것은 아니므로 이를 모두 white-box fuzzer라고 볼 수는 없다. 따라서 본 논문의 범위를 벗어나는 부분은 생략하도록 하되 필요한 경우 아래 논문을 참고하라. 

  • An Orchestrated Survey of Methodologies for Automated Software Test Case Generation
  • All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution (but Might Have Been Afraid to Ask)
Grey-box Fuzzer

일부 보안 전문가들은 화이트와 블랙 방식의 중간지점인 회색지대를 규정하며 그레이 박스 퍼징이라는 용어를 사용한다. 일반적으로 grey box fuzzer는 PUT의 내부구조와 실행되는 동안의 정보를 획득할 수 있다. 다만 화이트 박스 방식과 비교하면 PUT의 전체적인 범위를 알 수는 없는 상황이다. PUT에 대한 약간의 정적 분석 정보라던지 Code Coverage 등의 일부 실행 관련 정보만을 얻는 경우이다. 이밖에도 참고할 수 있는 정보는 다양한데, 이때 보안 전문가 간에 암묵적 합의 의해 적당한 경계선이 구분되기는 해도 사실상 black에 가까운지 white에 더 가까운지에 대한 판정 기준은 모호할 때가 많다. 블랙박스 퍼 저이지만 서도 일부 정보를 활용하게 될 때가 있고, 화이트박스이지만 약간의 추정을 사용하게 될 때가 있기 때문이다. 때문에 본 논문의 표 1에서 화이트, 블랙, 그레이를 나눈 기준에 대해서는 약간의 논쟁점이 있을 수는 있지만 최선의 방법으로 각각을 분류하였음을 밝힌다.  Grey-box fuzzer의 가장 선구적인 예제는 EFS이다. 이는 각 fuzz run에서 수집된 code coverage 정보를 활용하여 테스트 케이스를 만드는데 이때 유전 알고리즘을 사용한다. Randoop은 유사한 접근법을 사용하였지만 보안 취약점을 찾는 것을 목표로 하지는 않았다. 현대에 가장 많이 사용되는 퍼저 중 Grey box로 구분될 만한 것은 AFL과 VUzzer 등이 있다.  



To be continued .. 

[논문리뷰] Fuzzing: Art, Science, and Engineering - Part 1

[논문리뷰] Fuzzing: Art, Science, and Engineering - Part 2

[논문리뷰] Fuzzing: Art, Science, and Engineering - Part 3

.

.

Software Security Engineer

CPUU 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.