퍼징이란 무엇입니까?

퍼징이란 무엇인가

소개: 퍼징이란 무엇입니까?

2014년 중국 해커 커뮤니티 건강 시스템에 해킹영리 목적의 미국 병원 체인인 , 4.5만 명의 환자 데이터를 훔쳤습니다. 해커들은 해킹 몇 달 전에 OpenSSL 암호화 라이브러리에서 발견된 Heartbleed라는 버그를 악용했습니다.

Heartbleed는 공격자가 예비 검사를 통과할 수 있을 만큼 유효한 잘못된 요청을 전송하여 대상에 액세스할 수 있도록 하는 공격 벡터 클래스의 예입니다. 앱의 다른 부분에서 작업하는 전문가가 보안을 유지하기 위해 최선을 다하지만 개발 중에 앱을 손상시키거나 취약하게 만들 수 있는 모든 코너 케이스를 생각하는 것은 불가능합니다.

여기서 '퍼징'이 발생합니다.

퍼징 공격이란 무엇입니까?

퍼징, 퍼즈 테스트 또는 퍼징 공격은 프로그램에 무작위, 예상치 못하거나 유효하지 않은 데이터(퍼즈라고 함)를 공급하는 데 사용되는 자동화된 소프트웨어 테스트 기술입니다. 프로그램은 버퍼 오버플로, 충돌, 메모리 누수, 스레드 중단 및 읽기/쓰기 액세스 위반과 같은 비정상적이거나 예기치 않은 동작에 대해 모니터링됩니다. 그런 다음 fuzzing 도구 또는 fuzzer를 사용하여 비정상적인 동작의 원인을 찾아냅니다.

퍼징은 모든 시스템에 버그가 발견되기를 기다리고 있으며 이를 위해 충분한 시간과 자원이 주어질 수 있다는 가정을 기반으로 합니다. 대부분의 시스템에는 매우 우수한 파서 또는 입력 유효성 검사가 있습니다. 사이버 범죄자 프로그램의 가상 버그를 악용하지 않습니다. 그러나 위에서 언급했듯이 개발 중에 모든 코너 케이스를 커버하는 것은 어렵습니다.

Fuzzer는 구조화된 입력을 받거나 일종의 신뢰 경계가 있는 프로그램에서 사용됩니다. 예를 들어, PDF 파일을 허용하는 프로그램은 파일에 .pdf 확장자가 있는지 확인하고 PDF 파일을 처리하는 파서가 있는지 확인하기 위해 일부 유효성 검사를 수행합니다.

효과적인 fuzzer는 이러한 경계를 넘어설 수 있을 만큼 유효하지만 프로그램 아래에서 예기치 않은 동작을 유발할 수 있을 만큼 유효하지 않은 입력을 생성할 수 있습니다. 유효성 검사를 통과할 수 있다고 해서 더 이상의 피해가 발생하지 않는다면 큰 의미가 없기 때문에 이는 중요합니다.

Fuzzer는 SQL 인젝션, 교차 사이트 스크립팅, 버퍼 오버플로 및 서비스 거부 공격과 매우 유사한 공격 벡터를 발견합니다. 이러한 모든 공격은 예상치 못한 잘못된 데이터 또는 무작위 데이터를 시스템에 공급한 결과입니다. 

 

Fuzzer의 종류

Fuzzer는 몇 가지 특성에 따라 분류할 수 있습니다.

  1. 공격 대상
  2. 퍼즈 생성 방법
  3. 입력 구조 인식
  4. 프로그램 구조에 대한 인식

1. 공격 대상

이 분류는 fuzzer가 테스트에 사용되는 플랫폼의 종류를 기반으로 합니다. Fuzzer는 일반적으로 네트워크 프로토콜 및 소프트웨어 애플리케이션과 함께 사용됩니다. 각 플랫폼에는 수신하는 특정 유형의 입력이 있으므로 서로 다른 유형의 fuzzer가 필요합니다.

예를 들어 애플리케이션을 다룰 때 모든 퍼징 시도는 사용자 인터페이스, 명령줄 터미널, 양식/텍스트 입력 및 파일 업로드와 같은 애플리케이션의 다양한 입력 채널에서 발생합니다. 따라서 fuzzer에서 생성된 모든 입력은 이 채널과 일치해야 합니다.

통신 프로토콜을 다루는 Fuzzer는 패킷을 처리해야 합니다. 이 플랫폼을 대상으로 하는 Fuzzer는 위조된 패킷을 생성하거나 가로챈 패킷을 수정하고 재생하는 프록시 역할을 할 수도 있습니다.

2. 퍼즈 생성 방법

Fuzzer는 퍼징할 데이터를 생성하는 방법에 따라 분류할 수도 있습니다. 역사적으로 fuzzer는 무작위 데이터를 처음부터 생성하여 fuzz를 생성했습니다. 이것이 이 기술의 창시자인 Barton Miller 교수가 처음에 한 방법입니다. 이러한 유형의 fuzzer를 세대 기반 fuzzer.

그러나 이론적으로는 신뢰 경계를 우회하는 데이터를 생성할 수 있지만 그렇게 하려면 상당한 시간과 리소스가 필요합니다. 따라서 이 방법은 일반적으로 간단한 입력 구조를 가진 시스템에 사용됩니다.

