1 คะแนน โดย GN⁺ 2024-03-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

0. ก่อนอ่าน

  • บล็อกโพสต์นี้เขียนขึ้นสำหรับนักเดินทางข้ามเวลาในอนาคตที่ต้องการศึกษาช่องโหว่ของเคอร์เนลลินุกซ์ โดยตั้งใจให้ผู้เริ่มต้นได้เรียนรู้เวิร์กโฟลว์การวิจัย และให้นักวิจัยที่มีประสบการณ์ได้เรียนรู้เทคนิคใหม่ ๆ
  • บล็อกโพสต์มีรูปแบบคล้ายงานวิจัย จึงออกแบบมาให้แม้จะมีเนื้อหาปริมาณมาก ก็ยังสแกนอ่านและดึงความรู้ที่ต้องการได้ง่าย
  • วิธีอ่านบล็อกโพสต์นี้อย่างมีประสิทธิภาพที่แนะนำคือ อ่านส่วนภาพรวมก่อน จากนั้นแบ่งหน้าจอเพื่ออ่านและค้นหา ข้ามไปยังส่วนบั๊กเพื่อทำความเข้าใจการทำงานของบั๊ก แล้วค่อยผ่านส่วน proof of concept เพื่อดูการเอ็กซ์พลอยต์

1. ภาพรวม

  • บล็อกโพสต์นี้นำเสนอเทคนิคใหม่ในการเอ็กซ์พลอยต์บั๊ก 0-day แบบ double-free ที่ค้นพบใน nf_tables เพื่อโจมตีเคอร์เนลลินุกซ์ที่มีการเสริมการป้องกันแล้ว (เช่น อินสแตนซ์ที่มีการบรรเทาความเสี่ยงของ KernelCTF) ด้วยอัตราความสำเร็จ 93%-99%
  • การเอ็กซ์พลอยต์นี้ทำงานได้เฉพาะเมื่อเปิดใช้งาน nf_tables และเปิดใช้งาน user namespace แบบไม่มีสิทธิพิเศษเท่านั้น โดยจะทำ KSMA (Kernel-Space Mirroring Attack) ที่สะท้อนพื้นที่เคอร์เนลมายัง user space ราวกับเป็นกระจก
  • สามารถใช้เทคนิค Dirty Pagedirectory เพื่อให้ได้สิทธิ์อ่าน/เขียนแบบไม่จำกัดต่อ physical address ซึ่งทำได้ผ่านความสับสนของ page table

2. ข้อมูลพื้นฐาน

  • nf_tables เป็นหนึ่งในโมดูลภายในของเคอร์เนลลินุกซ์ และถูกใช้เป็นแบ็กเอนด์ของ iptables ในเวอร์ชันใหม่ ๆ
  • iptables เป็นเครื่องมือไฟร์วอลล์ที่ใช้ state machine และกฎที่ผู้ใช้กำหนด เพื่อพิจารณาว่าแพ็กเก็ตควรผ่านไฟร์วอลล์หรือไม่
  • Netfilter verdict คือผลการตัดสินของชุดกฎ Netfilter ว่าแพ็กเก็ตใดควรผ่านไฟร์วอลล์หรือไม่ โดยอาจตัดสินใจดรอปหรือยอมรับแพ็กเก็ต
  • โครงสร้าง sk_buff ใช้สำหรับอธิบายข้อมูลเครือข่าย (เช่น IP packet, Ethernet frame เป็นต้น) และอ็อบเจ็กต์ sk_buff->head จะเก็บเนื้อหาแพ็กเก็ตจริง
  • ฟีเจอร์ packet fragmentation ของ IPv4 ทำให้สามารถส่งแพ็กเก็ตเป็นหลาย IP fragment ได้ และเคอร์เนลลินุกซ์จะเก็บ fragment ทั้งหมดไว้ใน red-black tree เดียวกัน

GN⁺ ความเห็น

  • บล็อกโพสต์นี้ให้ข้อมูลที่มีประโยชน์อย่างมากสำหรับผู้ที่ต้องการศึกษาช่องโหว่ของเคอร์เนลลินุกซ์ โดยเฉพาะการทำความเข้าใจช่องโหว่ที่เกี่ยวข้องกับ nf_tables และวิธีเอ็กซ์พลอยต์มัน
  • เทคนิคการเอ็กซ์พลอยต์ที่นำเสนอสามารถมีส่วนสำคัญต่อการวิจัยด้านความปลอดภัยในสภาพแวดล้อมจริง และช่วยให้ผู้เชี่ยวชาญด้านความปลอดภัยเข้าใจช่องโหว่ของระบบและการป้องกันได้ดียิ่งขึ้น
  • อย่างไรก็ตาม เทคนิคการเอ็กซ์พลอยต์ลักษณะนี้ก็อาจถูกนำไปใช้ในทางประสงค์ร้ายได้ จึงควรพิจารณาประเด็นด้านจริยธรรมที่อาจเกิดจากการเผยแพร่ข้อมูลดังกล่าว
  • เพื่อเสริมความปลอดภัยของเคอร์เนลลินุกซ์ให้แข็งแกร่งยิ่งขึ้น ชุมชนจำเป็นต้องค้นหาและแพตช์ช่องโหว่อย่างต่อเนื่อง และบล็อกโพสต์นี้ก็ถือเป็นส่วนหนึ่งของความพยายามดังกล่าว
  • หากใช้เทคนิคนี้หรือเทคนิคที่คล้ายกันในการทำวิจัยด้านความปลอดภัย นักวิจัยควรยึดตามแนวทางการเปิดเผยอย่างมีความรับผิดชอบ และร่วมมือกันเพื่อให้แพตช์ถูกเผยแพร่ก่อนที่ช่องโหว่จะถูกนำไปใช้โจมตีในวงกว้าง

