소프트웨어에 무작위, 유효하지 않은, 또는 예기치 않은 입력 데이터를 지속적으로 주입하여 시스템의 버그, 충돌, 또는 보안 취약점을 자동화된 방식으로 찾아내는 화이트박스/블랙박스 테스팅 기술 [관련 자료1](https://dhkstn.tistory.com/entry/Fuzzing-Study) - 코드 커버리지가 뭔지도 다루니 과제할 때 참고할 것... **입력 생성 방식 기준 분류** - Mutation Based Fuzzing(Dumb Fuzzing) - 입력 데이터를 특정하여, 그 입력 데이터에 대해 조금씩 변이(Mutation)를 주어 새로운 입력 데이터를 생성 - 특정한 입력 데이터를 "시드(seed)"라고 부르며, 여기서 변이를 준 데이터를 "test data"라고 함. - Generation Based Fuzzing(Smart Fuzzing) - 데이터의 구조 및 프로토콜을 이해하여 프로그램에 적합한 입력 데이터를 생성하는 기법 **피드백 활용 방식 분류** - Guided fuzzing - 실행 결과 보고 다음 입력 개선 - Unguided fuzzing **질문드릴 내용** 1. Grammar-Based랑은 뭐가 다르지? 어떤 분류에 포함되지? → Generation-Based? 1. Grammar-based는 mutation/generation 둘 다 포함 가능 1. mutation: 입력을 grammar를 이용하여 AST 등의 형태로 변환, 입력의 일부를 문법에 맞게 변환 2. generation: 입력을 grammar로부터 생성하게 됨. 2. 추가 질문: generation의 경우 이미 나와 있는 어떤 grammar specification 을 기반으로 입력을 만들어내면 generation-based인 건지? -> specification이 있을 필요는 없는듯? 3. mutation은 '입력 데이터를 특정하고, 이후 변이를 주는 것'이라고 이해했는데, grammar + mutation이라고 하면 여기서 처음 특정하는 데이터는 무엇인지? 애초에 mutation 이해가 잘 안 된 듯함... 1. html fuzzer 예시 (grammar-based mutational fuzzer) 1. seed를 문법 기반으로 변경 - title 태그를 thead 태그로 교체 - 할 경우 test case가 됨. 이건 형태적으로는(syntatic) 옳은 구조지만, 의미적으로는 옳지 않으므로 브라우저가 다른 동작을 하게 됨. 2. AsFuzzer은 Grammer-Based + Guided? 1. grammar-based + generation-based + unguided 1. grammar 추론 (w. error-message *guided*) 1. 일반적으로는 grammar specification이 주어진 경우에서 하지만, 이런 식으로 접근이 불가능한 경우 grammar inference를 통해 grammar specification을 생성 - **합성(synthesis)** - 하여 진행. 여전히 grammar-based라고 칭하기는 함. 2. 추론된 Grammar를 사용해 fuzzing 진행 1. 이때는 unguided