(다중 지향성 퍼징) 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
지향성 퍼징은 종종 목표 위치를 자주 테스트하더라도 복잡한 취약점을 발견하지 못하는 한계를 가지고 있다. 또한, 여러 목표를 퍼징할 때 에너지 할당의 공정성이 보장되지 않아 일부 목표에 충분한 퍼징이 이루어지지 않는다.
preconditioned flaw activation, or PFA
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
분류:다중 지향성 퍼징