퍼징 (Fuzzing)

정보보안학
한 줄 정의: 퍼징은 프로그램에 무작위이거나 비정상적인 입력값을 대량으로 주입하여 오류나 취약점을 자동으로 찾아내는 테스트 기법입니다.

쉽게 풀면

퍼징은 자물쇠에 온갖 종류의 열쇠를 무작위로 계속 넣어보며 어떤 열쇠에 자물쇠가 이상 반응을 보이는지 확인하는 것과 비슷합니다. 사람이 하나하나 예상 시나리오를 짜서 테스트하는 대신, 프로그램이 스스로 수많은 입력값을 만들어 반복적으로 대상 프로그램에 넣어봅니다. 이 과정에서 프로그램이 멈추거나 이상하게 동작하면, 그 지점이 취약점일 가능성이 있는 것으로 표시됩니다.

왜 중요한가

사람이 모든 입력 조합을 직접 테스트하는 것은 현실적으로 불가능하기 때문에, 퍼징은 자동화를 통해 방대한 테스트 범위를 짧은 시간에 커버할 수 있게 해줍니다. 소프트웨어의 숨겨진 결함과 보안 취약점을 사전에 발견하는 데 효과적이어서, 취약점 분석 연구와 실제 소프트웨어 품질 보증 과정에서 널리 활용됩니다.

논문에서는 이렇게 쓰입니다

"본 연구는 커버리지 기반 퍼징 기법을 활용하여 오픈소스 라이브러리에서 다수의 메모리 손상 취약점을 발견하였다."

실행 경로 커버리지를 활용한 퍼징으로 실제 취약점을 찾아낸 연구 사례입니다.

"딥러닝 기반 입력 생성 모델을 퍼징 엔진에 결합하여 테스트 효율을 향상시키는 방법을 제안한다."

인공지능 기법을 접목해 퍼징의 효율을 높인 연구 예문입니다.

조금 더 깊게 보면

퍼징은 입력값을 생성하는 방식에 따라 무작위 생성, 규칙 기반 변형, 실행 경로 정보를 활용하는 커버리지 기반 방식 등으로 구분됩니다. 최근에는 프로그램의 실행 흐름을 관찰해 새로운 경로를 더 잘 탐색하도록 입력을 진화시키는 기법이 널리 연구되고 있습니다. 발견된 오류가 실제 취약점인지 확인하는 후속 분석도 함께 이루어집니다.

주의할 점

퍼징이 특정 시간 동안 결함을 발견하지 못했다고 해서 프로그램에 취약점이 없다는 것을 보장하지는 않습니다. 또한 대상 프로그램의 복잡도가 높을수록 의미 있는 입력에 도달하기까지 많은 실행 자원이 필요할 수 있습니다.

관련 용어