위키득계정 ↗
기술

Control Flow Integrity

Control Flow Integrity기술
약칭
CFI
분류
제어 흐름 보호
검사 예
간접 호출과 가상 호출
구성 조건
검사 방식별로 다름
Control Flow Integrity는 프로그램의 제어 흐름이 허용한 대상과 규칙을 벗어나지 않도록 검사하는 방어 기법이다. Clang은 간접 호출과 일부 타입 변환 등에 대한 여러 검사 방식을 제공한다.

분기 대상의 제한

잘못된 함수 포인터나 객체 타입 정보가 호출 대상을 바꾸는 문제를 제한하도록 검사한다. 어떤 호출과 변환을 검사하는지는 활성화한 방식에 달려 있다. 모든 분기와 메모리 접근을 동일한 규칙으로 검사하는 단일 기능으로 이해해서는 안 된다.

빌드 전체의 조건

Clang의 여러 CFI 방식은 링크 시간 최적화와 가시성 설정 등 빌드 구성을 요구한다. KCFI처럼 조건이 다른 방식도 있다. 일부 파일만 계측하거나 라이브러리 경계가 달라지면 보호 범위와 호환성이 달라질 수 있다.

실행 보안의 범위

검사 위반 시 실행을 중단하는 방식으로 잘못된 흐름을 제한할 수 있다. 그러나 허용된 호출을 악용하는 경우나 다른 종류의 오류까지 모두 막는 것은 아니다. 적용 범위와 외부 라이브러리 구성, 실제 성능 및 기능 결과를 함께 검토한다.

관련 문서

SafeStack / AddressSanitizer / Clang / LLD 링커