# 페이지 넘기기: nf_tables에서 발견된 새로운 리눅스 취약점 및 익스플로잇 기법

> Clean Markdown view of GeekNews topic #14012. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14012](https://news.hada.io/topic?id=14012)
- GeekNews Markdown: [https://news.hada.io/topic/14012.md](https://news.hada.io/topic/14012.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-27T09:55:23+09:00
- Updated: 2024-03-27T09:55:23+09:00
- Original source: [pwning.tech](https://pwning.tech/nftables/)
- Points: 1
- Comments: 1

## Topic Body

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

## Comments



### Comment 24038

- Author: neo
- Created: 2024-03-27T09:55:23+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39828424) 
- 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`은 익스플로잇을 방지하지만, 배포판에서는 기본적으로 빌드하지 않음. 커널의 강화가 얼마나 중요한지 보여주는 좋은 예임.
