1P by neo 1달전 | favorite | 댓글과 토론

CVE-2023-2163: eBPF Linux 커널 취약점 발견 및 수정

배경

  • eBPF는 복잡한 커널 모듈 작성 없이 런타임에 Linux 커널의 기능을 확장할 수 있는 기술임.
  • eBPF 프로그램은 특정 이벤트 발생 시 실행되며, 로드되기 전에 안전성을 검증받아야 함.
  • 검증기(verifier)는 복잡한 코드로 구성되어 있으며, 많은 취약점이 발견됨.
  • Google은 eBPF 검증기를 자동으로 감사하는 퍼저(fuzzer)인 Buzzer를 개발함.

Buzzer 포인터 산술 전략

  • Buzzer는 eBPF를 위한 새로운 퍼저로, 논리적 버그를 유발하려는 전략을 사용함.
  • 포인터 산술 전략은 다음과 같은 단계로 구성됨:
    1. 레지스터를 임의의 값으로 초기화하는 헤더 생성
    2. 임의의 산술 및 점프 명령어 생성
    3. 임의의 레지스터를 선택하고 eBPF 맵 요소에 대한 포인터와 더하기 연산 수행
    4. 해당 요소에 매직 값을 씀

eBPF 경로 가지치기

  • eBPF 검증기는 프로그램이 안전하게 실행될 수 있는지 확인하는 역할을 함.
  • 조건문이 있을 때 모든 가능한 상태를 시뮬레이션함.
  • 많은 조건부 점프가 있는 경우 경로 가지치기 전략을 사용하여 성능을 향상시킴.

버그

  • CVE-2023-2163은 "정확한 추적" 개념을 도입하여 경로 가지치기를 더 효율적으로 만듦.
  • 버그는 r9 레지스터가 r6의 정확성에 기여하는 것을 간과함으로써 발생함.

익스플로잇

  • CVE-2023-2163을 악용하여 임의의 읽기/쓰기를 달성하고, LPE 및 컨테이너 탈출을 수행함.
  • 주요 단계:
    1. 임의의 읽기/쓰기 달성
    2. 프로세스 자격 증명을 찾고 권한을 상승시킴

수정

  • CVE-2023-2163을 수정하기 위해 정확한 레지스터에 영향을 미치는 연산에서 부정확한 레지스터를 정확하게 표시함.
  • 성능에 미치는 영향은 불분명하지만, 추가 문제는 발견되지 않음.

향후 아이디어

  • eBPF 프로그램의 안전성을 보장하는 것은 검증 과정의 복잡성 때문에 어려움.
  • Google은 Buzzer를 통해 이 문제를 해결하고 있으며, 오픈 소스 커뮤니티의 기여를 환영함.

GN⁺의 정리

  • 이 글은 eBPF 검증기의 취약점을 발견하고 수정하는 과정을 설명함.
  • eBPF는 커널 보안 연구에서 중요한 기술로, 안전성을 보장하는 것이 어려움.
  • Google은 Buzzer라는 퍼저를 개발하여 eBPF 검증기의 취약점을 자동으로 감사함.
  • 이 글은 보안 연구자와 개발자에게 유용하며, eBPF와 같은 복잡한 시스템의 안전성을 보장하는 데 도움이 됨.
  • 유사한 기능을 가진 프로젝트로는 eBPF와 관련된 다른 퍼저 도구들이 있음.