4주차 활동 시간에는 각자 포너블에 대해 공부하고 팀원들에게 발표하는 시간을 가져보았습니다.
1. 포너블
1.1. 포너블 개념 : 프로그램이나 운영체제의 취약점을 찾아내어 개발자가 의도하지 않은 동작을 유도하여 시스템의 제어권을 획득하는 것.
1.2. 포너블 주요대상
Stack : 함수의 지역 변수, 함수의 호출 정보, Return Address 등이 저장.
Heap : 동적으로 할당되는 메모리 영역.
Register : Cpu가 연산에 사용하는 저장 공간, 프로그램의 실행 흐름과 밀접한 관련.
1.3. 리버싱과의 차이점
| 리버싱 | 포너블 |
| 동작 원리 파악 | 취약점을 실제로 악용 |
| 디스어셈 · 디컴파일 | 입력 조작 · 메모리 변조 |
| 정적/동적 분석 | 리버싱 후 잇스플로잇 |
1.4. 익스플로잇 흐름
(1) 쉘 코드 제작
어셈블리어 형태의 쉘코드를 제작하여 실행 → 서버는 공격자에게 쉘을 열어주게 됨.
(2) 페이로드 설계
더미 데이터, RET 변조 등을 이용해 페이로드 설계
(3) 잇스플로잇 스크립트 작성
스크립트를 실행하면 서버의 제어권이 공격자의 터미널로 넘어가게 됨.
2. 취약점
BOF : 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생하는 현상.
-Stack BOF : 할당된 버퍼들이 정의된 버퍼 한계치를 넘는 경우, 복귀 주소를 변경하여 공격자가 임의 코드를 수행.
-Heap BOF : 최초 정의된 힙의 메모리 사이즈를 초과하는 문자열들이 힙의 버퍼에 할당될 시, 공격자가 데이터 변경 및 함수 주소 변경으로 임의 코드를 수행.
FSB : 문자열 처리 과정에서 입력값이 잘못 사용되는 취약점으로, 메모리의 값을 읽거나 변경하는 데 악용 가능.
Use-After-Free : 이미 해체된 메모리를 다시 사용하는 취약점으로, 잘못된 메모리 접근 발생이 가능.
3. 공격 기법
Return Adress Overwrite : 할당된 스택 버퍼의 한계치를 초과하는 데이터를 입력하여 Return Address를 조작함으로써, 스택 프레임의 반환 주소를 변조하고 프로세스의 실행 흐름을 공격자가 원하는 방향으로 제어하는 기법.
Return Oriented Programming : 프로그램에 존재하는 Gadget을 연결하여 원하는 동작을 수행해 공격자가 원하는 실행흐름을 프로그래밍 하는 기법.
PayIoad : 취약점을 이용하기 위해 만들어 넣는 입력 데이터 공격 목적에 맞게 데이터와 주소 등을 구성하는 기법.
4. 보호 기법
ASLR : 바이너리가 실행될 때마다 스택, 힙, 데이터, 코드 영역 등의 주소를 할당할 때 무작위로 임의의 주소에 할당하는 기법.
NX : 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 기법.
Canary : 버퍼와 스텍프레임 포인터 사이에 BOF를 탐지하기 위한 임의의 데이터를 삽입하는 기법.
공격자가 BOF를 통해 sfp나 ret에 접근하면 canary가 변경되어 경고가 발생.
5. 분석 · 공격 도구
gdb + pwndbg : 메모리 · 레지스터 실시간 확인 · 필수 디버거
pwntools : 페이로드 생성 / 전송 자동화 (파이썬)
checksec : 적용된 Canary / NX / PIE 여부 점검
one_gadget : 한 번의 호출로 셸 띄우는 libc 주소 검색
김유원
박시연
임은혁
김서현
홍유나
'3. Pwnable (포너블)' 카테고리의 다른 글
| [2024.11.22] PWN PWN 해 7주차 활동 (2) | 2024.12.04 |
|---|---|
| [2024.11.16] PWN PWN 해 6주차 활동 (0) | 2024.11.22 |
| [2024.11.09]PWN PWN 해 5주차 활동 (1) | 2024.11.15 |
| [2024.11.02]PWN PWN 해 4주차 활동 (0) | 2024.11.15 |
| [2024.10.05]PWN PWN 해 3주차 활동 (0) | 2024.11.15 |