[논문 리뷰] Lockdown: Dynamic Control-Flow Integrity
Lockdown는 신뢰할 수 있는 런타임 로더에서 제공하는 기호 정보를 사용하여 런타임에 제어흐름 그래프를 재구성함으로써 기존 바이너리 전용 실행 파일에서 세밀한, 라이브러리 단위의 CFI를 구현하는 동적 Control-Flow Integrity(CFI) 메커니즘이다. 동적 바이너리 번역, 샤페로 스택 보호, 간접 제어 전달에 대한 모듈 인식 강제 수단을 통해 높은 보안성과 낮은 성능 오버헤드(32.49% 평균, SPEC CPU2006 기준)를 달성한다.
Applications written in low-level languages without type or memory safety are especially prone to memory corruption. Attackers gain code execution capabilities through such applications despite all currently deployed defenses by exploiting memory corruption vulnerabilities. Control-Flow Integrity (CFI) is a promising defense mechanism that restricts open control-flow transfers to a static set of well-known locations. We present Lockdown, an approach to dynamic CFI that protects legacy, binary-only executables and libraries. Lockdown adaptively learns the control-flow graph of a running process using information from a trusted dynamic loader. The sandbox component of Lockdown restricts interactions between different shared objects to imported and exported functions by enforcing fine-grained CFI checks. Our prototype implementation shows that dynamic CFI results in low performance overhead.
연구 동기 및 목표
- 메모리 손상과 제어흐름 탈취 공격에 취약한 기존 바이너리 전용 응용 프로그램의 보안 격차를 해소하기 위해.
- 소스 코드나 재컴파일 없이도 세밀하고 라이브러리 단위의 제어흐름 무결성(CFI)을 구현하기 위해.
- 런타임 정보를 활용하여 간접 호출, 점프, 리턴에 대해 엄격한 동적 CFI 정책을 적용하여 공격 표면을 줄이기 위해.
- 동적 로딩, 스레드, 공유 라이브러리를 지원하는 실제 환경에서 실용적이고 저비용의 보호를 제공하기 위해.
- 새로운 지표인 동적 평균 간접 대상 감소(DAIR)를 사용하여 CFI 강도를 경험적으로 평가하기 위해.
제안 방법
- 신뢰할 수 있는 동적 로더를 통해 共享 라이브러리와 실행 파일의 기호 테이블을 이용하여 런타임에 제어흐름 그래프를 동적으로 재구성한다.
- 모든 간접 제어 전달에 대해 세밀한 CFI 검사를 수행하기 위해 동적 바이너리 번역기(DBT)를 활용한다.
- 리턴 지향 프로그래밍(ROP) 공격으로부터 리턴 명령어를 보호하기 위해 샤페로 스택을 사용한다.
- 모듈 인식 기반 CFI 정책을 적용한다: 호출은 동일 모듈 내 유효한 함수 또는 다른 라이브러리에서 임포트된 함수로 제한된다.
- 비내보내기 콜백 함수, 예외, 尾再귀 패턴을 탐지하고 보호하기 위한 히우리스틱을 적용한다.
- 시스템 호출 정책 검사를 강제하고, 모든 신호가 DBT에 의해 가로채지 못하게 하여 신호 지향 프로그래밍 공격에 대비한다.
실험 결과
연구 질문
- RQ1재컴파일이나 정적 분석 없이도 기존 바이너리 전용 실행 파일에 대해 동적 CFI를 효과적으로 적용할 수 있는가?
- RQ2디버그 심볼이 있는지 여부에 따라 실제 바이너리에 적용했을 때 동적 CFI의 정밀도가 정적 CFI와 비교해 어떻게 되는가?
- RQ3실제 생산 환경에서 라이브러리 단위로 세밀한 CFI를 적용할 경우 성능 오버헤드는 어느 정도인가?
- RQ4제안된 DAIR 지표는 실제 응용 프로그램에서 시간이 지남에 따라 CFI 보호의 내구성과 얼마나 잘 반영되는가?
- RQ5소스 코드나 정밀한 재배치 정보 없이도 Lockdown이 ROP 및 기타 제어흐름 탈취 공격을 효과적으로 방지할 수 있는가?
주요 결과
- Lockdown는 SPEC CPU2006 벤치마크 세트에서 평균 32.49%의 성능 오버헤드를 기록하여 실용적인 타당성을 입증하였다.
- 동적 평균 간접 대상 감소(DAIR) 지표는 프로그램 종료 시 가능한 간접 대상 위치의 평균 99.71% 감소를 보여주며, 강력한 CFI 정밀도를 시사한다.
- 기호 정보가 누락된 스트립된 라이브러리에서도 Lockdown는 높은 CFI 강도를 유지하며 평균 95.39%의 DAIR를 기록하여 효과적이다.
- 샤페로 스택은 언제나 리턴 명령어 포인터를 보호함으로써 모든 ROP 공격을 효과적으로 방지한다.
- 모듈 기반 강제 수단 덕분에 유일하게 임포트된 함수나 내부 유효한 함수만 호출될 수 있어 공격 표면이 크게 감소한다.
- 기호 파일(예: Ubuntu 12.04.4에서 제공)의 사용은 CFI 정밀도를 향상시키며, 디버그 심볼이 존재할 경우 평균 DAIR가 99.71%에 도달한다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.