18. NX 와 ASLR

2022. 2. 12. 20:10·시스템 개념
728x90
반응형

ASLR

Address Space Layout Randomization(ASLR)은 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다.

 

ASLR은 커널에서 지원하는 보호 기법이며, 다음의 명령어로 확인할 수 있다.

cat /proc/sys/kernel/randomize_va_space

2

리눅스에서 이 값은 0,1 또는 2의 값을 가질 수 있다.

각 ASLR이 적용되는 메모리의 영역은 다음과 같다.

- NO ASLR(0) : ASLR을 적용하지 않음.

- Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등

- Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역

아래 addr.c코드로 ASLR의 특징을 살펴보도록 하자.

addr.c

addr.c 코드는 메모리의 주소를 출력하는 코드이다.

gcc로 컴파일하고 실행해보면 아래와 같은 결과를 확인할 수 있다

리눅스는 ASLR이 적용됐을 때, 파일을 페이지(page) 단위로 임의 주소에 매핑한다.

따라서 페이지의 크기인 12비트 이하로는 주소가 변경되지 않느다.

libc_base와 printf의 주소 차이는 항상 같다.

ALSR이 적용되면, 라이브러리는 임의 주소에 매핑된다.

그러나 라이브러리 파일을 그대로 매핑하는 것이므로 매핑된 주소로부터 라이브러리의 다른 심볼들까지의 거리(offset)은 항상 같다.

즉 libc_base addr - printf addr 은 계속해서 주소가 바뀌더라도 그 거리(offset)은 일정하다.

 

NX

No-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법이다.

어떤 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽다.

예를 들어, 코드 영역에 쓰기 권한이 있으면 공격자는 코드를 수정하여 원하는 코드가 실행되게 할 수 있고,

반대로 스택이나 데이터 영역에 실행 권한이 있으면 Return to Shellcode와 같은 공격을 시도할 수 있다.

 

CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다. gdb의 vmmap으로 NX 적용 전후의 메모리 맵을 비교하면, 다음과 같이 NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없는 것을 확인할 수 있다.

반면, NX가 적용되지 않은 바이너리에는 스택, 힙, 데이터 영역에 실행 권한이 존재하는 것을 확인할 수 있다.

 

Checksec을 이용한 NX 확인

checksec을 이용하면  바이너리에 NX가 적용됐는지 확인할 수 있다.

 

이전에 실습했던 Return to shellcode의 예제인 re2s에 NX 보호기법을 적용한 후, 동일한 익스를 실행해보자.

이 바이너리를 대상으로 익스를 실행하면, 위와 같이 Segmentation fault가 발생한다.

이는 NX가 적용되어 스택영역에 실행 권한이 사라지게 되면서, 셸코드가 실행되지 못하고 종료된 것이다.

'

728x90
반응형

'시스템 개념' 카테고리의 다른 글

19. PLT & GOT  (0) 2022.08.09
16. Background: Library - Static Link vs. Dynamic Link  (0) 2022.02.03
15. Exploit Tech: Return to Shellcode  (0) 2022.01.30
14. Stack Canary  (0) 2022.01.30
13. Exploit Tech : Return Address Overwrite  (0) 2022.01.28
'시스템 개념' 카테고리의 다른 글
  • 19. PLT & GOT
  • 16. Background: Library - Static Link vs. Dynamic Link
  • 15. Exploit Tech: Return to Shellcode
  • 14. Stack Canary
IgoYamewrong
IgoYamewrong
    반응형
    300x250
  • IgoYamewrong
    Yame-is-Wrong
    IgoYamewrong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 정보보안기사
      • 보안뉴스
      • 프로그래밍
        • 백준-파이썬
        • 프로그래머스-파이썬
        • DP
        • DFS,BFS
        • GREEDY
        • 개념
      • 안드로이드
      • Wargame
      • 웹 개념
      • 시스템 개념
      • 리버싱 개념
      • CTF
      • 프로젝트
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    pwntools
    케이쉴드주니어
    XSS
    location.href
    CTF
    wargame
    자료구조
    네트워크 스캐닝
    카나리 우회
    포너블
    DreamHack
    백준
    document.cookie
    mobsf
    코테
    드림핵
    programmers
    Python
    쿠키
    rao
    SECCON
    코딩테스트
    Web
    rao.c
    알고리즘
    syscall
    x86
    pwn
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
IgoYamewrong
18. NX 와 ASLR
상단으로

티스토리툴바