Park, Geon (re-st)

(다중 지향성 퍼징) AFLRun

[research] 4 min read

핵심

  • 핵심낱말: 다중 지향성 퍼징, 경로 다양성, 공평 에너지, 클러스터링
  • 클러스터링은 오버헤드 제거 용으로 취급
  • 기존 문제
    • 경로 다양성 부족
      • 현재 퍼징 기법은 목표 지점에 도달하는 것을 중점으로 함
      • 따라서 다양한 경로를 충분히 확보하지 못하기 때문에 특정 경로를 발견하지 못할 가능성 높음
    • 에너지 할당 편향
      • 기존의 거리 기반 에너지 할당은 특정 목표에 편향되어 다양한 목표에 에너지를 충분히 할당 못함
  • 제안
    • 경로 다양성 메트릭 도입
      • 목표 지점 별 virgin map을 유지/관리
      • 시드 실행 시, 여러 virgin map을 비교하여 각 virgin map 별로 새로운 커버리지 유무 확인
      • 단, 목표 별 virgin map은 오버헤드가 너무 커서, 유사한 목표 지점은 클러스터링 (A 목표 virgin map이 업데이트될 때, B 목표 virgin map이 업데이트 되면 이 둘은 하나로 묶기) ㅅㅇ. 묶는다는 게 정확히 뭔가? virgin map update는 수시로 이뤄지는데 그러면 그룹도 수시로 풀렸다 묶였다 변하나?
    • Critical blocks
      • 가장 가까이 다가간 블록들을 명시, 지나는 시드에 에너지
  • AFLRun
    • 경로 다양성
    • 공평 에너지 할당
  • AFLRun-
    • 공평 에너지 할당
  • AFLRun–
    • 공평 에너지 할당 (중요 블록 X)

Note

favored를 사용. favored일 시 에너지 score대로, 아닐 시 1/20을 곱함. Besides a target virgin map for each cluster introduced in §5.2, AFLRUN also maintains a top-rated array for each cluster, similar to the original top-rated array discussed in §2.1.

When a new seed is added to the corpus, a set of top-rated arrays are selected using Algorithm 5, and we update these top-rated arrays using the same method as AFL++.

Using these top-rated arrays, we can select a set of favored seeds. We can apply the queue culling algorithm, similar to AFL++, on top-rated arrays of all clusters to select the favored seeds.

For each top-rated array, we use the queue culling algorithm from AFL++ to select a set of favored seeds, and we then take the union of each set of favored seeds from each top-rated array to obtain the total set of favored seeds.

논문 정리

Abstract

AFLRUN이라는 새로운 퍼징 솔루션을 제안한다. 이는

  • target path-diversity metric
  • and unbiased energy assignment 즉 목표 경로 다양성(metric)과 공정한 에너지 할당을 특징으로 한다.

각 목표에 대해 추가 virgin map을 유지하여 경로 다양성을 높이고, 공정한 에너지 할당 전략을 통해 각 목표에 대한 공평성을 보장한다. 실험 결과, AFLRUN은 기존 퍼저보다 더 많은 취약점을 더 빠르게 발견하고, 29개의 새로운 취약점을 찾아냈다.

1. Introduction

지향성 퍼징은 종종 목표 위치를 자주 테스트하더라도 복잡한 취약점을 발견하지 못하는 한계를 가지고 있다. 또한, 여러 목표를 퍼징할 때 에너지 할당의 공정성이 보장되지 않아 일부 목표에 충분한 퍼징이 이루어지지 않는다.

../AFLRun preconditioned trigger.png preconditioned flaw activation, or PFA

../AFLRun 2.png post-target activation, or PTA

2. Background

2.1 Coverage-guided Fuzzing

커버리지 기반 퍼징은 초기 시드 입력을 변형하여 테스트 케이스를 생성하고, 새로운 동작을 유발하는 테스트 케이스를 시드로 저장하여 커버리지를 확장하는 방식으로 작동한다. AFL++은 실행 경로를 기록하고, 새로운 비트를 덮는 테스트 케이스를 시드로 추가하여 커버리지를 향상시킨다.

2.2 Directed Fuzzing

지향성 퍼징은 특정 목표 위치를 테스트하는데 중점을 두고, 시드의 목표 위치 근접도를 평가하여 에너지를 할당한다. 이 접근법은 목표 위치에 더 가까운 시드에 더 많은 에너지를 할당하여 목표 위치의 취약점을 빠르게 발견하는 것을 목표로 한다.

3. Motivation

복잡한 취약점을 발견하기 위해서는 목표 경로 다양성을 높이는 것이 중요하다. 또한, 여러 목표를 퍼징할 때 공정한 에너지 할당이 필요하다.

4. Design Overview

AFLRUN의 설계는 목표 경로 다양성과 공정한 에너지 할당을 중심으로 이루어져 있다.

5. Target Path-Diversity Metric

목표 경로 다양성을 높이기 위해 여러 virgin map을 유지한다.

6. Unbiased Energy Assignment

공정한 에너지 할당을 통해 각 목표에 대한 탐색과 활용을 공평하게 만든다. 이를 위해 각 목표 블록에 가중치를 할당하고, 시드의 에너지를 이 가중치에 따라 분배한다. (이 부분이 추후 우리 연구에서 아이디어를 제공하기도 했다.)

7. Evaluation

AFLRUN은 더 많은 취약점을 더 빠르게 발견하였으며, 29개의 새 취약점을 발견, 8개의 CVE를 등록했다. (이에 맞서 우리도 ‘더 많은 취약점을 더 빠르게 발견’하는데 주안점을 두었으며, 동료님의 도움으로 새 취약점도 많이 제보 및 등록할 수 있었다.)

8. Discussion

AFLRUN의 한계 - 시드 폭발 문제와 로컬 최적화 문제를 해결하기 위한 잠재적 솔루션을 제시한다.

AFLRun-single은 타깃이 우리가 준 거의 함수 entry가 맞는거 같다.

BBreachable.txt 와 Freachable.txt는 줄수가 같다. 아마 각 F의 맨앞이겠지.

1 find . -type f \( -name 'BBreachable.txt' -o -name 'Freachable.txt' \) | \
2 xargs -n1 dirname | sort -u | \
3 while read dir; do
4   bb=\((wc -l < "\)dir/BBreachable.txt" 2>/dev/null)
5   fr=\((wc -l < "\)dir/Freachable.txt" 2>/dev/null)
6   echo "\(dir: BB=\)bb, F=$fr"
7 done

./aflrunmulti-compile: BB=3099, F=3099 ./aflrunmulti-compiles-stacktracebase/cflow.CyIor1x3-9vg: BB=30, F=30 ./aflrunmulti-compiles-stacktracebase/cxxfilt.9jMLfVe6O-o_: BB=62, F=62 (… 이후에도 BB=, F= 동일)

Source: https://arxiv.org/pdf/2310.12419

분류:다중 지향성 퍼징

#Paper-Summary 

<< Previous Post

|

Next Post >>

← 뒤로