
<서론>
목표 바이너리에서 ASLR의 부재를 확인하고 ROP 체인을 이용해서 exploit을 진행하려던 중에 처음에 ASLR이 걸려있지 않다고 판단한 것이 잘못 확인한 사실인 것을 알게 되었다. 따라서 ASLR 기법과 그 확인 방법에 간단히 조사해서 정리하게 되었다.
1. ASLR이란?
ASLR(Address Space Layout Randomization)은 공격자가 메모리 주소를 예측하기 어렵게 만들어서 메모리 손상 취약점 공격을 방지하기 위한 기술이다.
ASLR은 데이터 영역인 라이브러리, 스택, 힙 등의 주소를 무작위화한다. 따라서 버퍼 오버플로우나 ROP, RTL과 같은 메모리 기반 공격을 어렵게 만들어서 공격자가 정확한 주소를 알아내기 힘들다.
2. ASLR 검사 방식 및 확인 방법
1. /proc/sys/kernel/randomize_va_space 파일 확인
이 파일은 리눅스 커널이 ASLR 동작을 제어하기 위해 사용하는 커널 파라미터 파일이다.
다음 명령어의 결과로 나오는 숫자 값에 따라서 ASLR 활성화의 정도를 확인할 수 있다.
cat /proc/sys/kernel/randomize_va_space
- 0 - ASLR 비활성화
- 주소 공간 무작위화가 전혀 적용되지 않음
- 1 - 부분 무작위화 (Partial randomization)
- 일부 메모리 영역에 대해 무작위화를 적용함
- 2 - 완전 무작위화 (Full randomization)
- 프로세스의 주소 공간 전반에 걸쳐 무작위화를 적용함
2. 그외
- 주소 출력하는 코드 작성
- 주소를 출력하는 코드를 작성해서 여러번 실행후 확인할 수 있음
- gdb 사용
- 디버거를 사용해서 직접 실행 파일의 메모리 매핑을 확인할 수 있음
- checksec 사용
- 명령어를 통해서 실행 파일의 보안 속성을 확인할 수 있음
- 출력에 “ASLR enabled” 또는 “PIE enabled”가 있으면 ASLR이 적용된 것
- $ readelf -h <바이너리 명> 명령어 사용
- ELF 헤더를 출력해서 실행 파일이 PIE로 컴파일되었는지 확인하는 방법으로 ELF 헤더의 Type 필드가 DYN이면 PIE enabled인 것으로 ASLR이 적용될 가능성이 큰 것으로 확인한다. ( EXEC이면 no PIE인 것)
$ readelf -h test.cgi
ELF Header:
...
Type: EXEC (Executable file)
...
3. 확인이 잘못되었던 이유
PIE와 ASLR의 차이 및 ASLR 확인 방법에 대해서 정확하게 알고 있지 않았기 때문이었다. PIE가 걸려있다면 ASLR의 적용은 당연시하지만 PIE가 걸려있지 않다고 해서 ASLR이 적용되지 않은 것은 아니기 때문이다.
또한 ASLR을 확인하는 방법은 /proc/sys/kernel/randomize_va_space 파일을 확인하는 방법이 가장 정확하며 그외의 방법은 PIE의 여부를 확인하는 것으로 ASLR 여부의 가능성은 추측할 수 있지만 정확하게 ASLR을 확인하는 방법은 아니다.
추가적으로 ASLR은 바이너리를 실행시키는 운영체제에서 제공하는 기능이고 PIE는 바이너리 자체에 적용되는 기술이다.
ASLR 보호기법
- 스택, 힙, 라이브러리 등의 영역이 실행시켰을 때마다 변함
- code, bss, data 등의 주소는 고정적인 주소
PIE 보호기법
- code, bss, data 섹션 등의 주소가 고정되어 있지 않고 offset 으로만 존재하며 바이너리를 실행시킬 때 random한 base 주소와 offset을 더한 값으로 결정됨
→ code, bss, data 영역은 ASLR이 걸려있어도 PIE가 걸려있지 않다면 고정된 주소를 가지고 ASLR이 걸려있지 않다면 PIE가 걸려있어도 주소가 고정되어서 PIE의 의미가 없다.
참고
'이하임' 카테고리의 다른 글
| Fuzzer 조사 - Fuzzing과 Fuzzer에 대한 이해 (0) | 2025.04.27 |
|---|---|
| CPIO 아카이브 파일 (0) | 2025.02.19 |
| python의 버전 관리를 위한 pyenv 설치 및 사용법 (0) | 2025.01.09 |
| .ubi에서 파일 시스템 추출 (0) | 2024.11.12 |

stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!