Yuchen Zhang, Chengbin Pang, Georgios Portokalidis, Nijos Triandopoulos, Jun Xu USENIX Security 2022
개요
AddressSanitizer의 성능 분석과, 그에 대한 여러가지의 Optimization technique를 제시한 논문이다.
Motivation & Importance
ASAN은 강력한 Capability, Scalability, Usability덕분에 많이 사용되는 Memory Santizier이다. 그러나 ASAN은 대략 1.5x-3.x의 메모리 오버헤드가 대략 200%가 넘는 Performance overhead가 발생한다는 성능상의 단점이 있다.
따라서, 위의 언급한 3개의 장점을 해치지 않으면서, 최대한 성능을 최적화 하기 위한 기법을 개발하는 것이 중요하다.
Asan 성능 분석

- Sanitizer Checks: 메모리 접근(읽기 및 쓰기)에 대해 삽입된 Sanitizer 검사를 비활성화
- Interceptor: memcpy, memset, memmove 등 표준 C 라이브러리 함수 호출을 감시하거나 가로채는 인터셉터 기능을 제거
- Poisoning: 레드존(Redzone, 보호용 패딩 영역)에 대해 의도적으로 유효하지 않은 값(poison)을 채워 넣는 작업을 생략
- Logging: malloc, free 등의 시점에 생성되는 스택 트레이스 로그를 포함하여, 중간 로깅 작업을 제거
AddressSanitizer가 자체적으로 제공하는 힙 관리 기능을 비활성화하고, 표준 C 라이브러리의 기본 힙 할당/해제 방식으로 복귀한다. 이는 호환성과 성능을 높이는 데 기여할 수 있다.
- Redzone: 메모리 할당 주변에 삽입되는 레드존 영역과 관련된 모든 동작을 제거
Design (Optimization)
- Optimization 1: Static analysis를 통해서 확실하게 Bound check를 정적인 시간에 할 수 있는 경우, 해당 메모리 접근에 대한 Sanitizer검사를 제거
- Optimiztaion 2: Sanitizer check중에서 다른 검사에 의해서 중복되는 검사를 제거
- Optimization 3: 물리적으로 인접한 메모리 접근을 식별해서, 해당 검사를 하나로 병합
- Optimization 4: 불변 주소를 사용하는 메모리 접근을 찾아서, Sanitizer검사를 루프 밖으로 이동시켜, 루프내의 반복적인 검사를 하나로 통합하고, 증가하거나 감소하는 주소를 찾아 Iteration간의 검사를 하나로 통합