이번엔 PE 조작으로 ASLR 우회하는 방법에 대해서 알아보겠습니다.
1. ASLR ( Address Space Layout Randomization )
ASLR 은 PE 파일이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 기술입니다.
또한 DLL 파일도 초기에 로딩되는 주소가 매 실행마다 달라집니다.
윈도우에서는 Vista 버전부터 적용이 됬고 리눅스는 고대 때 부터 적용이 됬던 기술이죠
(원도우는 역시 열발 늦어 ㅋㅋ)
커널 버전으로 보면
1 2 3 4 5 6 7 8 9 10 11 12 | OS Kernal version Windows 2000 5.0 Windows XP 5.1 Windows Server 2003 5.2 Windows Vista 6.0 ------------ ASLR 기술 적용 시작 Windows Server 2008 6.0 Windows Server 2008 R2 6.1 Windows 7 6.1 Windows Server 2012 6.1 ?? Windows 8 6.2 Windows 8.1 6.3 Windows 10 10 <----------- 6.4가 아니라 10으로 점핑! | cs |
즉 커널 6.0 버전 이후부터 적용된 스킬이네요.
는 커널 버전 5하고 6버전 출시 기간 차가 무려 약 7년 인게 함정
그럼 직접 예시를 보면서 설명을 계속 하겠습니다.
2. ASLR 기술의 적용
이 기술은 모든 실행파일에 적용되는 기술이 아닙니다.
이 기술을 적용하려면 , 일단 윈도 OS 커널 버전이 6.0 이상이여야 되고, 컴파일을 할 때 컴파일 옵션으로 /DYNAMICBASE 옵션을 줘야 합니다.
코드를 2개를 작성해 준 후 옵션을 다르게 해 컴파일을 해 봅시다.
저기 희미하게 Yes 된거 보이시죠? ㅋㅋ
다른 하나는 저 기능을 끄고 컴파일 해주세요
이렇게 만들어 줍니다.
뭐 디버깅 해 보면 ASLR-on 프로그램은 랜덤한 시작 주소를 가질 겁니다.
3. ASLR 기능 제거
PEView 프로그램으로 두 파일을 한번 비교 해 봅시다.
보면 ASLR-on 프로그램과 ASLR-off 프로그램과 차이점을 찾아보면
ASLR-on 프로그램은 reloc 섹션이 추가되 있네요
PE 섹션에 대해서 나중에 강의로 설명하겠지만
reloc 섹션만 설명하면 : .reloc 섹션은 PE 파일이 메모리에 로딩되는 순간 재배치가 이뤄질 때 참고하는 섹션입니다. 즉 다른말로는 제거해도 무방한 섹션이죠. ( DLL 파일은 항상 재배치를 고려해야 하므로 제거하면 안되요 )!
다음으로 중요한 차이점은
IMAGE_FILE_HEADER 에 Characteristics 와 IMAGE_OPTIONAL_HEADER 에 DLL Characteristics 입니다.
체크 해 놓은 부분을 보면
ASLR 기술이 적용된 프로그램을 보면 .reloc 이 있고 아래는 스트립 됬다는 걸 알수 있습니다.
즉 IMAGE_FILE_RELOCS_STRIPPED 플래그 하나 차이네요
또 다른 차이는
ASLR-on 프로그램은 IMAGE_DLLCHARACTERSTICS_DYNAMIC_BASE (40) 플래그가 설정되어있네요
이제 직접 PE 를 수정해 ASLR 기능을 제거해 봅시다.
4. ASLR 기능 제거하기
IMAGE_OPTIONAL_HEADER - DLL Characterstics 값에서 IMAGE_DLLCHARACTERISTICS_DYNAMICS_BASE (40) 플래그를 없애면
ASLR 기능이 간단히 제거됩니다.
즉 DLL Characterisitcs 값을 8140에서 8100 으로 바꿔주면 됩니다
40 81 이였던 것을 00 81 로 수정 해 주시면 됩니다.
그리고 저장 하신 후 디버거로 실행해 보면 ASLR 기능이 제거된 것을 확인하실 수 있습니다.
'Security > Reverse Engineering' 카테고리의 다른 글
[Reversing] Cross-Compiler & Remote Debugging with gdb on Linux (0) | 2016.12.31 |
---|---|
[Reversing] Basic Knowlodge about IA-32 Registry (0) | 2014.04.26 |
[Reversing] About Reversing?? (0) | 2014.04.26 |