1P by neo 8달전 | favorite | 댓글 1개

0. 읽기 전에

  • 이 블로그 포스트는 리눅스 커널 취약점 연구를 하고자 하는 미래의 시간 여행자들을 위한 것으로, 초보자들이 연구 워크플로우를 배우고 경험 많은 연구자들이 새로운 기술을 배울 수 있도록 작성됨.
  • 블로그 포스트는 연구 논문 형식을 띠고 있어, 큰 분량에도 불구하고 쉽게 스캔하고 지식을 추출할 수 있도록 구성됨.
  • 블로그 포스트를 효율적으로 읽는 방법으로, 개요 섹션을 읽고, 화면을 나눠서 읽고 검색하며, 버그 섹션으로 건너뛰어 버그 작동 방식을 이해하고, 개념 증명 섹션을 거쳐 익스플로잇을 살펴보는 것이 제안됨.

1. 개요

  • 이 블로그 포스트에서는 nf_tables에서 발견된 0-day double-free 버그를 이용하여 강화된 리눅스 커널(예: KernelCTF 완화 인스턴스)을 93%-99%의 성공률로 익스플로잇하는 새로운 기술을 소개함.
  • 이 익스플로잇은 nf_tables가 활성화되어 있고 비특권 사용자 네임스페이스가 활성화된 상태에서만 작동하며, 사용자 영역에서 커널 공간을 거울처럼 반영하는 KSMA(커널-스페이스 미러링 어택)를 수행함.
  • Dirty Pagedirectory 기술을 사용하여 물리적 주소에 대한 무제한 읽기/쓰기 권한을 얻을 수 있으며, 이는 페이지 테이블 혼란을 통해 실현됨.

2. 배경 정보

  • nf_tables는 리눅스 커널의 인트리 모듈 중 하나로, 최근 버전의 iptables의 백엔드로 사용됨.
  • iptables는 방화벽 도구로, 패킷이 방화벽을 통과할지 결정하기 위해 상태 머신과 사용자가 지정한 규칙을 사용함.
  • Netfilter 판결은 특정 패킷이 방화벽을 통과할지에 대한 Netfilter 규칙 세트의 결정으로, 패킷을 드롭하거나 수락하는 등의 결정을 내림.
  • sk_buff 구조체는 네트워크 데이터(예: IP 패킷, 이더넷 프레임 등)를 설명하는 데 사용되며, sk_buff->head 객체는 실제 패킷 내용을 포함함.
  • IPv4의 패킷 분할 기능은 패킷을 여러 IP 조각으로 전송할 수 있게 해주며, 리눅스 커널은 모든 조각을 동일한 레드-블랙 트리에 저장함.

GN⁺의 의견

  • 이 블로그 포스트는 리눅스 커널의 취약점을 연구하고자 하는 사람들에게 매우 유용한 정보를 제공함. 특히 nf_tables와 관련된 취약점을 이해하고 이를 익스플로잇하는 방법을 배울 수 있음.
  • 제시된 익스플로잇 기술은 실제 환경에서의 보안 연구에 중요한 기여를 할 수 있으며, 이러한 기술을 통해 보안 전문가들은 시스템의 취약점을 더 잘 이해하고 방어할 수 있음.
  • 하지만, 이러한 익스플로잇 기술이 악의적인 목적으로 사용될 가능성도 있어, 이를 공유함으로써 발생할 수 있는 윤리적 문제에 대해 고려해야 함.
  • 리눅스 커널의 보안을 강화하기 위해 커뮤니티는 지속적으로 취약점을 발견하고 패치하는 작업을 수행해야 하며, 이 블로그 포스트는 그러한 노력의 일환으로 볼 수 있음.
  • 이 기술이나 유사한 기술을 사용하여 보안 연구를 수행하는 경우, 연구자는 책임감 있는 공개 정책을 따르고 취약점이 널리 악용되기 전에 패치가 배포될 수 있도록 협력해야 함.
Hacker News 의견
  • CVE-2024-1086에 대한 증명 개념 익스플로잇이 공개되었음. 리눅스 커널 v5.14부터 v6.6까지의 버전이 영향을 받으며, v6.4부터 v6.6까지는 CONFIG_INIT_ON_ALLOC_DEFAULT_ON 커널 설정 변수에 따라 다름. 자세한 정보는 README.md를 확인할 것. 해당 버그는 2024년 2월에 패치되었으며, 리눅스 기기 업데이트를 권장함.
  • 패치 내용 중 이전 커밋을 되돌리는 부분이 있으며, 해당 커밋이 왜 이루어졌는지 명확하지 않음. 이에 대한 역사를 파헤친 사람이 있는지 궁금함.
  • 이 익스플로잇은 비특권 사용자 네임스페이스에 대한 접근을 기반으로 함: sysctl kernel.unprivileged_userns_clone = 1. 이 설정은 Debian/Ubuntu 및 Arch Linux 커널의 기본값임. 해당 설정이 필요 없다면 비활성화하는 것이 좋음.
  • 보안 블로그 글 작성 시, 독자의 배경 지식을 얼마나 가정할지에 대한 지속적인 고민이 있음. 목표 독자를 정하고, 충분한 배경 정보를 제공하는 것은 쉽지 않은 일임. 이 글은 연구를 시작하는 이들에게 유용한 지침이 될 것임.
  • 기본적으로 비특권 사용자 네임스페이스가 활성화된 이유는 무엇인지, 사용자에게 iptables 등의 실행 능력을 기본적으로 부여하는 이유에 대한 의문 제기.
  • 현대의 보안 조치들, 예를 들어 ASLR 등이 있는데도 이러한 익스플로잇이 어떻게 가능한지에 대한 의문. 대학 과정에서 다양한 버그가 있는 바이너리를 이용한 실습을 통해, 실제 환경에서의 익스플로잇 개발이 얼마나 어려운지 경험함.
  • 취약한 Debian 시스템에서 익스플로잇을 실행해보았으나, 권한 상승은 일어나지 않았고, 두 번째 실행에서 시스템이 완전히 멈춤. 패치를 진행하는 것이 중요함.
  • 현재 커널 설정을 /boot/config 또는 /proc/config.gz 파일에서 확인할 수 있음.
  • 우분투에 따르면, 모든 LTS 릴리스에 영향을 미치며, 패치된 최신 커널에서는 수정됨. Xenial과 Bionic은 확장 지원을 받는 사용자들을 위한 정보임.
  • CONFIG_INIT_ON_FREE_DEFAULT_ON은 익스플로잇을 방지하지만, 배포판에서는 기본적으로 빌드하지 않음. 커널의 강화가 얼마나 중요한지 보여주는 좋은 예임.