ย้อนกลับ สิงหาคม 2564 พบแพตช์เริ่มต้นโดย Intel สำหรับ”FineIBT”สำหรับเคอร์เนล Linux โดยมุ่งหมายที่จะรวมเอาสิ่งที่ดีที่สุดของ Control-flow Enforcement Technology (CET) เข้ากับ Control Flow Integrity เพื่อเพิ่มการป้องกันความปลอดภัยของเคอร์เนลในลักษณะที่มีประสิทธิภาพ

ในปีที่ผ่านมา แพตช์ FineIBT ได้รับการอัปเดต และในสัปดาห์นี้ วิศวกรของ Intel Peter Zijlstra ได้ส่งแพตช์ FineIBT ล่าสุดสำหรับ Linux บทสรุปล่าสุดของเขาเกี่ยวกับงานควบคุมความสมบูรณ์ของโฟลว์การควบคุม FineIBT สำหรับ Linux ลงมาที่:

ใช้รูปแบบ CFI ทางเลือกที่ผสานทั้งลักษณะละเอียดของ kCFI แต่ยังใช้ประโยชน์จากเนื้อหยาบได้อย่างเต็มที่ ฮาร์ดแวร์ CFI ตามที่ IBT จัดหาให้

ในทางตรงกันข้าม:

kCFI เป็นรูปแบบ CFI ของซอฟต์แวร์ล้วนๆ และอาศัยความสามารถในการอ่านข้อความ โดยเฉพาะคำสั่ง *ก่อน* สัญลักษณ์เป้าหมาย และทำการตรวจสอบแฮช *ก่อน* ดำเนินการ โทร (มิฉะนั้นการควบคุมโฟลว์ถูกบุกรุกแล้ว)

FineIBT คือรูปแบบไฮบริดของซอฟต์แวร์และฮาร์ดแวร์ โดยการทำให้แน่ใจว่าทุกเป้าหมายของสาขาเริ่มต้นด้วยการตรวจสอบความถูกต้องของแฮช เป็นไปได้ที่จะวางการตรวจสอบความถูกต้องของแฮชหลังสาขา มีข้อดีหลายประการ:

o หลีกเลี่ยงการโหลด (แฮช) ไม่มีบันทึก; ไม่มีข้อกำหนด RX

o สถานะ IBT WAIT-FOR-ENDBR เป็นการหยุดเก็งกำไร โดยวางการตรวจสอบความถูกต้องของแฮชในคำสั่งทันทีหลังจากเป้าหมายของสาขามีหน้าต่างการเก็งกำไรน้อยที่สุดและทั้งหมดเป็นการป้องกันที่ทำงานได้กับ SpectreBHB

เห็นได้ชัดว่าแพตช์นี้อาศัย kCFI (อัปสตรีม) แต่ยิ่งไปกว่านั้น แพตช์ยังอาศัยการแพดดิ้งจากแพตช์การติดตามการโทรเชิงลึก (tip/x86/core) มันใช้ช่องว่างภายในนี้เพื่อวางการตรวจสอบความถูกต้องของแฮชในขณะที่ไซต์การโทรถูกเขียนใหม่เพื่อแก้ไขเป้าหมายทางอ้อมเป็น 16 ไบต์ที่ด้านหน้าของเป้าหมายเดิม ดังนั้นจึงตีบทนำใหม่นี้

โดยเฉพาะอย่างยิ่ง ไม่มีฮาร์ดแวร์ที่ต้องการการติดตามเชิงลึกของการโทร (Skylake) และรองรับ IBT (Tigerlake ขึ้นไป)

โค้ดนี้สร้างขึ้นจากการโทรล่าสุด การติดตามความลึกทำงานระหว่างทางไปยัง mainline Linux (น่าจะเป็น 6.2) ดูชุดโปรแกรมแก้ไขนี้สำหรับการสนทนาล่าสุดเกี่ยวกับ FineIBT รวมถึงการสนทนาบางส่วน เกี่ยวกับความปลอดภัยเพิ่มเติมที่จะต้องพิจารณา เราจะดูว่างาน FineIBT นี้นำไปสู่ที่ใดและหาก/เมื่อใดที่จะถูกเลือกโดยเคอร์เนล mainline