[Dreamhack-system] Mitigation : NX & ASLR

박정원·2023년 5월 23일

보안공부

목록 보기
22/43

서론

요즈음 시스템 보안에서는 어떤 보호 기법이 등장하면 이를 우회하는 새로운 공격 기법이 등장하기에, 시스템 개발자들은 여러 겹의 보호 기법을 적용하여 시스템이 공격당할 수 있는 표면 자체를 줄여나가려고 했음

-> 따라서 시스템 개발자들은 Address Space Layout Randomization(ASLR)No-eXecute(NX)을 개발하고, 시스템에 적용하였음

ASLR

  • Address Space Layout Randomization(ASLR)은 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법임
  • 이때까지 어떠한 버퍼를 구할 때 주소가 바뀌었던 것도 ASLR이 적용되었기 때문임

ASLR의 특징

  • 코드 영역의 main함수를 제외한 다른 영역의 주소들은 실행될 때마다 변경됨 -> 실행될 때마다 주소가 변경되기 때문에 바이너리를 실행하기 전에 해당 영역들의 주소를 예측할 수 없음
  • 바이너리를 반복해서 실행해도 libc_base 주소 하위 12비트 값과 print 주소 하위 12비트 값은 변경되지 않음
  • libc_base와 printf의 주소 차이는 항상 같음; ASLR이 적용되면, 라이브러리는 임의 주소에 매핑되는데, 라이브러리 파일을 그대로 매핑하는 것이므로, 매핑한 주소로부터 라이브러리의 다른 심볼들 까지의 거리는 항상 같음

NX

  • No-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법임-> 어떤 메모리 영역에 대하여 쓰기 권한과 실행 권한이 같이 있으면 시스템이 취약해지기 쉽기 때문

  • CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여 받음 -> NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없는 것을 확인할 수 있고, NX가 적용되지 않은 바이너리에는 스택, 힙, 데이터 영역에 실행 권한이 존재하는 것을 확인할 수 있음

profile
보안, 프런트엔드 공부 중!

0개의 댓글