Core Concepts
커널 코드에서 공유 자원에 대한 동시 접근이 적절히 보호되지 않는 경우를 탐지하는 새로운 정적 분석 기법을 제안한다.
Abstract
이 논문은 커널 코드에서 발생할 수 있는 레이스 조건을 탐지하기 위한 새로운 정적 분석 기법을 제안한다.
주요 내용은 다음과 같다:
락 커버리지 분석: 코드 내 락 획득 및 해제 함수를 탐지하고, 각 필드 접근이 어떤 락으로 보호되는지 분석한다.
잠재적 락 규칙 추론: 필드 접근과 관련된 락 규칙을 추론한다. 이때 다수의 락이 필요할 수 있음을 고려한다.
규칙 위반 탐지 및 필터링: 추론된 락 규칙을 기반으로 코드 내 규칙 위반을 탐지하고, 문맥 정보와 휴리스틱을 활용하여 거짓 양성 결과를 줄인다.
이 기법은 기존 락셋 분석 기반 접근법과 달리, 필드 단위로 락 규칙을 추론하고 문맥 정보를 활용한다는 점에서 차별화된다. 리눅스 커널 5.14.11 버전에 대한 평가 결과, 기존 알려진 보안 취약점 11건 중 7건을 탐지할 수 있었다. 또한 새로운 잠재적 이슈 1,214건을 찾아냈으며, 이 중 257건을 실제 버그로 판단하였다.
Stats
락 보호 없이 필드에 접근하는 경우가 많은 것은 초기화 및 정리 코드에서 발생한다.
안전 함수 호출 시 락 보호가 필요 없는 경우가 많다.
락 검사 후 락 재획득 패턴은 의도적인 레이스 조건이다.
Quotes
"Race conditions are a class of bugs in software where con-
current accesses to shared resources are not protected from
each other."
"Consequences of race conditions include privilege
escalation, denial of service, and memory corruption which
can potentially lead to arbitrary code execution."