퍼징 (Fuzzing)
쉽게 풀면
퍼징은 자물쇠에 온갖 종류의 열쇠를 무작위로 계속 넣어보며 어떤 열쇠에 자물쇠가 이상 반응을 보이는지 확인하는 것과 비슷합니다. 사람이 하나하나 예상 시나리오를 짜서 테스트하는 대신, 프로그램이 스스로 수많은 입력값을 만들어 반복적으로 대상 프로그램에 넣어봅니다. 이 과정에서 프로그램이 멈추거나 이상하게 동작하면, 그 지점이 취약점일 가능성이 있는 것으로 표시됩니다.
왜 중요한가
사람이 모든 입력 조합을 직접 테스트하는 것은 현실적으로 불가능하기 때문에, 퍼징은 자동화를 통해 방대한 테스트 범위를 짧은 시간에 커버할 수 있게 해줍니다. 소프트웨어의 숨겨진 결함과 보안 취약점을 사전에 발견하는 데 효과적이어서, 취약점 분석 연구와 실제 소프트웨어 품질 보증 과정에서 널리 활용됩니다.
논문에서는 이렇게 쓰입니다
실행 경로 커버리지를 활용한 퍼징으로 실제 취약점을 찾아낸 연구 사례입니다.
인공지능 기법을 접목해 퍼징의 효율을 높인 연구 예문입니다.
조금 더 깊게 보면
퍼징은 입력값을 생성하는 방식에 따라 무작위 생성, 규칙 기반 변형, 실행 경로 정보를 활용하는 커버리지 기반 방식 등으로 구분됩니다. 최근에는 프로그램의 실행 흐름을 관찰해 새로운 경로를 더 잘 탐색하도록 입력을 진화시키는 기법이 널리 연구되고 있습니다. 발견된 오류가 실제 취약점인지 확인하는 후속 분석도 함께 이루어집니다.
주의할 점
퍼징이 특정 시간 동안 결함을 발견하지 못했다고 해서 프로그램에 취약점이 없다는 것을 보장하지는 않습니다. 또한 대상 프로그램의 복잡도가 높을수록 의미 있는 입력에 도달하기까지 많은 실행 자원이 필요할 수 있습니다.