TeamH4C_ProjectH4C

[TeamH4C_GDB] 메모리 분석

P4P3R_H 2021. 3. 14. 14:16

메모리 분석 내용으로 GNU 디버거라 하는 GDB를 통해 확인해보겠습니다.

참고한 사이트는 https://bpsecblog.wordpress.com/2016/03/08/gdb_memory_1/ 여기입니다.

 

메모리 분석

메모리는 유저 영역과 커널 영역으로 나뉘어 저장되어있습니다.

유저 영역은 사용자가 사용하는 영역이고, 커널 영역은 사용자가 마음대로 접근을 하지 못하도록 제한한 영역으로 생각하면 됩니다. 시스템 운영에 필요한 메모리와 운영체제를 커널 영역으로 분리한 것입니다.

나누는 영역은 운영체제마다 다르고, 설정에 따라 영역의 크기를 조정할 수 있습니다.

유저 영역을 보면 코드 영역, 데이터 영역, 힙 영역, 스택 영역이 존재하는데 순서대로 코드 영역에는 코드가 어셈블리 코드로 올라갑니다.

데이터 영역은 전역 변수가 데이터 영역에 로드되는데 항상 동일한 메모리에 위치합니다. 주소가 고정되기에 사용자가 입력하는 값이 전역 변수로 정의되어 있어 원하는 값을 작성하면 exploit에 활용될 수 있습니다.

힙 영역은 동적으로 메모리를 할당하여 사용하는 공간으로 대표적으로 malloc함수를 사용하는 것이 존재합니다. 여기서 주의하여야 할 점은 UAF 취약점을 공격할 수 있다는 점입니다. 동적 할당 후 해제한 곳에 다시 재사용하는 방식을 사용하는 것을 활용한 exploit입니다.

스택 영역은 높은 주소에서 낮은 주소로 거꾸로 자라는데 위로 자라나는 이유는 커널을 건드리지 않기 위해서입니다. 스택 영역은 함수 인자나 지역변수들이 올라옵니다.

힙과 스택은 고정된 메모리에 올라오는 것이 아니기에 이 영역을 활용해 쉘을 따는 것은 쉽지 않습니다.