0. Trước khi đọc
- Bài viết blog này dành cho những “nhà du hành thời gian” trong tương lai muốn nghiên cứu lỗ hổng kernel Linux, được viết để người mới có thể học quy trình nghiên cứu và các nhà nghiên cứu giàu kinh nghiệm có thể học thêm kỹ thuật mới.
- Bài blog mang hình thức của một bài nghiên cứu, nên dù dung lượng lớn vẫn được cấu trúc để dễ quét đọc và trích xuất kiến thức.
- Cách đọc hiệu quả được đề xuất là đọc phần tổng quan, chia màn hình để vừa đọc vừa tìm kiếm, nhảy đến phần lỗi để hiểu cách lỗi hoạt động, rồi qua phần chứng minh khái niệm để xem khai thác.
1. Tổng quan
- Trong bài blog này, tác giả giới thiệu một kỹ thuật mới để khai thác lỗi double-free 0-day được phát hiện trong nf_tables nhằm tấn công kernel Linux đã được tăng cường bảo vệ (ví dụ: các instance giảm thiểu của KernelCTF) với tỷ lệ thành công 93%-99%.
- Khai thác này chỉ hoạt động khi nf_tables được bật và user namespace không đặc quyền được kích hoạt, đồng thời thực hiện KSMA (Kernel-Space Mirroring Attack) để phản chiếu không gian kernel sang user space như một tấm gương.
- Bằng cách sử dụng kỹ thuật Dirty Pagedirectory, có thể giành được quyền đọc/ghi không giới hạn đối với địa chỉ vật lý, được hiện thực thông qua sự nhầm lẫn trong page table.
2. Thông tin nền
nf_tables là một trong các module in-tree của kernel Linux và được dùng làm backend cho iptables trong các phiên bản gần đây.
iptables là một công cụ tường lửa, sử dụng state machine và các quy tắc do người dùng chỉ định để quyết định liệu các gói tin có được phép đi qua tường lửa hay không.
- Phán quyết Netfilter là quyết định của một bộ quy tắc Netfilter về việc một gói tin cụ thể có được đi qua tường lửa hay không, chẳng hạn như thả hoặc chấp nhận gói tin.
- Cấu trúc
sk_buff được dùng để mô tả dữ liệu mạng (ví dụ: gói IP, khung Ethernet, v.v.), còn đối tượng sk_buff->head chứa nội dung gói tin thực tế.
- Tính năng phân mảnh gói tin của IPv4 cho phép truyền một gói tin thành nhiều mảnh IP, và kernel Linux lưu tất cả các mảnh trong cùng một cây đỏ-đen.
Ý kiến của GN⁺
- Bài blog này cung cấp thông tin rất hữu ích cho những ai muốn nghiên cứu lỗ hổng trong kernel Linux. Đặc biệt, người đọc có thể hiểu các lỗ hổng liên quan đến nf_tables và học cách khai thác chúng.
- Kỹ thuật khai thác được trình bày có thể đóng góp quan trọng cho nghiên cứu bảo mật trong môi trường thực tế, và thông qua đó các chuyên gia bảo mật có thể hiểu rõ hơn các điểm yếu của hệ thống để phòng vệ tốt hơn.
- Tuy nhiên, các kỹ thuật khai thác như vậy cũng có thể bị sử dụng cho mục đích xấu, vì thế cần cân nhắc các vấn đề đạo đức có thể phát sinh khi chia sẻ chúng.
- Để tăng cường bảo mật cho kernel Linux, cộng đồng cần liên tục phát hiện và vá lỗ hổng, và bài blog này có thể được xem là một phần của nỗ lực đó.
- Nếu tiến hành nghiên cứu bảo mật bằng kỹ thuật này hoặc các kỹ thuật tương tự, nhà nghiên cứu nên tuân thủ chính sách công bố có trách nhiệm và phối hợp để bản vá có thể được phát hành trước khi lỗ hổng bị khai thác rộng rãi.
1 bình luận
Ý kiến trên Hacker News
CONFIG_INIT_ON_ALLOC_DEFAULT_ON. Xem README.md để biết chi tiết. Lỗi này đã được vá vào tháng 2 năm 2024, và nên cập nhật các thiết bị Linux.sysctl kernel.unprivileged_userns_clone = 1. Đây là giá trị mặc định trong kernel của Debian/Ubuntu và Arch Linux. Nếu không cần thiết lập này thì nên vô hiệu hóa nó./boot/confighoặc/proc/config.gz.CONFIG_INIT_ON_FREE_DEFAULT_ONngăn được mã khai thác, nhưng các bản phân phối thường không build tùy chọn này theo mặc định. Đây là một ví dụ tốt cho thấy việc hardening kernel quan trọng đến mức nào.