맨땅에 코딩
취약점 분석 - 시스템 해킹 원리 본문
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다.
1. Memory Layout
Memory Layout(메모리 레이아웃)이란 프로그램이 실행될 때 프로세스가 사용하는 메모리 공간의 구조를 의미함
운영체제(OS)는 프로세스마다 독립적인 가상 메모리 공간을 할당하며, 이를 특정 영역으로 나누어 관리함
2. Stack Overflow
Stack Frame
- 스택 프레임이란 함수가 호출될 때, 그 함수만의 스택 영역을 구분하기 위하여 생성되는 공간임
- 이 공간에는 함수와 관계되는 지역 변수, 매개 변수, 복귀주소가 저장되며, 함수 호출 시 할당되며, 함수가 종료되면서 소멸함
Shellcode
- 시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램으로 일반적으로 어셈블리어로 작성되어 있음
- Wargame, CTF, Bug Hunting에서의 목표는 다른 프로세스를 실행할 수 있는지 여부, 따라서 bash 쉘을 실행시키는 것이 목표임
3. return2libc
Library
: c언어에서 라이브러리란 자주 사용하는 소스코드들을 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태를 말함
- 컴파일러의 일을 줄일 수 있음
- 다른 프로그래머의 소스코드를 쉽게 사용할 수 있음
- 소스코드를 보호/비공개 할 수 있음
4. Command Injection
: 격자가 애플리케이션이 실행하는 시스템 명령어를 조작하여 임의의 명령을 실행하도록 유도하는 공격 기법으로, 주로 입력값 검증이 부족한 웹 애플리케이션이나 시스템 명령어를 직접 호출하는 프로그램에서 발생
Command Injection의 동작 원리
- 애플리케이션이 사용자 입력을 받아 시스템 명령어를 실행하는 경우, 공격자가 특수한 입력값을 삽입하여 원래 의도된 명령어 외에도 추가적인 명령을 실행할 수 있음
- 주로 Shell(sh, bash, cmd)을 통한 명령 실행 함수에서 발생
- 취약한 함수 예시 (C, Python, PHP 등)
- system()
- exec()
- popen()
- shell_exec()
- os.system()
- subprocess.Popen()
5. Format String Bug
: 잘못된 문자열 포맷 지정으로 인해 발생하는 보안 취약점으로, C, C++ 같은 언어에서 printf(), sprintf(), fprintf() 등의 함수에 사용자 입력이 직접 들어갈 때 발생하며, 공격자가 메모리 내용을 읽거나 임의 코드를 실행할 수도 있음
6. Heap Overflow & Use-After-Free
Heap Overflow
: 힙(Heap) 영역에서 할당된 메모리보다 더 많은 데이터를 덮어쓰는 취약점으로, 힙에서 버퍼 크기 초과 데이터를 기록하면, 다른 변수 또는 구조체의 메모리를 덮어쓸 수 있으며, 이를 악용하여 프로그램 흐름을 조작할 수 있음
Use-After-Free(UAF)
: 이미 free()로 해제된 힙 메모리를 다시 참조하는 취약점으로, 공격자가 해제된 메모리를 조작하여 임의의 코드를 실행할 수도 있음
Heap Overflow & UAF 방어 방법
- 메모리 경계 검사 (strcpy() 대신 strncpy() 사용)
- 메모리 해제 후 포인터 초기화 (free(ptr); ptr = NULL;)
- ASLR 적용 (Heap 영역의 주소를 랜덤화하여 공격 난이도 증가)
- 사용 후 즉시 해제 (free() 호출 후 즉시 NULL로 초기화)
7. ASLR & Information Leakage
: 메모리 주소를 랜덤화하여 공격자가 특정 주소를 예측할 수 없도록 하는 보안 기법으로, 기본적으로 스택, 힙, 공유 라이브러리의 주소를 매번 실행할 때마다 다르게 배치하여 버퍼 오버플로우 같은 공격을 어렵게 만듦
ASLR & 정보 유출 방어 방법
- ASLR 강제 활성화 (randomize_va_space = 2)
- Stack Canaries 사용 (스택 오버플로우 탐지)
- DEP/NX(Non-Executable Memory) 적용 (힙 & 스택 실행 방지)
- 기본 라이브러리 주소 노출 방지 (/proc/self/maps 보호)
8. ROP
: DEP(데이터 실행 방지, NX 비트) 우회 공격 기법으로, 일반적인 버퍼 오버플로우 공격은 스택에 쉘코드를 삽입하여 실행하지만, DEP가 활성화되면 스택/힙 영역에서 직접 실행이 불가능하므로 기존 코드 조각(Gadget)들을 조합하여 공격함
ROP의 핵심 원리
- 공격자는 버퍼 오버플로우를 이용하여 스택을 조작함
- 기존 프로그램의 유용한 코드 조각(Gadget)을 찾아 사용
- 일반적으로 ret(리턴)으로 끝나는 코드 조각 사용
- 여러 개의 Gadget을 체인으로 연결하여 원하는 동작 수행
공격 과정
- 취약점 이용 (버퍼 오버플로우 등)
- ROP Gadget 탐색 (실행 가능한 코드 조각 찾기)
- 스택 조작 (리턴 주소를 조작하여 원하는 동작 수행)
- 악성 코드 실행 (system("/bin/sh") 같은 명령 실행)
'화이트햇 스쿨 2기 > 이론교육' 카테고리의 다른 글
침해대응/위협/포렌식 - 파일시스템 분석 (0) | 2025.02.15 |
---|---|
침해대응/위협/포렌식 - 리버스 엔지니어링 (0) | 2025.02.13 |
취약점 분석 - 컴퓨터 구조 II (0) | 2025.02.13 |
취약점 분석 - 어셈블리 언어 (0) | 2025.02.13 |
취약점 분석 - 웹해킹 원리 (0) | 2025.01.29 |