분기 대상의 제한
잘못된 함수 포인터나 객체 타입 정보가 호출 대상을 바꾸는 문제를 제한하도록 검사한다. 어떤 호출과 변환을 검사하는지는 활성화한 방식에 달려 있다. 모든 분기와 메모리 접근을 동일한 규칙으로 검사하는 단일 기능으로 이해해서는 안 된다.
빌드 전체의 조건
Clang의 여러 CFI 방식은 링크 시간 최적화와 가시성 설정 등 빌드 구성을 요구한다. KCFI처럼 조건이 다른 방식도 있다. 일부 파일만 계측하거나 라이브러리 경계가 달라지면 보호 범위와 호환성이 달라질 수 있다.
실행 보안의 범위
검사 위반 시 실행을 중단하는 방식으로 잘못된 흐름을 제한할 수 있다. 그러나 허용된 호출을 악용하는 경우나 다른 종류의 오류까지 모두 막는 것은 아니다. 적용 범위와 외부 라이브러리 구성, 실제 성능 및 기능 결과를 함께 검토한다.
관련 문서
SafeStack / AddressSanitizer / Clang / LLD 링커