본문으로 건너뛰기

© 2026 Molayo

arXiv논문2026. 06. 10. 11:47

Linux IOCTL Census: Linux 커널 제어 코드 표면(Control-Code Surface)에 대한 소스 기반 데이터베이스

요약

Linux 커널의 ioctl 시스템 호출을 통한 공격 표면을 분석하기 위해 소스 기반 데이터베이스인 Linux IOCTL Census를 제안합니다. libclang을 사용하여 명령 코드, 입력 싱크, 권한 게이트 등을 체계적으로 복구하고 구조화된 데이터를 제공합니다.

핵심 포인트

  • Linux 커널의 ioctl 핸들러를 광범위한 공격 표면으로 정의
  • libclang을 활용한 1,289개의 명령 코드 및 제어 입력 싱크 복구
  • 권한 게이트 유무에 따른 비특권 사용자 도달 범위 분석
  • 최근 22개의 in-tree ioctl CVE에 대한 백테스트 수행
  • Windows IOCTL Census와 호환되는 통합 스키마 설계

ioctl 시스템 호출 (system call)은 Linux의 범용 장치 제어 인터페이스입니다. 사용자 공간 (userspace) 프로그램은 장치 노드를 열고 드라이버에 숫자 명령 코드 (numeric command code)와 인자 버퍼 (argument buffer)를 전달하며, 드라이버는 하드웨어 구성, 상태 읽기, 또는 커널 내부로의 데이터 이동 등 해당 코드가 의미하는 바를 수행합니다. 드라이버들은 이러한 명령들을 수천 개씩 직접 정의하며, 커널 컨텍스트 (kernel context) 내에서 인자를 파싱합니다. 이로 인해 ioctl 핸들러 (handler)는 커널 내에서 가장 광범위하고 비균일한 로컬 공격 표면 (attack surface) 중 하나가 되었습니다. 검증되지 않은 인자 길이를 신뢰하는 핸들러는 커널 메모리를 경계 외 (out of bounds)에서 읽거나 쓸 수 있지만, 명령 공간 (command space)은 중앙 집중식으로 목록화되어 있지 않습니다.

본 논문에서는 해당 표면에 대한 소스 기반의 쿼리 가능한 인벤토리 (inventory)인 Linux IOCTL Census를 제시합니다. allmodconfig 빌드를 통해 169개의 서브트리 (subtrees)에 걸쳐 878개의 모듈을 컴파일하였으며, 커널 소스에 대한 단일 결정론적 libclang 패스 (pass)를 통해 586개의 ioctl 디스패치 엔트리 포인트 (dispatch entry points), 1,289개의 디코딩된 _IOC 명령 코드 (command codes), 3,583개의 제어 입력 싱크 (controlled-input sinks), 그리고 1,298개의 권한 게이트 (permission gates)를 복구하였습니다. 두 번째 패스에서는 커널 자체의 문서화된 위협 모델 (threat model)을 쿼리 가능한 컬럼 (column)으로 인코딩하여, 권한 게이트가 없는 (capability-ungated) ioctl 표면(이는 입증된 도달 범위라기보다 비특권 사용자의 도달 범위 상한선임)과 강력한 권한 게이트 (capability gate)에 의해 범위에서 제외되는 부분을 분리하였습니다. 우리는 최근 22개의 인트리 (in-tree) ioctl CVE에 대해 이 센서스를 백테스트 (backtest)하였으며, 구조적 계층 (structural tier)을 오픈 데이터로 공개합니다. 이는 동반 프로젝트인 Windows IOCTL Census와 공유되는 스키마를 사용하여 단일 쿼리로 두 운영 체제를 모두 아우를 수 있도록 설계되었습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0