* Fuzzing과 AI에 대한 동향 조사를 수행한 발표자료를 게재함.
본 게시글은 Fuzzing : A Survey for Roadmap 을 토대로 재구성하였음
필자 또한 배우고 있는 입장에서 이해한 바를 작성하였기 때문에 자료를 100% 믿지는 말 것.
신경망 알고리즘이 코드 알고리즘을 대체하는데 폭발적으로 효과적임을 보여주고 있는 가운데, 보안에서도 기존의 소프트웨어 테스팅에 딥러닝, (심층)강화학습과 같은 머신러닝 알고리즘을 적용하고자 하는 시도가 이어지고 있다.
필자는 그중에서도 Fuzz Testing에는 대체 어떠한 시도들이 행해지고 있는지, 연도별, 기법별로 분류하여 살펴보고자 한다.
본 게시글은 Fuzzing: A Survey for Roadmap Survey 논문을 토대로 동향을 분류, 재구성, 보충하였으니 자세한 내용이 궁금하다면 해당 논문을 살펴보길 바란다.
Q1. 왜 Fuzzing에 AI 알고리즘을 접목하고자 할까?
지금의 Fuzzer는 mutation based fuzzing이든 generation based fuzzing이든 grammar based fuzzing이든, Coverage guided Fuzzing이든 듣기에 어렵고 복잡해보인다. 거기에 AI 알고리즘까지 접하겠다니.. 처음 접해본 이들은 더욱 그게 뭔소리야? 하고 되물음 당하기 십상이다.
하지만 Fuzz Testing의 아무리 다양하더라도 결국 하고자하는 것은 동일하다.
컴퓨터가 사람이 직접 입력하지 않고 입력값을 알아서 자동으로 만들어 소프트웨어의 취약한 영역을 찾아내겠다는 것.
즉, 퍼징의 근본적인 목표는 임의로 입력값을 생성하여 소프트웨어의 취약점을 트리거할 수 잇는 test case를 찾아내는 것이다.
그렇다면 왜 AI 알고리즘을 접목하고자 하는걸까? 이는 대상이 되는 프로그램 PUT의 복잡성에 크게 근거하고 있다.
Fuzz Testing은 프로그램의 취약한 영역을 트리거하기 위해서 프로그램의 PUT에 생성한 입력값을 넣는다. 하지만 복잡한 프로그램일수록 PUT는 복잡해지며 가장 간단한 Fuzzer이 생성하는 무작위 입력값만으로는 깊은 분기점 아래 있는(deepCode) 취약점을 파악할 수가 없다.
이러한 문제점을 해결하기 위해서 Fuzzer가 실행 상태나 결과를 토대로 피드백을 받아서 취약점을 탐색하도록 하는 coverage guided fuzzing 등의 연구가 진행되었으나 이 또한 여전히 한계가 존재한다.
결국 Fuzzer가 보다 더 깊은 조건 아래 숨겨져있는 취약점까지 탐색하기 위해서는 퍼징 프로세스를 최적화하거나 입력공간(input space)의 크기를 감소하는 기법이 필요하다.
다음 장에서 퍼징 프로세스 최적화 기법과 입력공간의 크기를 감소하는 기법에 대해서 각각 알아보도록 하자.
'동향 및 조사' 카테고리의 다른 글
Fuzzing + AI 동향 조사 (3) Input space 탐색 기법 (0) | 2022.03.28 |
---|---|
Fuzzing + AI 동향 조사 (2) 퍼징 프로세스 최적화 기법 (0) | 2022.02.17 |