링커, 로더, 실행 파일

메모리 페이지에 「쓰기 가능」과 「실행 가능」을 동시에 허용하지 않는(W^X, 쓰기와 실행의 분리) 것으로 막기 쉬워지는 공격은?

  1. A비밀번호를 무차별 대입으로 시도하는 공격
  2. B대량의 통신을 보내 서버를 멈추게 하는 공격
  3. C스택 등의 데이터 영역에 공격용 기계어를 써 넣고, 거기로 점프시켜 실행하게 하는 공격
정답과 해설 보기

정답: C. 스택 등의 데이터 영역에 공격용 기계어를 써 넣고, 거기로 점프시켜 실행하게 하는 공격

예전의 공격에서는 버퍼 오버플로로 스택에 기계어를 써 넣고, 복귀 주소를 그쪽으로 향하게 해 실행시키는 방법이 자주 쓰였습니다. CPU의 페이지 테이블에는 실행 금지 비트(NX 비트 등)가 있으며, OS가 스택, 힙, .data를 실행 금지로, .text를 쓰기 금지로 하면 이 방법은 쓸 수 없게 됩니다. JIT 컴파일러처럼 실행 중에 코드를 만드는 경우에는 쓰기와 실행 권한을 전환해서 사용합니다.

  • A. 비밀번호 무차별 대입은 메모리 권한과 관계가 없습니다.
  • B. 통신량에 의한 공격은 메모리 권한으로 막을 수 없습니다.
  • C. 올바릅니다. 쓸 수 있었던 장소는 실행할 수 없게 됩니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. Linux 공유 라이브러리에서 libfoo.so.1의 「.1」과 같은 soname의 버전 번호를 올리는 것은 일반적으로 어떤 경우인가?
  2. Linux에서 ldd 명령을 실행 파일에 사용하면 알 수 있는 것은?
  3. 주요 OS에서 사용하는 실행 파일 형식의 조합으로 올바른 것은?
  4. 재귀가 너무 깊어져 스택의 상한을 넘었을 때, Linux 등에서 일반적으로 일어나는 일로 올바른 것은?
  5. C 언어에서 초깃값을 쓰지 않은 지역 변수와 전역 변수의, 사용을 시작했을 때의 값에 대한 설명으로 올바른 것은?

이 분야의 비교