Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Dangling Pointer와 Use-After-Free 본문

Study/Etc

Dangling Pointer와 Use-After-Free

awakerrday 2017. 11. 30. 11:15
1
2
3
4
5
int *= (int*malloc(sizeof(int));
 
*= 11;
 
free(p);
cs

free()를 호출하여 p가 가리키는 메모리 공간을 해제해도 

p는 여전히 해제된 메모리 공간을 가리키고 있기 때문에 

이러한 댕글링 포인터 p는 잠재적인 보안위협Segmentation fault예측 불가능한 동작을 야기한다.


1
2
3
4
5
6
7
8
9
10
11
12
int *p; 
... 
 
int a= 5
= &a; 
 
// 이 위치에서 p는 댕글링 포인터가 된다. 
func();
cs

컴파일러에서 블록 구문으로 스택프레임이 다루어지기 때문에 변수 a는 스택프레임에 존재

포인터 p는 a를 가리키고 있고 블록이 끝나면 스택프레임이 사라지고 

댕글링 포인터 p는 여전히 a(사라진 스택프레임의 지역변수)를 가리킨다.


이후 func()가 호출되면 사라진 스택프레임이 func의 스택프레임으로 재사용 되고

댕글링 포인터 p는 여전히 같은 위치(사라진 스택프레임의 지역변수 a의 위치)를 가리킨다.


이와 같은 문제를 회피하기 위해선 free() 호출 후에 포인터를 NULL로 초기화 시켜주어야 한다.


출처: http://thinkpro.tistory.com/67



댕글링 포인터와 관련된 힙 메모리 재사용 문제를 이용한 취약점으로는 

Internet Explorer 브라우저에서 주로 발생하는 Use-After-Free가 있다. 


UAF에 대한 내용: http://noplanlife.com/?p=639

'Study > Etc' 카테고리의 다른 글

멜트다운 취약점 원리 간단요약  (0) 2018.02.07
메모리 구조, 변수  (0) 2017.12.02
랜섬웨어 시뮬레이터 RanSim  (0) 2017.11.03
Dependency Injection (DI)  (0) 2017.08.22
JavaScript, PHP, Node.js란?  (0) 2017.08.14
Comments