Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

네트워크 보안에서 퍼징(Fuzzing)이란? 개념부터 6단계 실전 절차까지

퍼징(Fuzzing)이란 무엇인가?

퍼징은 소프트웨어, 운영체제, 네트워크 등 대상 시스템에 비정상적이거나 예측하기 어려운 데이터를 대량으로 자동 입력하여, 프로그램이 크래시(crash)하거나 예기치 않게 동작하는 지점을 찾아내는 테스트 기법입니다. 'fuzz'라는 단어는 원래 잔털이나 보풀처럼 미세하고 가벼운 섬유·입자를 뜻하며, 동사로는 '흐릿하게 만들다', '모호하게 하다'라는 의미를 가집니다. 이러한 어원처럼 퍼징 테스트는 프로그램의 처리 경계를 흐트러뜨리는 무작위 입력을 통해 숨겨진 결함을 드러냅니다.

보안 분야에서의 퍼징

사이버 보안 세계에서 퍼징(퍼즈 테스팅, Fuzz Testing)은 1990년대 중반부터 사용되어 온 검증된 소프트웨어 테스트 방법론입니다. 컴퓨터 프로그램에 비표준적이고 예상치 못한 입력과 데이터를 주입하여 코딩 오류나 보안 취약점을 탐지하고, 해당 프로그램이 해킹에 취약한지 판단합니다.

보안 관점에서 퍼징은 블랙박스(black box) 소프트웨어 테스트 기법으로 분류됩니다. 소스 코드에 대한 사전 지식 없이도, 변형되었거나 반쯤 변형된(malformed/semi-malformed) 데이터를 자동으로 삽입하여 구현상의 버그를 발견할 수 있다는 것이 특징입니다.

와이파이 퍼징(WiFi Fuzzing)

와이파이 퍼징은 IEEE 802.11 표준 프로토콜 구현에 초점을 맞춘 퍼징 기술입니다. 대표적인 도구인 WiFuzzit은 모델 기반(model-based) 퍼저로, 잘 알려진 Sulley 퍼징 프레임워크를 기반으로 만들어졌습니다. 이 도구의 목표는 액세스 포인트(AP)와 스테이션(station) 양쪽에 존재하는 802.11 프로토콜 구현 버그를 찾아내는 것입니다.

커버리지 기반 퍼징(Coverage-based Fuzzing)

실행 코드에 대한 퍼징은 메인 루프를 반복 실행하며 대상 프로그램을 테스트하는 방식으로 진행됩니다. 퍼징 과정이 논리적인 경로를 따라가면 버그를 더 빠르게 발견하고 더 많은 코드를 커버할 수 있으며, 이를 위해서는 버그가 발생한 실행 경로에 대한 정보가 필요합니다.

커버리지 기반 퍼징에서는 인스트루멘테이션(instrumentation) 기법을 활용해 각 경로의 실행 여부를 감지하고, 모든 경로를 탐색할 확률을 계산합니다.

퍼징은 유용한가?

소프트웨어에 퍼징을 적용하면 무작위 입력을 통해 프로그램을 크래시시키는 테스트 시나리오를 발견할 수 있습니다. 이를 통해 프로그램의 견고성(robustness)을 객관적으로 평가하고, 치명적인 문제를 신속하게 파악할 수 있습니다.

퍼징 공격과 제로데이 익스플로잇

퍼징은 방어 목적뿐 아니라 공격에도 활용될 수 있습니다. 공격자는 애플리케이션에 스트레스를 가해 예기치 않은 동작, 리소스 누수, 크래시를 유발하려 시도하며, 이 과정에서 유효하지 않거나 예상 밖의 무작위 입력을 시스템에 전달합니다. 실제로 공격자들은 퍼징 개념을 이용해 아직 패치되지 않은 제로데이(zero-day) 익스플로잇을 발견하기도 합니다.

퍼징 기법의 장점

  • 프로그램의 전반적인 신뢰성과 안정성을 측정할 수 있습니다.
  • 치명적인 버그를 조기에 식별하고 수정할 수 있습니다.
  • 소스 코드에 대한 지식을 전제로 하지 않으므로, 소스 코드가 없는 소프트웨어에도 적용할 수 있습니다.
  • 물론 소스 코드가 공개된 소프트웨어에도 동일하게 활용할 수 있습니다.

프로그램 퍼징 수행 절차: 6단계

  1. 대상 시스템 식별: 퍼징을 적용할 대상 시스템이나 프로그램을 정의합니다.
  2. 입력 식별: 대상이 처리하는 입력 벡터(파일, 네트워크 패킷, API 호출 등)를 파악합니다.
  3. 퍼즈 데이터 생성: 비정상적이거나 변형된 테스트 데이터를 생성합니다.
  4. 테스트 실행: 생성한 퍼즈 데이터를 대상 프로그램에 입력하여 실행합니다.
  5. 시스템 동작 모니터링: 크래시, 예외, 리소스 누수 등 비정상 동작을 관찰합니다.
  6. 결함 기록: 발견된 결함을 로그로 남기고 재현 및 분석을 진행합니다.

마무리

퍼징은 웹사이트, 데스크톱 애플리케이션, 네트워크 장비까지 폭넓게 적용할 수 있는 강력한 품질·보안 테스트 기법입니다. 무작위 입력이라는 단순한 원리만으로도 복잡한 시스템의 숨겨진 취약점을 효과적으로 드러낼 수 있기 때문에, 현대 소프트웨어 개발과 보안 진단에서 필수적인 도구로 자리 잡았습니다.