[시스템 해킹] 🔒 NX & ASLR

zzoni·2022년 8월 5일
0

시스템해킹

목록 보기
11/15

지난 시간에 배운 r2s!는
1. 반환 주소를 임의 주소로 덮을 수 있다
2. 버퍼의 주소를 알 수 있다.
3. 그 버퍼가 실행 가능하다.
위 세가지 이유 때문에 실행이 가능하다!

-> Attack surface를 줄이기 위해 보호기법이 추가로 도입되어야 한다.

  • 공격자가 메모리에서 임의 버퍼의 주소를 알기 어렵게 하고,
  • 메모리 영역에서 불필요한 실행 권한을 제거해야 한다!
    -> Address Space Layout Randomization(ASLR), No-execute(NX)



⭕ ASLR

Address Space Layout Randomization(ASLR)은 실행될 때마다 스택, 힙, 라이브러리 등 메모리를 랜덤 주소에 할당하는 보호 기법이다.

ASLR은 커널에서 지원하는 보호기법

  • return 값
    • No ASLR(0) : ASLR을 적용하지 않음
    • Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등
    • Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역
      • man brk : program break의 위치를 변경한다.
        program break는 프로세스의 데이터 세그먼트 끝을 규정.
        -> program break를 증가시키는 것은 프로세스에 메모리를 할당하는 효과를 가져온다!
  • 리눅스에서는 페이지 단위로 할당이 이루어진다. x86 운영체제에서 페이지의 크기는 4KB 즉, 2^12KB 이므로 32bit 중 12bit를 뺀 나머지 20bit로만 주소를 표현하기 때문에 20bit만 랜덤화 되고, 하위 12비트 주소는 ASLR의 영향을 받지 않는다.

⭕ NX

실행과 쓰기 메모리 영역 보호 기법
쓰기 권한 -> 코드 수정 가능
실행 권한 -> Return to Shellcode와 같은 공격 시도 가능

NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없다!

그러나....

스택, 힙, 데이터 영역은 보호가 잘 되는데,
바이너리의 코드가 존재하는 영역은 여전히 실행권한이 존재하며, 할당되는 주소도 고정되어 있다.

profile
모든 게시물은 다크모드에서 작성되었습니다!

0개의 댓글