0%
What the fuzz 간단 정리
What is Fuzzing?
- Fuzzing or fuzz testing은 프로그램 내 잠재적 취약점을 찾는데 사용되는 자동화된 SW 기술.
- Input이 있는 모든 SW는 Fuzzed 될 수 있음.
Why Fuzzing?
- Manual Testing시 tester의 역량에 따라 결과가 달라짐.
- 사람이 못하는 취약점을 찾을 수 있다.
- Application이 복잡할 수록 attack surface가 많아지지만, 사람이 테스트 하기에 어려움.
- 이미 알려진 취약점이 다시 나오지 않도록 Regression testing 하는 데 사용.
Common issues with fuzzing
- 원하는 종류의 취약점을 발견하는데 까지 시간이 오래 걸릴 수 있다.
- Smart Fuzzer(Input 구조를 알고 있는)를 사용하는데 몇 가지 작업이 좀 필요하다.
- 아무리 좋은 Fuzzer도 모든 취약점을 발견할 수 없다.
- Fuzzing 결과에 취약점이 없다 해도 그 프로그램은 100% 안전한 게 아니다.
- 발견된 취약점은 검증이 반드시 필요하다.
What in needed for fuzzing?
- Input이 있는 Fuzzing 대상
- 찾고 싶은 취약점 종류
- 사용할 Fuzzer
What types of bug can a fuzzer find?
- 이론 상 모든 종류의 취약점을 찾을 수 있음
- Logical Bug 보다 Memory Corruption 종류가 찾기 더 쉬움
Architecture of a typical fuzzer
- 전형적인 Fuzzer의 3가지 구조.
- Test Case Generator - Worker에서 사용할 input을 생성
- Logger - bug분석에 필요한 모든 것을 기록 (input, 결과)
- Worker - input을 가지고 fuzzing 실행, 버그 탐지
Reference