[PATCH RFC RFT 0/5] fork: Support shadow stacks in clone3()
kernel.org
리눅스 6.6 에서 새도우 스택에 대한 지원 시작했습니다. 현재는 x86 아키텍처에 대한 지원만 하고 있는데, 많은 아키텍처로 구현되어져 나갈 듯 보입니다.
새도우 스택은 사용자 공간에서 실행되는 프로세스의 스택을 보호하기 위한 매커니즘으로 프로세스 호출 스택과 동일한 크기와 구조를 가지는 복사본(가상 스택)을 통하여 실제 쓰기 작업을 모니터링하고 악의적은 공격자에 의해서 스택이 오염되는 것을 방지할 수 있습니다. 즉, 스택오버플로우나 ROP (Return oriented programming) attack 을 방지할 수 있습니다. 다만, 실제 스택과 새도우 스택을 비교하는 것과 같은 모니터링에 대한 비용이 발생하여 성능이 저하될 수 있고, 구현은 복잡합니다.
리눅스에서 prctl(...) 호출을 통하여 새도우 스택을 생성하고 활성화할 수 있습니다.
현재의 구현에서
스레드가 생성될 때마다 일반 스택과 동일한 크기의 새로운 새도우 스택을 할당하는데, 스레드가 큰 스택으로 생성되어 그곳에 큰 데이터 배열이 저장될 수 있는데, 이것은 데이터의 크기만큼 공간 낭비로 이어질 수 있습니다. 단일 스레드라면 큰 문제가 없지만, 멀티스레드의 경우 각 스레드당 공간이 낭비되는 것입니다.
오히려 새도우 스택이 너무 작은 경우는 스레드가 더 이상 사용할 스택이 없을 경우 대체 스택을 사용하게 되는데, 이럴 경우 새도우 스택의 크기가 작기 때문에, 새도우 스택에 스택 오버플로우가 발생할 수 있습니다.
이러한 이유로 clone3(...) 함수에 새 스레드에 생성될 스택의 주소와 크기를 조정할 수 있는 기능이 추가되었습니다.
오래된 해커들은 해킹하기도 힘들어 보이네요. 🤪
https://lore.kernel.org/lkml/dc9a3dd544bbf859142c5582011a924b1c1bf6ed.camel@intel.com/T/
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 12월 22일 오전 1:58
코
... 더 보기우리는 성장이라는 단어를 좋아합니다.
특히 기업의 입장에서는 성장은 관리해야 할 필수 요소 중 하나죠.
최
... 더 보기이
... 더 보기