섀도 스택(Shadow Stack)란?

함수를 호출할 때 복귀 주소의 복제를 일반 쓰기로는 변경할 수 없는 별도의 스택에도 두고, 함수에서 복귀할 때 일반 스택의 값과 비교하여 복귀 주소의 변조를 찾아내는 구조. 일치하지 않으면 예외를 일으켜 실행을 멈춘다. Intel의 CET(제어 흐름 강제 기술) 등에서 하드웨어가 지원하며, 스택 버퍼 오버플로를 이용하는 ROP 같은 공격을 어렵게 한다.

일본어 명칭: シャドウスタック

섀도 스택(Shadow Stack)은(는) 하드웨어 보안의 최신 동향 등 1개 분야의 연습 문제 2개에 나와요.

분야: 하드웨어 보안의 최신 동향

도전해 보기: 섀도 스택(Shadow Stack) 관련 문제

Intel의 CET(제어 흐름 강제 기술) 등에서 채택된 하드웨어 섀도 스택의 설명으로 올바른 것은?

  1. A스택의 내용을 일정 시간마다 비휘발성 메모리에 저장해 두고, 프로그램이 비정상 종료했을 때 그 내용으로부터 실행을 재개한다
  2. B함수의 지역 변수를 일반 스택과는 별도의 고속 메모리에 두어, 캐시 미스를 줄이고 함수 호출을 빠르게 한다
  3. C함수를 호출할 때 복귀 주소의 복제를 일반 쓰기로는 바꿀 수 없는 별도의 스택에도 두고, 복귀할 때 둘을 비교한다
정답과 해설 보기

정답: C. 함수를 호출할 때 복귀 주소의 복제를 일반 쓰기로는 바꿀 수 없는 별도의 스택에도 두고, 복귀할 때 둘을 비교한다

스택의 버퍼 오버플로 등으로 복귀 주소가 바뀌어 쓰이면, 함수에서 복귀할 때 공격자가 고른 위치로 실행이 옮겨 가 버립니다. 섀도 스택에서는 call 명령이 복귀 주소를 일반 스택과 섀도 스택 양쪽에 쌓고, ret 명령이 둘을 비교합니다. 섀도 스택의 페이지는 일반 스토어 명령으로는 쓸 수 없는 특별한 종류의 페이지이므로, 일반 스택을 바꿔 쓴 공격자도 복제까지는 바꿀 수 없으며, 일치하지 않으면 예외가 일어나 실행이 멈춥니다.

해설 속 섀도 스택(Shadow Stack)

섀도 스택(Shadow Stack)이(가) 나오는 문제 (2)

  1. Intel의 CET(제어 흐름 강제 기술) 등에서 채택된 하드웨어 섀도 스택의 설명으로 올바른 것은?
  2. 제어 흐름 무결성을 하드웨어로 지원하는 기능에 대해, 함수에서의 복귀를 보호하는 것과 함수 포인터 등에 의한 간접 호출이나 점프를 보호하는 것의 조합으로 올바른 것은?

관련 용어

복귀 주소(return address) 버퍼 오버플로(Buffer Overflow) 제어 흐름 무결성(Control-Flow Integrity) 함수 포인터(Function Pointer) 포인터 인증(PAC) KPTI Meltdown IOMMU DMA(직접 메모리 접근) 기밀 컴퓨팅(Confidential Computing)

용어집으로 돌아가기