안경잡이개발자

728x90
반응형

  하나의 프로그램의 취약점을 찾는 방법에는 다양한 기법이 있다. 기본적으로 프로그램은 입력(input)을 받아서 출력(output)을 내보내는 방식으로 동직하는데, 퍼징(fuzzing)이란 자동적으로 입력을 생성하여 반복적으로 프로그램에 넣어보는 것이다. 기본적으로 퍼저(fuzzer)는 입력을 만들어 내는데, 입력을 반복적으로 변형(mutating)하며 프로그램에 넣어보는 소프트웨어를 의미한다. 실질적인 측면에서 퍼징은 크래시(crash)를 만들기 위한 도구로 쓰이는 경우가 많다.

 

  퍼징을 더욱 더 엄밀하게 정의하면 다음과 같다.

 

  "Fuzzing refers to a process of repeatedly running a program with generated inputs to test if a program violates a correctness policy."

 

  카이스트(KAIST) 차상길 교수님의 자료에서는 다음과 같은 그림이 있다.

 

 

  퍼저의 종류는 크게 세 가지로 구분할 수 있다.

 

1. Black-box Fuzzing: 프로그램의 내부적를 알지 못하고, 입력에 따른 출력만 확인이 가능한 상태에서 퍼징을 하는 것이다.

 

2. White-box Fuzzing: 프로그램의 내부를 알기 때문에, 프로그램 내부의 모든 possible path를 검사할 수 있도록 조건에 맞는 입력을 넣는 방식으로 퍼징을 하는 것이다. 그래서 symbolic execution을 같이 하면서 입력값을 mutating하여 퍼징을 진행할 수 있다.

 

3. Grey-box Fuzzing: 프로그램 내부의 일부(some information)를 아는 상황에서 퍼징을 하는 것을 의미한다.

 

  굉장히 유명한 퍼저(fuzzer)로는 AFL이 있다. AFL은 가장 대표적인 Grey-box 방식의 fuzzer으로, 아직까지도 state-of-the-art인 baseline으로 제안되고 있다. 이러한 AFL로부터 매우 많은 fuzzer들이 영향을 받아 제안되었다.

728x90
반응형