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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
CONFIG_INIT_ON_ALLOC_DEFAULT_ONโปรดดูรายละเอียดเพิ่มเติมใน README.md บั๊กนี้ถูกแพตช์แล้วในเดือนกุมภาพันธ์ 2024 และแนะนำให้อัปเดตอุปกรณ์ลินุกซ์sysctl kernel.unprivileged_userns_clone = 1ซึ่งเป็นค่าเริ่มต้นของเคอร์เนล Debian/Ubuntu และ Arch Linux หากไม่จำเป็นต้องใช้การตั้งค่านี้ ก็ควรปิดใช้งาน/boot/configหรือ/proc/config.gzCONFIG_INIT_ON_FREE_DEFAULT_ONสามารถป้องกัน exploit นี้ได้ แต่ดิสโทรต่าง ๆ ไม่ได้คอมไพล์เปิดไว้เป็นค่าเริ่มต้น ซึ่งเป็นตัวอย่างที่ดีว่าการ harden เคอร์เนลมีความสำคัญเพียงใด