นักวิจัยจากทีม Google Project Zero เปิดตัว ล่าสุดผ่านบล็อกโพสต์ วิธีการใหม่ในการใช้ประโยชน์จากจุดอ่อน (CVE-2020-29661) ในการใช้งานตัวจัดการ ioctl TIOCSPGRP ของ Linux kernel tty ระบบย่อยตลอดจนกลไกการป้องกันโดยละเอียดที่สามารถบล็อกช่องโหว่เหล่านี้ได้
ได้ระบุไว้ในโพสต์ว่า ปัญหาเกิดจากข้อผิดพลาดในการตั้งค่าล็อคซึ่งนำไปสู่สภาวะการแย่งชิงในโค้ดของ /tty/tty_jobctrl.c ซึ่งใช้ในการสร้างเงื่อนไขในการเข้าถึงหน่วยความจำหลังจากเปิดตัว (ใช้หลังเลิกใช้) ซึ่งใช้ประโยชน์จากพื้นที่ของผู้ใช้ผ่านการจัดการกับ ioct- โดยการเรียก TIOCSPGRP
นอกจากข้อมูลที่เผยแพร่แล้วยัง มีการสาธิตการใช้ประโยชน์จากฟังก์ชัน เพื่อยกระดับสิทธิพิเศษใน Debian 10 พร้อมเคอร์เนล 4.19.0-13-amd64 และไม่ได้ตัดออกด้วยว่าอาจส่งผลกระทบต่อการแจกแจงแบบต่างๆ ซึ่งแน่นอนว่าเป็นการกระจายแบบอิงและมาจากเดเบียน
เทคนิคการแสวงหาผลประโยชน์ส่วนบุคคลและตัวเลือกการบรรเทาผลกระทบหลายอย่างที่ฉันอธิบายในที่นี้ไม่ใช่เรื่องใหม่ อย่างไรก็ตาม ฉันคิดว่ามันคุ้มค่าที่จะเขียนมันร่วมกันเพื่อแสดงให้เห็นว่าการบรรเทาผลกระทบต่างๆ โต้ตอบกับการใช้ประโยชน์จากช่องโหว่หลังเปล่าตามปกติได้อย่างไร
ข้อมูลโค้ดในบล็อกโพสต์นี้ที่เกี่ยวข้องกับการเจาะช่องโหว่นั้นนำมาจากเวอร์ชันก่อนหน้า 4.19.160 เนื่องจากนั่นคือสิ่งที่เคอร์เนล Debian เป้าหมายใช้ ข้อมูลโค้ดอื่นๆ บางส่วนมาจาก Linux mainline
ในขณะเดียวกัน ในบทความที่ตีพิมพ์ ไม่ได้เน้นที่เทคนิคการสร้างการหาประโยชน์จากการทำงานมากนัก แต่เน้นที่เครื่องมือต่างๆ มี ในเคอร์เนล เพื่อป้องกันตัวเอง ต่อช่องโหว่ดังกล่าว
สรุปคือผิดหวัง ดังที่ได้กล่าวมาแล้วว่าวิธีการต่างๆ เช่น การแบ่งส่วนหน่วยความจำในฮีปและการควบคุมการเข้าถึงหน่วยความจำหลังจากที่ปล่อยว่างนั้นไม่ได้ถูกนำไปใช้ในทางปฏิบัติ เนื่องจากจะนำไปสู่การลดประสิทธิภาพและการป้องกันตาม CFI (Control Flow Integrity) ซึ่งจะบล็อกการหาช่องโหว่ในภายหลัง ขั้นตอนของการโจมตี ต้องมีการปรับปรุง
อุปกรณ์ปลายทางชนิดพิเศษคือเทอร์มินัลเทียม ซึ่งใช้เมื่อคุณเปิดแอปพลิเคชันเทอร์มินัลในสภาพแวดล้อมแบบกราฟิกหรือเชื่อมต่อกับเครื่องระยะไกลผ่าน SSH เป็นต้น ในขณะที่อุปกรณ์ปลายทางอื่นๆ เชื่อมต่อกับฮาร์ดแวร์บางประเภท ปลายทั้งสองด้านของเทอร์มินัลปลอมจะถูกควบคุมโดยพื้นที่ของผู้ใช้ และเทอร์มินัลเทียมสามารถสร้างได้อย่างอิสระโดยพื้นที่ผู้ใช้ (ไม่มีสิทธิ์)
เมื่อใดก็ตามที่ / dev / ptmx ถูกเปิด (ย่อมาจาก "pseudo-terminal multiplexer") ตัวอธิบายไฟล์ที่เป็นผลลัพธ์จะแสดงถึงด้านอุปกรณ์ (ที่อ้างถึงในเอกสารและแหล่งที่มาของเคอร์เนลว่า -เทอร์มินัล.
อุปกรณ์ปลายทางที่เกี่ยวข้อง (ซึ่งปกติเชลล์เชื่อมต่อ) ถูกสร้างขึ้นโดยอัตโนมัติโดยเคอร์เนลภายใต้ / dev / pts / .
เมื่อพิจารณาถึงสิ่งที่อาจสร้างความแตกต่างในระยะยาว ให้เน้นที่การใช้ตัวแยกวิเคราะห์สแตติกขั้นสูงหรือการใช้ภาษาที่ปลอดภัยสำหรับหน่วยความจำ เช่น ภาษา Rust และ C พร้อมคำอธิบายประกอบเพิ่มเติม (เช่น C ที่พิสูจน์แล้ว) เพื่อสร้างตัวตรวจสอบสถานะ การล็อก วัตถุและตัวชี้ วิธีการป้องกันยังกล่าวถึงการเปิดใช้งานโหมด panic_on_oops ทำให้โครงสร้างเคอร์เนลเป็นแบบอ่านอย่างเดียวและจำกัดการเข้าถึงการเรียกระบบผ่านกลไกต่างๆ เช่น seccomp
ข้อผิดพลาดที่ทำให้เกิดปัญหา ได้รับการแก้ไขในเคอร์เนล Linux เมื่อวันที่ 3 ธันวาคมปีที่แล้ว. ปัญหา ปรากฏในเมล็ดก่อนเวอร์ชัน 5.9.13 แต่การแจกแจงส่วนใหญ่ได้แก้ไขปัญหาในการอัปเดตแพ็คเกจเคอร์เนลที่เสนอเมื่อปีที่แล้ว
มีการกล่าวถึงช่องโหว่ที่คล้ายกัน (CVE-2020-29660) ซึ่งพบพร้อมกันในการใช้งานการเรียก TIOCGSID ioctl แต่ถูกลบออกไปทุกที่
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม คุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.