1 ความคิดเห็น

 
GN⁺ 2024-03-27
ความคิดเห็นจาก Hacker News
  • มีการเผยแพร่ proof-of-concept exploit สำหรับ CVE-2024-1086 แล้ว โดยได้รับผลกระทบคือเคอร์เนลลินุกซ์เวอร์ชัน v5.14 ถึง v6.6 และสำหรับ v6.4 ถึง v6.6 จะขึ้นอยู่กับตัวแปรการตั้งค่าเคอร์เนล CONFIG_INIT_ON_ALLOC_DEFAULT_ON โปรดดูรายละเอียดเพิ่มเติมใน README.md บั๊กนี้ถูกแพตช์แล้วในเดือนกุมภาพันธ์ 2024 และแนะนำให้อัปเดตอุปกรณ์ลินุกซ์
  • ในเนื้อหาแพตช์มีส่วนที่ย้อนกลับคอมมิตก่อนหน้าอยู่ด้วย และยังไม่ชัดเจนว่าคอมมิตนั้นถูกทำขึ้นมาทำไม จึงสงสัยว่ามีใครเคยขุดประวัติเรื่องนี้ไว้หรือไม่
  • exploit นี้อาศัยการเข้าถึง user namespace แบบ non-privileged: sysctl kernel.unprivileged_userns_clone = 1 ซึ่งเป็นค่าเริ่มต้นของเคอร์เนล Debian/Ubuntu และ Arch Linux หากไม่จำเป็นต้องใช้การตั้งค่านี้ ก็ควรปิดใช้งาน
  • เวลาเขียนบทความในบล็อกด้านความปลอดภัย มักต้องคิดอยู่เสมอว่าควรตั้งสมมติฐานเกี่ยวกับพื้นฐานความรู้ของผู้อ่านมากแค่ไหน การกำหนดกลุ่มผู้อ่านเป้าหมายและให้ข้อมูลพื้นฐานอย่างเพียงพอไม่ใช่เรื่องง่าย บทความนี้น่าจะเป็นแนวทางที่มีประโยชน์สำหรับผู้ที่เริ่มต้นทำวิจัย
  • มีการตั้งคำถามว่าทำไม user namespace แบบ non-privileged จึงถูกเปิดใช้งานเป็นค่าเริ่มต้น และทำไมจึงมอบความสามารถให้ผู้ใช้รันสิ่งอย่าง iptables ได้โดยปริยาย
  • มีข้อสงสัยว่า exploit ลักษณะนี้ยังเป็นไปได้อย่างไร ทั้งที่มีมาตรการความปลอดภัยสมัยใหม่อย่าง ASLR แล้ว จากการฝึกในหลักสูตรมหาวิทยาลัยที่ใช้ไบนารีซึ่งมีบั๊กหลากหลายชนิด ทำให้ได้สัมผัสว่าการพัฒนา exploit ในสภาพแวดล้อมจริงนั้นยากเพียงใด
  • มีคนลองรัน exploit บนระบบ Debian ที่มีช่องโหว่ แต่ไม่เกิดการยกระดับสิทธิ์ และในการรันครั้งที่สองระบบค้างไปทั้งหมด จึงยิ่งตอกย้ำว่าการแพตช์เป็นสิ่งสำคัญ
  • สามารถตรวจสอบการตั้งค่าเคอร์เนลปัจจุบันได้จากไฟล์ /boot/config หรือ /proc/config.gz
  • ตามข้อมูลของ Ubuntu ทุก LTS release ได้รับผลกระทบ และมีการแก้ไขแล้วในเคอร์เนลล่าสุดที่แพตช์แล้ว ส่วน Xenial และ Bionic เป็นข้อมูลสำหรับผู้ใช้ที่ได้รับการสนับสนุนแบบขยาย
  • CONFIG_INIT_ON_FREE_DEFAULT_ON สามารถป้องกัน exploit นี้ได้ แต่ดิสโทรต่าง ๆ ไม่ได้คอมไพล์เปิดไว้เป็นค่าเริ่มต้น ซึ่งเป็นตัวอย่างที่ดีว่าการ harden เคอร์เนลมีความสำคัญเพียงใด