구글에서 진행하는 보안 프로젝트인 Sanitizer 에 대해 공부해보려 한다.
(https://github.com/google/sanitizers)
그 중에서도 다음과 같은 취약점을 개선하기 위해 만든 Address SANitizer 에 대해 알아보자
- Use after free (dangling pointer dereference)
- Heap buffer overflow
- Stack buffer overflow
- Global buffer overflow
- Use after return
- Use after scope
- Initialization order bugs
- Memory leaks
ASAN 을 이용하여 컴파일한 프로그램이 취약점이 발생하였을 때 보이는 결과물은
아래 주소를 참조하면 눈으로 확인할 수 있다.
https://www.lazenca.net/display/TEC/ASAN+-+Address+Sanitizer
https://github.com/google/sanitizers/wiki/AddressSanitizer
하지만 한계점도 존재한다.
AddressSanitizer는 초기화되지 않은 메모리 읽기를 감지하지 않으며 (Memory Sanitizer에서 감지 됨) 일부 리턴 후 사용 버그만 감지합니다. 또한 정수 언더 플로 / 오버플로 (정의되지 않은 동작의 정수가 메모리 주소 오프셋을 계산하는 데 사용되는 경우)로 인해 모든 임의의 메모리 손상 버그 나 모든 임의의 쓰기 버그를 감지 할 수 없습니다. 구조체와 클래스의 인접 버퍼는 이전 버전과의 호환성을 방해하지 않도록 오버플로로부터 보호되지 않습니다.
AddressSanitizer does not detect any uninitialized memory reads (but this is detected by Memory Sanitizer), and only detects some use-after-return bugs. It is also not capable of detecting all arbitrary memory corruption bugs, nor all arbitrary write bugs due to integer underflow/overflows (when the integer with undefined behavior is used to calculate memory address offsets). Adjacent buffers in structs and classes are not protected from overflow, in part to prevent breaking backwards compatibility.
그럼 어떠한 원리(알고리즘)로 수행되는지 간단히 알아보자
[ 포너블 문제를 풀기위해서 공부 중이였는데 너무 기초가 부족하여 보류하기로 함 ]
'System Hacking > Study Notes' 카테고리의 다른 글
pwntool 함수 (0) | 2020.01.07 |
---|---|
LD 와 libc.so.6 (0) | 2019.12.29 |
Tcache_Duplicate (0) | 2019.10.08 |
잡기술 (0) | 2019.09.11 |
Unsafe_Unlink (0) | 2019.09.05 |