리눅스 리뷰 #4 리눅스 6.6 부터 새도우 스택에 대한 지원

리눅스 6.6 에서 새도우 스택에 대한 지원 시작했습니다. 현재는 x86 아키텍처에 대한 지원만 하고 있는데, 많은 아키텍처로 구현되어져 나갈 듯 보입니다.


새도우 스택은 사용자 공간에서 실행되는 프로세스의 스택을 보호하기 위한 매커니즘으로 프로세스 호출 스택과 동일한 크기와 구조를 가지는 복사본(가상 스택)을 통하여 실제 쓰기 작업을 모니터링하고 악의적은 공격자에 의해서 스택이 오염되는 것을 방지할 수 있습니다. 즉, 스택오버플로우나 ROP (Return oriented programming) attack 을 방지할 수 있습니다. 다만, 실제 스택과 새도우 스택을 비교하는 것과 같은 모니터링에 대한 비용이 발생하여 성능이 저하될 수 있고, 구현은 복잡합니다.


리눅스에서 prctl(...) 호출을 통하여 새도우 스택을 생성하고 활성화할 수 있습니다.


현재의 구현에서


  1. 스레드가 생성될 때마다 일반 스택과 동일한 크기의 새로운 새도우 스택을 할당하는데, 스레드가 큰 스택으로 생성되어 그곳에 큰 데이터 배열이 저장될 수 있는데, 이것은 데이터의 크기만큼 공간 낭비로 이어질 수 있습니다. 단일 스레드라면 큰 문제가 없지만, 멀티스레드의 경우 각 스레드당 공간이 낭비되는 것입니다.

  2. 오히려 새도우 스택이 너무 작은 경우는 스레드가 더 이상 사용할 스택이 없을 경우 대체 스택을 사용하게 되는데, 이럴 경우 새도우 스택의 크기가 작기 때문에, 새도우 스택에 스택 오버플로우가 발생할 수 있습니다.


이러한 이유로 clone3(...) 함수에 새 스레드에 생성될 스택의 주소와 크기를 조정할 수 있는 기능이 추가되었습니다.


오래된 해커들은 해킹하기도 힘들어 보이네요. 🤪


https://lore.kernel.org/lkml/dc9a3dd544bbf859142c5582011a924b1c1bf6ed.camel@intel.com/T/

[PATCH RFC RFT 0/5] fork: Support shadow stacks in clone3()

kernel.org

[PATCH RFC RFT 0/5] fork: Support shadow stacks in clone3()

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 12월 22일 오전 1:58

댓글 0

    함께 읽은 게시물

    혹시 Claude 나 cursor 등 AI 로 개발하실 때
    뭔가 AI 스러운 뻔한 디자인 때문에

    ... 더 보기

    LinkedIn

    www.linkedin.com

    LinkedIn


    실무에서 바로 쓰는 AI 챗봇 Safety 정책

    A

    ... 더 보기

    실무에서 바로 쓰는 AI 챗봇 Safety 정책 | CannotBeHidden

    CannotBeHidden |

    실무에서 바로 쓰는 AI 챗봇 Safety 정책 | CannotBeHidden

     • 

    저장 3 • 조회 383


    나는 종종 생산성을 올리기 위한 각종 개발 툴은 물론, 라이브러리나 소스 코드를 구매하기도 한다.


    소스 코드의 경우 실제로 써먹지 못하는 경우도 상당수 되긴 하지만, 그래도 구성이나 코드를 보면서 배우는게 있기 때문에 학습 비용이라고 생각하고 가끔 구매하는 편이다.


    ... 더 보기