분리로 보호하기
안전하게 접근된다고 판단한 지역 변수와 반환 주소, 레지스터 저장 값 등을 별도 영역에 둔다. 나머지 객체는 다른 영역에 배치한다. 위험한 영역의 버퍼 오버플로가 보호 영역의 값을 바로 덮어쓰지 못하도록 구조를 바꾸는 방식이다.
저수준 코드와 호환성
스택 내부를 직접 다루는 코드와 일부 가비지 컬렉터 등은 별도의 조정이 필요할 수 있다. 여러 스택 영역에 대한 가정을 맞춰야 하기 때문이다. 신호 처리와 동적 라이브러리 등 지원 제약도 사용하는 도구 체인에서 확인한다.
보호 범위의 이해
스택 분리는 모든 메모리 오류를 찾아 보고하는 범용 검사와는 목적이 다르다. 성능 비용도 실제 코드와 구성에 따라 평가해야 한다. 보호된다고 판단한 영역과 남아 있는 공격 표면을 구분하고 다른 안전성 검사 및 방어와 함께 검토한다.
관련 문서
AddressSanitizer / HWAddressSanitizer / Control Flow Integrity / Clang