SH1R0_HACKER
005. Double Free & Use After Free 본문
Double Free 취약점과 UAF (Use After Free) 취약점은 동적 메모리 관리에서 나타납니다.
이미 해제된 메모리를 다시 한 번 해제하거나 (Double Free),
해제된 메모리에 접근해서 값을 쓸 수 있는 문제 (UAF)가 있습니다.
위 예제는 a와 b에 100byte 만큼의 메모리를 할당하고
Hello World! 문자열을 복사한 뒤 출력하는 코드입니다.
하지만 메모리를 해제할 때 이미 해제된 메모리를 다시 한번 해제하는 경우가 발생하면
공격자에 의해 프로그램의 실행 흐름이 변경될 수 있습니다.
아래는 두번째 예제입니다.
메모리의 동적 할당은 Heap 영역에서 발생합니다.
100byte크기의 a가 메모리에 동적할당되고 Hello World! 문자열이 복사된 후 출력됩니다.
그리고 a를 해제하고 100byte크기의 b를 메모리에 동적할당 후
Hello Pwnable! 문자열이 복사된 후 출력됩니다.
여기서 메모리a와 메모리b가 힙 영역에서 같은 주소를 가리키고 있다는 점을 고려해야합니다.
새로운 메모리 영역을 할당할 때 메모리를 효율적으로 관리하기 위해
기존에 해제되었던 메모리가 그대로 반환되어 일어나는 일입니다.
그래서 이미 해제된 메모리 a에 접근하여 Hello World! 문자열을 복사한다면
b 또한 영향을 받기 때문에 문제가 발생할 수 있습니다.
위의 코드를 컴파일하여 실행하면 아래와 같은 출력결과를 보실 수 있습니다.
분명히 a에 Hello World! 문자열을 복사했지만 b를 출력하면 a에 복사한 문자열로
바뀌어 출력되는것을 확인할 수 있습니다.
'System > System Exploitation' 카테고리의 다른 글
007. Integer issues (0) | 2021.02.07 |
---|---|
006. 초기화되지 않은 메모리 (0) | 2021.02.07 |
004. Format String Bug (0) | 2021.02.07 |
003. Off-by-one (0) | 2021.02.03 |
002. OOB (Out Of Boundary) (0) | 2021.02.03 |