반응형
SMALL
리눅스 시스템에서 바이너리 보안은 다양한 보안 기법들의 조합으로 구성됩니다. 이번 글에서는 흔히 CTF나 보안 공부에서 마주치는 주요 보호 기법들인 ASLR, DEP/NX, Format String, Stack Canary, RELRO, PIE의 차이점과 역할을 정리해보겠습니다.
🔐 1. ASLR (Address Space Layout Randomization)
- 개념: 메모리 주소를 무작위로 배치하여 공격자가 정확한 주소를 예측하지 못하게 함
- 보호 위치: Stack, Heap, mmap, libc, PIE 실행파일의 주소
- 효과: 주소 기반 공격(Ret2libc, ROP 등)을 어렵게 만듦
- 우회 가능성: 정보 유출 (info leak)이 있으면 우회 가능
- 확인 방법:
cat /proc/sys/kernel/randomize_va_space
🚫 2. DEP / NX Bit (Data Execution Prevention)
- 개념: 스택, 힙 등의 영역을 실행 불가능하게 만들어 쉘코드 실행 방지
- 효과: Ret2StackShellcode 같은 공격 방지
- 우회 방법: ROP(Return Oriented Programming)으로 우회 가능
- 확인 방법:
checksec --file=바이너리이름
📝 3. Format String 취약점
- 개념:
printf(user_input)
처럼 입력값이 포맷 문자열이 될 경우 발생 - 영향: 메모리 읽기/쓰기 가능, RIP 제어 가능
- 예방: 항상 포맷 지정
printf("%s", user_input);
🔒 4. Stack Canary
- 개념: 스택 리턴 주소 앞에 '카나리' 값을 두고 손상 여부로 오버플로우 감지
- 효과: 리턴 주소 덮기 공격 방지
- 우회 방법: Canary 유출 시 우회 가능 (ex. Format String leak)
- 확인 방법:
checksec --file=바이너리이름
🧷 5. RELRO (RELocation Read-Only)
- 개념: GOT(Global Offset Table)를 읽기 전용으로 만들어 덮기 방지
- 종류:
- Partial RELRO: 일부만 보호
- Full RELRO: GOT 전체를 보호
- 확인 방법:
checksec --file=바이너리이름
🧱 6. PIE (Position Independent Executable)
- 개념: 실행파일 자체도 ASLR의 영향을 받아 주소가 매 실행 시 변경
- 효과: 코드 주소 예측을 어렵게 만듦
- 확인 방법:
checksec --file=바이너리이름
📊 요약 비교표
기법 | 보호 대상 | 우회 가능 여부 | 확인 방법 |
---|---|---|---|
ASLR | 전체 메모리 주소 | Info leak 시 가능 | cat /proc/... |
DEP / NX | Stack, Heap | ROP 등으로 우회 가능 | checksec |
Format String | 입력 포맷 문자열 | 직접 포맷 사용 시 취약 | 코드 리뷰 |
Stack Canary | 리턴 주소 보호 | Canary leak 필요 | checksec |
RELRO | GOT 영역 | Partial은 우회 가능 | checksec |
PIE | 코드 주소 | 주소 유출 시 가능 | checksec |
✅ 마무리
보안 기법은 단독으로는 완전하지 않습니다. 여러 기법이 함께 동작해야 실질적인 보호가 이루어집니다. 실습 시에는 checksec
명령어를 활용해 각 보호 기법의 적용 여부를 확인해보는 것을 추천드립니다.
반응형
LIST
'Security' 카테고리의 다른 글
🛡️ 스크린드 서브넷과 방화벽 구조 완벽 정리 (0) | 2025.06.05 |
---|---|
🔐 IPsec VPN vs SSL VPN 운영 방식 완전 정리 (0) | 2025.06.05 |
[Security] 메타스플로잇(Metasploit) 기초 (0) | 2021.03.29 |
[Security] 레지스트리(Registry)와 하이브(Hive) 파일 (0) | 2020.03.12 |
[Security] 윈도우(Window) 시스템 (0) | 2020.03.11 |