SHSTK, IBT 보안 기법
한줄 요약 : SHSTK, IBT는 CTF나 Wargame에서는 작동 안하니 걱정하지 않아도 된다.
오늘은 dreamhack 문제를 풀다 막혀서 시간을 땅바닥에 버린 주범인 SHSTK, IBT 보호 기법에 대해 연구해보았다.
https://dreamhack.io/wargame/challenges/2681
Magix Box라는 문제를 푸는 과정에서 바이너리를 checksec얼 확인을 하니 SHSTK, IBT기술이 활성화된 것을 보았다. 해당 내용에 대해 AI를 통해 간단히 조사하니 ROP공격을 무력화하는 보호기법이라고 알게되었다. 그래서 ROP공격을 배제하고 취약점을 찾다보니 취약점이 찾아질리가있나 ㅜ.ㅜ
SKSTK란 Shadow Stack의 약자로 ROP공격을 방어하기 위한 “하드웨어” 기반 보안 기술이다. 하드웨어라는 것이 굉장히 중요한데 Intel 11세대 이상의 하드웨어에서만 지원한다. 해당 사양이 안되는 타 CPU나 11세대 미만의 CPU는 해당 보안 기술이 적용되지 않는다.
작동원리는 다음과 같다. 먼저 CALL 명령이 실행될때 Return 주소를 기존 스택뿐만 아니라 특수 전용 스택(쉐도우스택)에 저장하고 SSP라는 특수 레지스터로 쉐도우스택을 관리한다. 쉐도우스택에 저장된 Return 주소는 RET 명령이 실행될때 기존 스택에 담긴 주소와 비교하여 서로 다르다면 예외처리를 반환하게 된다.
IBT란 Indirect Branch Tracking의 약자로 얘도 최신 하드웨어에서만 지원하는 보안 기술이다. IBT기술의 작동원리는 다음과 같다. 먼저 ENDBR64, ENDBR32라는 명령어를 함수의 프롤로그의 앞에 붙인다. 그리고 해당 함수로 올 수 있게하는 명령어인 CALL, JMP등의 분기 명령어들이 실행된다면 (간접 분기라는 조건이 있음) 반드시 도착지점에는 ENDBR64, ENDBR32가 있어야 하고 없다면 함수의 중간으로 이동한 것으로 보고 예외처리를 발생시킨다.
여러분들은 나와 같이 삽질하지를 않길 바라는 마음에서 이 글을 쓴다…