본문 바로가기
논문리딩/fuzzing

NSFuzz : Towards Efficient and State-Aware Network Service Fuzzing

by sonysame 2024. 3. 27.
Qin, Shisong, et al. "Nsfuzz: Towards efficient and state-aware network service fuzzing." 
ACM Transactions on Software Engineering and Methodology
 32.6 (2023): 1-26.

 

  • 기존 네트워크 서비스 퍼징의 문제점

    1. state representation

    기존 퍼저: AFLNET -> STATEAFL -> SGFuzz(Usenix 22)
    : AFLNET에서는 response code를 이용해서 state representation을 했다면, STATEAFL의 경우에는 in-memory state를 사용한다. 하지만 오버헤드의 문제점이 있다. SGFuzz의 경우 state variables을 사용하여 state transition tree(STT)를 그림

    2. testing efficiency

    NSFuzz의 경우 static analysis와 compile-time instrumentation을 사용해서 타겟 서버가 퍼저에게 synchronization signal을 전송하게 함! 이때 network event loop을 indicator로 사용함. 
  • Insight
    line 5~8: network event loop
    response code로 state representation을 하면 모두 503으로 동일 하지만, state라는 specific variable을 사용해서 service state를 represent함. 

 

 

  • Overview


1. Static Analysis
입력으로 네트워크 서비스 소스코드를 받아 static analysis를 통해 potential network event loop와 state variables를 식별
*STATEAFL의 경우 post-execution online analyssis를 통해 state variables 식별, 반면 NSFuzz는 pre-execution offline analysis 수행

- Loop Structure Identification
1) read, recv, recvmsg와 같은 input-related 시스템 콜에 breakpoint를 설정
2) 퍼저는 SUT와 소켓 통신을 하고 probe message를 전송한다.
3) SUT는 breakpoint가 hit됐을 때의 function call stack의 backtrace를 저장한다.

4) 이를 통해 target loop structure를 식별
static analyzer가 I/O operation을 갖고 있는 loop를 모두 후보자로 보고, backtrace call stack를 스캔해서 bottom서부터 보고 first function이 I/O loop를 포함하고 있으면 target loop로 식별

- State Variable Extraction
휴리스틱 rule에 기반하여 식별
1) state variables are always executed in the network event loop
2) are always read or written in the loop or message handlers(loaded&stored)
3) global integer variables or user-defined structure members assigned constatnt values 


2. Annotation API

directly annotate the I/O synchronization points of the SUT

the synchronization signal feedback could always be sent after each request message is processed

_NSFUZZ_SYNC & _NSFUZZ_STATE


3. Compile-Time Instrumentation
intrument 타겟 네트워크 서비스 to enable signal feedback & state tracing
1) raise(SIGSTOP) statement at I/O synchronization points 
->SUT could raise signal feedback to the fuzzer after each reqeust message has been processed to indicate that it is ready for receiving the following request message
2) STORE operation of each state variable
state variable이 written  될 때 -> shared memory(shared_state): state-related memory 업데이트

4. Fuzzing Loop
infers the variable-based service state model
state-aware fuzzing loop

  • Evaluation
    - ProFuzzBench사용(13 network services)
    - AFLNET, STATEAFL, AFLNWE와 비교, NSFuzz-V를 만들어 ablation test도 진행
    - Fuzzing Throughput(the number of test cases exexuted per second)
    - code coverage
    - crash
    - state space coverage
    - real-world bug finding (8 zero-day vulns)