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와 관련된 취약점을 이해하고 이를 익스플로잇하는 방법을 배울 수 있음.
- 제시된 익스플로잇 기술은 실제 환경에서의 보안 연구에 중요한 기여를 할 수 있으며, 이러한 기술을 통해 보안 전문가들은 시스템의 취약점을 더 잘 이해하고 방어할 수 있음.
- 하지만, 이러한 익스플로잇 기술이 악의적인 목적으로 사용될 가능성도 있어, 이를 공유함으로써 발생할 수 있는 윤리적 문제에 대해 고려해야 함.
- 리눅스 커널의 보안을 강화하기 위해 커뮤니티는 지속적으로 취약점을 발견하고 패치하는 작업을 수행해야 하며, 이 블로그 포스트는 그러한 노력의 일환으로 볼 수 있음.
- 이 기술이나 유사한 기술을 사용하여 보안 연구를 수행하는 경우, 연구자는 책임감 있는 공개 정책을 따르고 취약점이 널리 악용되기 전에 패치가 배포될 수 있도록 협력해야 함.