Rust รวมอยู่ในภาษาหลักสำหรับการพัฒนาแพลตฟอร์ม Android

Google ได้ประกาศการรวมภาษาการเขียนโปรแกรม Rust เข้ากับภาษาที่อนุญาตสำหรับการพัฒนาแพลตฟอร์ม Android คอมไพเลอร์ภาษา Rust ถูกรวมอยู่ในแผนผังซอร์สของ Android ในปี 2019 แต่การรองรับภาษานี้ยังคงอยู่ในช่วงทดลอง องค์ประกอบ Rust แรกๆ บางส่วนที่วางแผนไว้สำหรับ Android รวมถึงการใช้งานกลไกการสื่อสารระหว่างกระบวนการ Binder และสแต็ก Bluetooth

การเปิดตัว Rust เป็นส่วนหนึ่งของโครงการเพื่อเสริมสร้างความปลอดภัย ส่งเสริมเทคนิคการเขียนโปรแกรมที่ปลอดภัย และเพิ่มประสิทธิภาพในการระบุปัญหาเมื่อทำงานกับหน่วยความจำใน Android มีข้อสังเกตว่าประมาณ 70% ของช่องโหว่ที่เป็นอันตรายทั้งหมดที่ระบุใน Android เกิดจากข้อผิดพลาดเมื่อทำงานกับหน่วยความจำ การใช้ Rust ซึ่งมุ่งเน้นไปที่ความปลอดภัยของหน่วยความจำและการจัดการหน่วยความจำอัตโนมัติ จะช่วยลดความเสี่ยงของช่องโหว่ที่เกิดจากข้อผิดพลาดของหน่วยความจำ เช่น การเข้าถึงหลังจากใช้งานฟรีและบัฟเฟอร์มากเกินไป

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

ใน Android ความปลอดภัยของหน่วยความจำมีให้ในภาษา Kotlin และ Java ที่รองรับแล้ว แต่ไม่เหมาะสำหรับการพัฒนาส่วนประกอบของระบบเนื่องจากมีค่าใช้จ่ายสูง Rust ทำให้สามารถบรรลุประสิทธิภาพที่ใกล้เคียงกับภาษา C และ C++ ซึ่งช่วยให้สามารถใช้ในการพัฒนาส่วนระดับต่ำของแพลตฟอร์มและส่วนประกอบสำหรับการโต้ตอบกับฮาร์ดแวร์

เพื่อให้มั่นใจในความปลอดภัยของโค้ด C และ C++ นั้น Android จะใช้การแยกแซนด์บ็อกซ์ การวิเคราะห์แบบคงที่ และการทดสอบแบบคลุมเครือ ความสามารถของการแยกแซนด์บ็อกซ์นั้นมีจำกัดและถึงขีดจำกัดความสามารถแล้ว (การกระจายตัวเพิ่มเติมในกระบวนการไม่สามารถทำได้ในแง่ของการใช้ทรัพยากร) ข้อจำกัดของการใช้แซนด์บ็อกซ์รวมถึงต้นทุนค่าโสหุ้ยจำนวนมากและการใช้หน่วยความจำที่เพิ่มขึ้นซึ่งเกิดจากความจำเป็นในการวางกระบวนการใหม่ รวมถึงความล่าช้าเพิ่มเติมที่เกี่ยวข้องกับการใช้ IPC

ในเวลาเดียวกัน แซนด์บ็อกซ์ไม่ได้กำจัดช่องโหว่ในโค้ด แต่เพียงลดความเสี่ยงและทำให้การโจมตีซับซ้อนขึ้นเท่านั้น เนื่องจากการแสวงหาผลประโยชน์จำเป็นต้องระบุช่องโหว่มากกว่าหนึ่งรายการ แต่มีช่องโหว่หลายรายการ วิธีการที่ใช้การทดสอบโค้ดนั้นมีจำกัด โดยในการระบุข้อผิดพลาด จำเป็นต้องสร้างเงื่อนไขสำหรับปัญหาให้ประจักษ์เอง ไม่สามารถครอบคลุมตัวเลือกที่เป็นไปได้ทั้งหมดได้ จึงมีข้อผิดพลาดมากมายที่ไม่มีใครสังเกตเห็น

สำหรับกระบวนการของระบบใน Android นั้น Google ปฏิบัติตาม "กฎสองข้อ" ซึ่งโค้ดที่เพิ่มจะต้องตรงตามเงื่อนไขไม่เกินสองในสามเงื่อนไข ได้แก่ การทำงานกับข้อมูลอินพุตที่ไม่ได้รับการตรวจสอบ การใช้ภาษาการเขียนโปรแกรมที่ไม่ปลอดภัย (C/C++) และ ทำงานโดยไม่มีการแยกแซนด์บ็อกซ์ที่เข้มงวด (มีสิทธิ์ระดับสูง) กฎนี้บอกเป็นนัยว่าโค้ดสำหรับการประมวลผลข้อมูลภายนอกจะต้องถูกลดให้เหลือสิทธิ์ขั้นต่ำ (แยกกัน) หรือเขียนในภาษาการเขียนโปรแกรมที่ปลอดภัย

Google ไม่ได้ตั้งใจที่จะเขียนโค้ด C/C++ ที่มีอยู่ใน Rust แต่วางแผนที่จะใช้ภาษานี้เพื่อพัฒนาโค้ดใหม่ มันสมเหตุสมผลแล้วที่จะใช้ Rust สำหรับโค้ดใหม่ เพราะตามสถิติแล้ว จุดบกพร่องส่วนใหญ่จะปรากฏในโค้ดใหม่หรือที่เพิ่งมีการเปลี่ยนแปลง โดยเฉพาะอย่างยิ่งประมาณ 50% ของข้อผิดพลาดของหน่วยความจำที่ตรวจพบใน Android นั้นตรวจพบในโค้ดที่เขียนน้อยกว่าหนึ่งปีที่ผ่านมา

Rust รวมอยู่ในภาษาหลักสำหรับการพัฒนาแพลตฟอร์ม Android


ที่มา: opennet.ru

เพิ่มความคิดเห็น