security/리버싱핵심원리

ASLR 제거

민사민서 2023. 4. 4. 16:00

ASLR

- PE 파일이 "메모리에 로딩될 때" 로딩 시작 주소 값을 랜덤하게 바꾼다

ASLR.exe의 EP
ASLR.exe를 다시 빌드했을 때 EP
ASLR_no.exe의 EP

    * RVA of EP=0x12AE이고, EXE 파일의 ImageBase는 0x00400000이므로 EP=4012AE이다.

    * ASLR이 적용되면 "빌드 시마다" EXE 파일의 ImageBase 값이 달라진다

 

- 해당 프로세스의 스택/힙 시작 주소도 "실행될 때마다" 랜덤하게 바뀐다

ASLR_no.exe의 EP에서의 스택창

   * ASLR_no.exe의 경우 스택 주소 일정. ASLR.exe의 경우 실행 시마다 스택 주소 달라짐

 

ASLR 세팅 in visual C++

 

ASLR 적용 / 미적용 차이

1) .reloc 섹션 존재여부, IMAGE_FILE_HEADER.Characteristics

ASLR.exe에는 .reloc 섹션 존재

- ASLR_no.exe에는 .reloc 섹션이 존재하지 않으므로

- IMAGE_FILE_HEADER의 Number of Setcions 값이 1 작고

- IMAGE_FILE_HEADER의 Characteristics에 IMAGE_FILE_RELOCS_STRIPPED(1) 플래그가 추가된다

ASLR.exe
ASLR_no.exe

2) IMAGE_OPTIONAL_HEADER의 DLL Characteristics

- ASLR.exe의 경우 IMAGE_OPTIONAL_HEADER의 DLL Characteristics 값

   IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 값(0x40)이 세팅되어 있다.

ASLR.exe

=> IMAGE_OPTIONAL_HEADER.DLL Characteristics 의 0x40 플래그를 없애면 ASLR 기능 비활성화!!

=> 분석하고자 하는 파일의 ASLR 기능을 잠시 제거한 후 디버깅하면 원활한 분석 가능