이 문제에 대한 해결책은 신뢰할 수 있는 경계를 통과할 만큼 유효하지만 문제를 일으킬 만큼 유효하지 않은 데이터를 생성하기 위해 유효한 것으로 알려진 데이터를 변경하는 것입니다. 이것의 좋은 예는 DNS 퍼저 도메인 이름을 가져온 다음 지정된 도메인의 소유자를 대상으로 하는 잠재적인 악성 도메인을 탐지하기 위해 많은 도메인 이름 목록을 생성합니다.

이 접근 방식은 이전 접근 방식보다 더 똑똑하고 가능한 순열을 상당히 좁힙니다. 이 방법을 사용하는 Fuzzer를 호출합니다. 돌연변이 기반 퍼저

취약성을 근절하는 데 필요한 최적의 퍼즈 데이터에 수렴하기 위해 유전자 알고리즘을 사용하는 세 번째 최신 방법이 있습니다. 프로그램에 입력될 때 각 테스트 데이터의 성능을 고려하여 퍼즈 데이터를 지속적으로 정제하여 작동합니다. 

성능이 가장 낮은 데이터 세트는 데이터 풀에서 제거되고 최고 성능은 변경 및/또는 결합됩니다. 그런 다음 새로운 세대의 데이터를 사용하여 다시 퍼즈 테스트를 수행합니다. 이러한 fuzzer를 진화적 돌연변이 기반 퍼저.

3. 입력 구조에 대한 인식

이 분류는 fuzzer가 fuzz 데이터를 생성할 때 프로그램의 입력 구조를 인식하고 적극적으로 사용하는지 여부를 기반으로 합니다. ㅏ 멍청한 퍼저 (프로그램의 입력 구조를 인식하지 못하는 fuzzer)는 대부분 무작위 방식으로 fuzz를 생성합니다. 여기에는 생성 및 돌연변이 기반 fuzzer가 모두 포함될 수 있습니다. 


fuzzer가 프로그램의 입력 모델과 함께 제공되는 경우 fuzzer는 제공된 입력 모델과 일치하도록 데이터를 생성하거나 변경하려고 시도할 수 있습니다. 이 접근 방식은 유효하지 않은 데이터를 생성하는 데 소요되는 리소스의 양을 더욱 줄입니다. 이러한 fuzzer를 스마트 퍼저.

4. 프로그램 구조에 대한 인식

또한 Fuzzer는 자신이 퍼징하는 프로그램의 내부 작업을 알고 있는지 여부에 따라 분류할 수 있으며 이러한 인식을 사용하여 퍼즈 데이터 생성을 돕습니다. fuzzer가 내부 구조를 이해하지 않고 프로그램을 테스트하는 데 사용되는 경우를 블랙박스 테스트라고 합니다. 

블랙박스 테스트 중에 생성된 퍼즈 데이터는 일반적으로 fuzzer가 퍼징의 효과를 모니터링하고 이를 사용하여 '학습'하는 진화적 돌연변이 기반 fuzzer가 아닌 한 임의적입니다. 정보 fuzz 데이터 세트를 개선합니다.

반면에 화이트박스 테스트는 프로그램의 내부 구조 모델을 사용하여 퍼즈 데이터를 생성합니다. 이 방법을 사용하면 fuzzer가 프로그램의 중요한 위치에 도달하여 테스트할 수 있습니다. 

인기 있는 퍼징 도구

퍼징이 많다 검색을 펜 테스터가 사용합니다. 가장 인기있는 것 중 일부는 다음과 같습니다.

퍼징의 한계

Fuzzing은 정말 유용한 침투 테스트 기술이지만 결함이 없는 것은 아닙니다. 이들 중 일부는 다음과 같습니다.

  • 실행하는 데 꽤 오랜 시간이 걸립니다.
  • 프로그램의 블랙박스 테스트 중에 발견된 충돌 및 기타 예기치 않은 동작은 분석 또는 디버깅이 불가능하지는 않더라도 어려울 수 있습니다.
  • 스마트 변이 기반 fuzzer용 변이 템플릿을 만드는 데는 시간이 많이 걸릴 수 있습니다. 때로는 입력 모델이 독점적이거나 알려지지 않았기 때문에 가능하지 않을 수도 있습니다.

 

그럼에도 불구하고 악당보다 먼저 버그를 발견하려는 사람에게는 매우 유용하고 필요한 도구입니다.

결론

퍼징은 소프트웨어의 취약점을 발견하는 데 사용할 수 있는 강력한 침투 테스트 기술입니다. 다양한 유형의 fuzzer가 있으며 새로운 fuzzer가 항상 개발되고 있습니다. 퍼징은 매우 유용한 도구이지만 한계가 있습니다. 예를 들어 fuzzer는 너무 많은 취약점만 찾을 수 있으며 리소스를 많이 사용할 수 있습니다. 그러나이 놀라운 기술을 직접 시도하고 싶다면 당사 플랫폼에서 사용할 수 있는 무료 DNS Fuzzer API입니다. 

그래서 뭘 기다리고 있니? 

오늘 퍼징을 시작하세요!