1 điểm bởi GN⁺ 2024-03-27 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-03-27
Ý kiến trên Hacker News
  • Đã công bố mã khai thác proof-of-concept cho CVE-2024-1086. Các phiên bản Linux kernel từ v5.14 đến v6.6 bị ảnh hưởng, còn v6.4 đến v6.6 thì phụ thuộc vào biến cấu hình kernel 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.
  • Trong bản vá có phần hoàn tác một commit trước đó, nhưng không rõ vì sao commit đó được thực hiện. Tò mò không biết có ai đã lần theo lịch sử này chưa.
  • Mã khai thác này dựa trên quyền truy cập vào user namespace không đặc quyền: 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ó.
  • Khi viết bài blog về bảo mật, luôn phải cân nhắc nên giả định độc giả có bao nhiêu kiến thức nền. Việc xác định độc giả mục tiêu và cung cấp đủ thông tin nền không hề dễ. Bài viết này sẽ là một chỉ dẫn hữu ích cho những ai bắt đầu nghiên cứu.
  • Đặt câu hỏi vì sao user namespace không đặc quyền lại được bật theo mặc định, và vì sao người dùng mặc định được trao khả năng chạy những thứ như iptables.
  • Thắc mắc làm sao các mã khai thác như vậy vẫn khả thi dù đã có những biện pháp bảo mật hiện đại như ASLR. Qua các bài thực hành ở đại học với nhiều binary có lỗi khác nhau, đã có trải nghiệm rằng việc phát triển khai thác trong môi trường thực tế khó đến mức nào.
  • Đã thử chạy mã khai thác trên một hệ thống Debian dễ bị tấn công, nhưng không xảy ra leo thang đặc quyền, và ở lần chạy thứ hai thì hệ thống bị treo hoàn toàn. Việc vá lỗi là rất quan trọng.
  • Có thể kiểm tra cấu hình kernel hiện tại trong các tệp /boot/config hoặc /proc/config.gz.
  • Theo Ubuntu, tất cả các bản phát hành LTS đều bị ảnh hưởng, và đã được sửa trong các kernel mới nhất đã vá. Xenial và Bionic là thông tin dành cho những người dùng đang nhận hỗ trợ mở rộng.
  • CONFIG_INIT_ON_FREE_DEFAULT_ON ngă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.