섀도 스택
Shadow stack컴퓨터 보안에서 섀도 스택은 스택 버퍼 오버플로로부터 프로시저의 저장된 반환 [1]주소를 보호하는 메커니즘입니다.섀도 스택 자체는 프로그램콜 스택을 '섀도'하는 두 번째 개별 스택입니다.함수 프롤로그에서 함수는 콜스택과 섀도스택 양쪽에 리턴 주소를 격납한다.함수 에필로그에서는 함수가 콜스택과 섀도스택 양쪽에서 리턴 주소를 로드하여 비교한다.리턴 주소의 2개의 레코드가 다른 경우는 공격이 검출됩니다.일반적인 대처 방법은 프로그램을 종료하거나 시스템 관리자에게 침입 시도 가능성을 경고하는 것입니다.섀도 스택은 두 메커니즘 모두 공격 시도 중에 공격자가 저장된 리턴 주소를 변조하는 공격을 탐지하여 보호된 프로그램의 제어 흐름 무결성을 유지하는 것을 목표로 한다는 점에서 스택 카나리아와 유사합니다.
섀도 스택은 수정된 프롤로그와 [2]에필로그를 사용하여 프로그램을 다시 컴파일하거나 동일한 [3]효과를 얻기 위한 동적 이진 재작성 기술을 사용하거나 하드웨어 [4]지원을 통해 구현할 수 있습니다.로컬 프로그램 변수, 전달된 인수, 유출된 레지스터 및 기타 데이터를 저장하는 콜 스택과는 달리 섀도 스택은 일반적으로 함수의 반환 주소의 두 번째 복사본을 저장합니다.
섀도 스택은 canari 값의 기밀성에 의존하여 연속되지 않은 [5]쓰기 공격에 취약한 스택 카나리아보다 리턴 주소를 더 잘 보호합니다.섀도 스택 자체는 가드 페이지[6] 또는 정보를 숨긴 상태로 보호할 수 있으므로 공격자는 섀도 스택에 저장된 반환 주소를 덮어쓸 필요도 있습니다.
스택 카나리아와 마찬가지로 섀도 스택은 리턴 주소 이외의 스택 데이터를 보호하지 않으므로 메모리 안전 오류로 인한 보안 취약성에 대한 불완전한 보호를 제공합니다.
2016년에 인텔은 Control-Flow Enforcement [7]Technology에 의한 섀도 스택의 하드웨어 지원을 발표했습니다.
섀도 스택에는 호환성 문제가 몇 가지 있습니다.프로그램에서 예외가 발생하거나 longjmp가 발생하면 섀도스택 상단의 리턴 주소는 콜스택에서 팝된 리턴 주소와 일치하지 않습니다.이 문제의 일반적인 해결책은 일치하는 리턴 주소가 발견될 때까지 섀도 스택에서 엔트리를 팝하고 섀도 [3]스택에서 일치하는 주소가 발견되지 않을 때만 프로그램을 종료하는 것입니다.
실행 스레드마다 콜스택이 있는 멀티스레드 프로그램에는 각 콜스택을 섀도우로 하는 섀도우 스택도 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Delshadtehrani, Leila; Eldridge, Schuyler; Canakci, Sadullah; Egele, Manuel; Joshi, Ajay (2018-01-01). "Nile: A Programmable Monitoring Coprocessor". IEEE Computer Architecture Letters. 17 (1): 92–95. doi:10.1109/LCA.2017.2784416. ISSN 1556-6056.
- ^ "StackShield: A "stack smashing" technique protection tool for Linux". Vendicator.
- ^ a b Sinnadurai, Saravanan; Zhao, Qin; Wong, Weng Fai (2008). "Transparent runtime shadow stack: Protection against malicious return address modifications" (PDF).
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Ozdoganoglu, H.; Brodley, C.; Vijaykumar, T.; Kuperman, B. (2002). "SmashGuard: A Hardware Solution To Prevent Attacks on the Function Return Address" (PDF).
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Szekeres, Laszlo; Payer, Mathias; Wei, Tao; Song, Dawn. "SoK: Eternal War in Memory" (PDF).
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Chieuh, Tzi-cker; Hsu, Fu-Hau (2001). "RAD: A Compile-Time Solution To Buffer Overflow Attacks". Proceedings 21st International Conference on Distributed Computing Systems. pp. 409–417. doi:10.1109/ICDSC.2001.918971. ISBN 0-7695-1077-9. S2CID 32026510.
- ^ "Control-flow Enforcement Technology Preview" (PDF). Intel Corporation.