선릉역 1번 출구
System Hacking - Memory Layout 본문
환경 설정
http://old-releases.ubuntu.com/releases/18.04.1/ubuntu-18.04.1-desktop-amd64.iso
해당 페이지에서 Ubuntu-18.04.iso 파일 다운 후 VMware에 설치하기
컴퓨터 = CPU + 메모리(RAM) + 보조메모리(SSD)
CPU: 실행할 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고, ISA(instruction set architecture)에 따라 처리하고 연산의 결과를 다시 메모리에 적재
-> 결론: CPU의 동작과 메모리 사이에 밀접한 연관이 있음
if) 공격자가 메모리를 악의적으로 조작할 수 있다면?
조작된 메모리 값에 의해 CPU도 잘못된 동작이 가능함 -> 메모리를 오염시키는 취약점을 메모리 오염(Memory Corruption) 취약점이라고 부름
- Stack Buffer Overflow
- Off by One
- Format String Bug
- Double Free Bug
- Use After Free
메모리
- 코드 세그먼트
- 데이터 세그먼트
- BSS 세그먼트
- 힙 세그먼트
- 스택 세그먼트
1. 코드 세그먼트
실행 가능한 기계 코드가 위치하는 영역
프로그램이 동작하려면 코드를 실행할 수 있어야 하므로, 이 세그먼트에는 읽기 권한과 실행 권한이 부여됨
쓰기 권한의 경우 공격자가 악용할 가능성이 높아 현대 OS는 이 세그먼트에 쓰기 권한을 제거함
ex) c언어 컴파일 -> 어셈블리 -> 기계어로 변환되는데, 기계 코드가 코드 세그먼트에 위치하게 됨
2. 데이터 세그먼트
컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치함
CPU가 이 세그먼트의 데이터를 읽을 수 있어야하기 때문에 읽기 권한이 부여됨
쓰기 가능한 영역과 쓰기 불가능한 영역이 나눠짐
- 쓰기 가능한 영역(=data segment): 프로그램이 실행되면서 값이 변하면 안되는 데이터
- 쓰기 불가능한 영역(=rodata_read-only data): 전역 변수과 같이 프로그램이 실행되면서 값이 변할 수 있는 데이터
3. BSS 세그먼트(block started by symbol segment)
컴파일 시점에 값이 정해지지 않은 전역 변수가 위치, 이 세그먼트의 메모리 영역은 프로그램이 시작될 때 모두 0으로 값이 초기화됨
*이런 특성으로 인해 C 코드를 작성할 때 초기화되지 않은 전역 변수의 값은 0이 됨
*개발자가 선언만하고 초기화하지 않은 전역변수가 포함됨
읽기 권한 및 쓰기 권한이 부여됨
int bss_data; //초기화되지 않은 전역 변수
4. 스택 세그먼트
프로세스의 스택이 위치하는 영역
함수의 인자나, 지역 변수와 같은 임시 변수들이 실행중에 저장됨
스택 세그먼트는 스택 프레임이라는 단위로 사용(함수 호출 시 생성, 반환 시 해제)
CPU가 자유롭게 값을 읽고, 쓸 수 있어야 하므로 읽기와 쓰기 권한이 부여됨
5. 힙 세그먼트
힙 데이터가 위치하는 영역
스택과 마찬가지로 실행중에 동적으로 할당될 수 있음
malloc(), calloc()을 호출해서 할당받는 메모리가 이 세그먼트에 위치하게 됨
일반적으로 읽기와 쓰기 권한이 부여됨
'Hacking & Security > Hacking' 카테고리의 다른 글
System Hacking - gdb (1) | 2022.12.25 |
---|---|
System Hacking - Computer Architecture (0) | 2022.12.24 |
Cobalt Strike란? (0) | 2022.12.22 |
[DVWA] CSRF (0) | 2022.11.30 |
[DVWA] Burp Suite를 사용한 Brute Force (0) | 2022.11.30 |