Project Zero รายงานค่าสุ่มของลินุกซ์ช่วงเริ่มบูตไม่ปลอดภัย เป็นหนักในรุ่น 4.14 ขึ้นมา

by lew
2 May 2018 - 12:32

Project Zero วิเคราะห์ระบบสร้างค่าสุ่มของเคอร์เนลลินุกซ์ และพบว่าอ่อนแอกว่าที่ออกแบบไว้อย่างมากเมื่อผู้ใช้เริ่มขอค่าสุ่มตั้งแต่ระบบเริ่มบูตใหม่ๆ

ปัญหาหนึ่งคือมีการล้างค่าเริ่มต้นการสุ่มออกเมื่อเริ่มต้นระบบสร้างค่าสุ่ม และผู้ใช้ส่วนมากก็ไม่ได้รอให้ระบบบูตไปนานเพียงพอ แต่เริ่มขอค่าสุ่มทันทีที่ ฟังก์ชั่น crng_ready() เป็นจริง แต่ฟังก์ชั่นนี้มีข้อจำกัดที่หลายกรณีกลับไม่ได้เตรียมค่าสุ่มไว้เพียงพอ โดยตรวจเพียงว่าแหล่งเริ่มต้นค่าสุ่มนั้นได้รับมาครบ 64 ไบต์หรือไม่ โดยแหล่งเริ่มต้นค่าสุ่มได้แก่ ตาราง DMI, อาร์กิวเมนต์คำสั่งเคอร์เนล, ค่า MAC, หมายเลข USB ในบางกรณีการอ่านค่าจากตาราง DMI อย่างเดียวก็มีขนาดเกิน 64 ไบต์ ทำให้ระบบคิดว่าค่าสุ่มปลอดภัยแล้ว แต่ในความเป็นจริงค่าสุ่มกลับยังไม่ปลอดภัยเพียงพอ

ทางผู้ดูแลเคอร์เนลปรับแก้โค้ดใน git แล้ว โดยเพิ่มความรัดกุมใน crng_ready() ให้สูงขึ้น อย่างไรก็ดี การโจมตีในระบบใหม่ๆ อาจจะจำกัดพอสมควร เพราะระบบใหม่ๆ มักเปิด ASLR ซึ่งทำให้มีอินเทอร์รัปต์สร้างความสุ่มให้ระบบ, มีคำสั่ง RDRAND ที่ดึงค่าสุ่มที่แท้จริง (True Random Number Generator - TRNG) เป็นฮาร์ดแวร์, ตลอดจนความร้อนในห้องและการปรับความเร็วซีพียูล้วนเพิ่มความสุ่มได้ทั้งสิ้น

ที่มา - Project Zero

Blognone Jobs Premium