วิธีการตรวจสอบว่าเคอร์เนล Linux เปิดใช้งาน“ Retpoline” หรือไม่


17

สำหรับช่องโหว่ด้านความปลอดภัย "Spectre" นั้นมีการแนะนำ "Retpoline" เพื่อเป็นวิธีการลดความเสี่ยง อย่างไรก็ตามฉันได้อ่านโพสต์ที่กล่าวถึง:

หากคุณสร้างเคอร์เนลโดยไม่มีCONFIG_RETPOLINEคุณจะไม่สามารถสร้างโมดูลที่มี retpoline และคาดหวังให้โหลด - เนื่องจากสัญลักษณ์ thunk ไม่ได้ถูกส่งออก

หากคุณสร้างเคอร์เนลด้วย retpoline คุณสามารถโหลดโมดูลที่ไม่ได้สร้างด้วย retpoline ได้สำเร็จ ( ที่มา )

มีวิธีที่ง่ายและธรรมดา / ทั่วไป / แบบครบวงจรในการตรวจสอบว่าเคอร์เนล "Retpoline" เปิดใช้งานหรือไม่? ฉันต้องการทำสิ่งนี้เพื่อให้ผู้ติดตั้งของฉันสามารถใช้งานบิลด์โมดูลของเคอร์เนลที่จะติดตั้งได้

คำตอบ:


21

หากคุณใช้เคอร์เนล mainline หรือการกระจายหลักของเมล็ดวิธีที่ดีที่สุดในการตรวจสอบการสนับสนุน retpoline แบบเต็ม ( เช่นเคอร์เนลได้รับการกำหนดค่าด้วยCONFIG_RETPOLINEและถูกสร้างขึ้นด้วยคอมไพเลอร์ที่มีความสามารถ retpoline) คือมองหา ” /sys/devices/system/cpu/vulnerabilities/spectre_v2ใน ในระบบของฉัน:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

หากคุณต้องการการทดสอบที่ครอบคลุมมากขึ้นในการตรวจสอบ retpolines ในเมล็ดที่ไม่มีspectre_v2ไฟล์ systree ให้ตรวจสอบว่าspectre-meltdown-checkerจะทำอย่างไร


2
เพื่อตรวจสอบการล่มสลาย / ช่องโหว่ที่น่ากลัวอื่น ๆ ที่เกี่ยวข้องเช่นกันวิ่ง$ grep . /sys/devices/system/cpu/vulnerabilities/*ซึ่งเป็นข้อเสนอแนะในบล็อกของเกร็ก Kroah-ฮาร์ทแมน
อเล็กซ์ Vong

1
ขอบคุณ @Alex; ฉันกำลังตอบคำถามเฉพาะ แต่มีประโยชน์แม้ว่าฉันจะชอบhead /sys/devices/system/cpu/vulnerabilities/*ตัวเอง ;-) ขณะนี้ครอบคลุมช่องโหว่ของ Meltdown / Specter แต่ควรครอบคลุมช่องโหว่ในอนาคตที่มีลักษณะคล้ายคลึงกัน (เนมสเปซนั้นมีวัตถุประสงค์ทั่วไป)
Stephen Kitt

@StephenKitt ใช่headให้ผลการจัดรูปแบบที่ดีกว่า
อเล็กซ์ Vong

4

คำตอบของ Stephen Kitt นั้นครอบคลุมมากขึ้นในกรณีเฉพาะนี้เนื่องจากการสนับสนุน retpoline ยังต้องการคอมไพเลอร์เวอร์ชันใหม่

แต่โดยทั่วไปการแจกแจงส่วนใหญ่จะมีไฟล์การกำหนดค่าเคอร์เนลอยู่ในตำแหน่งใดตำแหน่งหนึ่งต่อไปนี้:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

จากนั้นคุณก็สามารถ zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz


4
ฉันแนะนำให้ต่อต้านการใส่จาระบีเข้าไป/boot/config*เพราะอาจพบCONFIG_RETPOLINEในภาพเคอร์เนลที่ติดตั้ง แต่ไม่ได้ทำงานอยู่ในขณะนี้ทำให้รู้สึกถึงความปลอดภัยผิด ๆ การตรวจสอบ/proc/config.gzหรือ/sys/...มีความปลอดภัย แต่ลีนุกซ์หลายรุ่นสามารถรวบรวมเคอร์เนล/proc/config.gzได้
pts

คุณสามารถทำให้ตรรกะฉลาดขึ้นเล็กน้อยและใช้ uname (หรือเทียบเท่า syscall) เพื่อให้ได้เคอร์เนลที่ใช้งานอยู่ในปัจจุบันและตรวจสอบไฟล์ / boot / config ที่เฉพาะเจาะจงหรือไม่
Adam Luchjenbroers

@pts งั้น/boot/config-$(uname -r)เหรอ?
muru

2
การใช้/boot/config-$(uname -r)ไม่ได้เป็นเรื่องโง่ ๆ แต่ก็ยังไม่รับประกันว่า config จะตรงกับเคอร์เนลที่กำลังรันอยู่ เมล็ด Distro ยังคงเหมือนเดิมuname -rในหลาย ๆ เวอร์ชันตราบใดที่เคอร์เนล ABI ไม่เปลี่ยนแปลง
Stephen Kitt

ขอบคุณสำหรับคำตอบของคุณ คำตอบและข้อความของคุณมีประโยชน์
Weishan Yang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.