본문 바로가기
반응형

연구실/퍼징6

[Fuzzing] Lecture 2. Lexical Fuzzing : Mutation Analysis Mutation AnalysisCoverage 장에서 프로그램의 어느 부분이 실행되는지를 식별할 수 있는 방법을 소개했다. 이로 인해 테스트 케이스가 프로그램 구조를 얼마나 잘 커버하는지를 평가할 수 있다. 그러나 커버리지만으로는 테스트의 효과를 충분히 측정할 수 없다. 프로그램의 특정 부분을 잘 커버했더라도, 결과의 정확성을 전혀 확인하지 않는 경우도 있기 때문이다. 이번에는 test suite(여러 테스트 케이스, 테스트 묶음)의 효과를 평가하는 또 다른 방법을 소개한다. 코드에 인위적인 결함, 즉 변이를 주입한 후, 이러한 인위적 결함을 테스트 스위트가 감지할 수 있는지 확인한다. 만약 변이를 감지하지 못한다면, 실제 버그도 놓칠 가능성이 높다고 할 수 있다.  Why Structural Cover.. 2024. 8. 22.
[Fuzzing] Lecture 2. Lexical Fuzzing : Mutation-Based Fuzzing Mutation-Based Fuzzing:  대부분의 무작위로 생성된 입력은 구문적으로 잘못되어 처리 프로그램에서 빠르게 거부된다. 입력 처리 외의 기능을 테스트하려면 유효한 입력을 얻을 가능성을 높여야 한다. 이를 위해 기존 입력에 작은 변화를 주어 유효성을 유지하면서도 새로운 동작을 유도하는 변이 퍼징(mutational fuzzing)이 있다. 이번에는 변이 생성 방법과 이를 이용해 미처 test 되지 않은 code 를 탐색하는 방법을 다룬다. 이는 유명한 AFL 퍼저(AFL fuzzer)의 핵심 개념을 적용한 것이다.   MutationFuzzer class : 기존의 유효한 입력을 변이시켜 새로운 입력을 생성하는 클래스이다.def mutate(s: str) -> str: """Return .. 2024. 8. 4.
[Fuzzing] Lecture 2. Lexical Fuzzing - Code Coverage 이전 내용에서는 program을 test하기 위해 random한 input 을 generate 하는 기본 fuzzing 에 대해서 알아봤었다.  그렇다면 이러한 test 의 효과(fuzzing의 performance)를 어떻게 측정할 수 있을까? 하나의 방법은 발견된 bug 의 수와 심각도를 확인하는 것이다. 하지만, bug가 거의 없는 경우, test가 bug를 발견할 가능성을 추정할 수 있는 대리 척도가 필요하다.  Code Coverage: test 실행 중에 program의 어느 부분이 실제로 실행되었는지를 측정하는 것이다. fuzzingbook 에서 제공하는 모듈인 Coverage 클래를 통해 python program의 coverage를 측정할 수 있다.#pip install fuzzingbo.. 2024. 8. 2.
[Fuzzing] Lecture 2. Lexical Fuzzing(Breaking Things with Random Inputs) Fuzzing : Breaking Things with Random InputsFuzzing이라고 알려져 있는 random text generation의 핵심 아이디어는 Failure를 드러내기 위해 program에 random 문자열을 넣는 것이다. FuzzersFuzzer는 Fuzzers에 대한 base class이다. Fuzzer가 가지고 있는 RandomFuzzer 는 단순 인스턴스화이다.Fuzzer의 fuzz()는 생성된 input 의 문자열을 return 해주는 메소드이다.class RandomFuzzer(Fuzzer): """Produce random inputs.""" def __init__(self, min_length: int = 10, max_length: int = 100.. 2024. 7. 12.
반응형