กูเกิลเล่าประสบการณ์แปลงโค้ด C/C++ เป็น Rust ในเฟิร์มแวร์ของ Android, บอกว่าทำง่าย

by mk
9 September 2024 - 14:19

กูเกิลเผยรายละเอียดผ่าน Google Security Blog ถึงการเปลี่ยนโค้ดเฟิร์มแวร์ Android จากของเดิมที่เป็น C/C++ มาเป็น Rust เพื่ออาศัยจุดเด่นเรื่องความปลอดภัยหน่วยความจำ (memory-safe) ที่ระดับภาษา

กูเกิลเริ่มใช้ Rust ใน Android มาตั้งแต่ปี 2021 และได้ผลเป็นอย่างดี กรณีนี้ กูเกิลบอกว่าต้องการโชว์ให้เห็นว่าการเปลี่ยนโค้ด C/C++ มาเป็น Rust โดยตรงชนิดใช้แทนกันได้เลย (drop-in replacement) เป็นเรื่องที่สามารถทำได้จริงที่ระดับเฟิร์มแวร์

กูเกิลบอกว่าเฟิร์มแวร์เป็นจุดรั่วให้โดนโจมตีได้ง่าย เพราะโค้ดระดับของเฟิร์มแวร์ขาดระบบความปลอดภัยที่ใช้กันในซอฟต์แวร์ระดับสูงขึ้น และมักเต็มไปด้วยโค้ดเก่าๆ ที่เขียนด้วย C/C++ สั่งสมกันมายาวนาน การแก้ปัญหาโดยเปลี่ยนโค้ดเป็น Rust ที่สามารถทดแทน C ได้เลยโดยไม่เสียประสิทธิภาพ (no overhead) จึงเป็นทางออกที่เหมาะสม

แนวทางที่กูเกิลใช้งานคือค่อยๆ เริ่มเปลี่ยนจากโค้ดส่วนที่มีความเสี่ยงสูง (highest risk) ก่อน โดยสร้างเลเยอร์ที่ทำหน้าที่แปลง Rust API เป็น C API ของเดิม ปัญหาที่พบในระหว่างทางคือต้องแปลงโค้ด Rust ที่เรียกไลบรารี std (รันบนระบบปฏิบัติการตัวเต็ม) มาเป็นสภาพแวดล้อมแบบ no_std (รันแบบ bare metal บนฮาร์ดแวร์เพียวๆ ในกรณีของเฟิร์มแวร์) ซึ่งกูเกิลได้เล่าเทคนิคการแก้ปัญหานี้ในบล็อกอย่างละเอียด

กูเกิลบอกว่าการเปลี่ยนผ่านครั้งนี้ "ง่าย" (ใช้คำว่า easy) และได้ประโยชน์เรื่องความปลอดภัยหน่วยความจำ โดยยังรักษาประสิทธิภาพระดับเดียวกับ C เอาไว้ได้ กูเกิลจึงแนะนำให้องค์กรอื่นๆ ที่อยากเปลี่ยนผ่านโค้ดเก่าในเฟิร์มแวร์ ให้เดินตามแนวทางที่กูเกิลลองจนประสบความสำเร็จมาแล้วได้

ที่มา - Google Security Blog via The Register

Blognone Jobs Premium