메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Control flow integrity

noriwiki
(CFI에서 넘어옴)


개요

Control flow integrity (CFI)는 컴퓨터 보안에서 flow of execution즉 코드의 실행에 관한 보안을 지칭한다.

Background

Control flow란 컴퓨터 프로그램에서 Decision을 나타낸다. 이러한 Control flow는 Direct, 즉 Address를 직접 참고 하여 실행 될 수 있거나, In-direct, 즉 Address에 대한 간접 참조로 접근하는 두 모델을 가르킨다. 대부분의 함수 콜에서 프로그램은 Direct call을 수행하고 Stack에 Return하는 함수의 콜 주소를 참조하여 다시 원래의 함수로 돌아온다. 그러나, 이 상황에서 Atacker는 프로그램 코드의 임의의 부분으로 점프할 수 있는 Return함수의 콜 스택을 변조를 시도할 수 있다. 이를 통하여 Attacker는 임의의 함수를 실행, 메모리를 탈취하거나, 권한없는 함수를 실행시킬 수 도 있다. 자세한 내용은 ROP참고.

주요 개념

Control flow graph (CFG)
CFI는 프로그램의 정상적인 실행 흐름을 나타내는 제어 흐름 그래프(CFG)를 생성하여, 프로그램이 실행 중에 이 CFG를 벗어나지 않도록 보장한다.
Verification
프로그램이 실행 중 특정 지점에서 수행할 수 있는 제어 흐름(예: 함수 호출, 반환)이 CFG에 정의된 범위 내에 있는지 확인한다.
Indirect Branch Protection
함수 포인터, 가상 함수 테이블(vtable), 반환 주소와 같이 공격자가 조작할 가능성이 있는 간접 제어 흐름을 보호한다.

이상, code-pointer separation, code-pointer integrity, stack canaries, shadow stacks, vtable pointer verification등등 다양한 기법들이 존재한다.