ความปลอดภัยของหน่วยความจำ

หน่วยความจําไม่ปลอดภัย

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ ข้อผิดพลาดในการจัดการหน่วยความจำในภาษาโปรแกรมแบบเนทีฟเป็นปัญหาที่พบบ่อยที่สุดในโค้ดเบส Android ซึ่งเกิดขึ้นมากกว่า 60% ของช่องโหว่ด้านความปลอดภัยที่มีความรุนแรงสูง และทำให้เกิดข้อขัดข้องที่ผู้ใช้มองเห็นได้นับล้านครั้ง

 ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําส่งผลต่อประสบการณ์ของผู้ใช้ ต้นทุน และความปลอดภัย
รูปที่ 1: ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำและผลกระทบเชิงลบต่อคุณภาพ ความปลอดภัย และค่าใช้จ่าย

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อคุณภาพและความเสถียร รวมถึงเป็นสาเหตุของจำนวนการขัดข้องที่พบในอุปกรณ์ของผู้ใช้ปลายทางเป็นจำนวนมาก ดังนั้น ความหนาแน่นของแมลงด้านความปลอดภัยของหน่วยความจำที่สูงจึงสัมพันธ์โดยตรงกับประสบการณ์การใช้งานที่ไม่ดี
โค้ดแบบเนทีฟที่เขียนเป็นภาษาที่ไม่ปลอดภัยของหน่วยความจำ เช่น C, C++ และ Assembly คิดเป็นมากกว่า 70% ของโค้ดแพลตฟอร์ม Android และมีอยู่ในแอปประมาณ 50% ของแอป Google Play Store
เนื่องจากโค้ดมีความซับซ้อนมากขึ้นเรื่อยๆ หากไม่ดูแล บั๊กด้านความปลอดภัยของหน่วยความจำจะเพิ่มขึ้นเมื่อเวลาผ่านไป ดังนั้น การจัดหาเครื่องมือและเทคโนโลยีที่ตรวจจับและลดข้อบกพร่องดังกล่าวให้กับระบบนิเวศของเราจึงมีความสำคัญต่อความสำเร็จในระยะยาว
ในช่วงหลายปีที่ผ่านมา เราได้ทำงานร่วมกับพาร์ทเนอร์ฮาร์ดแวร์อย่างใกล้ชิดเพื่อพัฒนาเทคโนโลยีฮาร์ดแวร์ เช่น การติดแท็กหน่วยความจำ Arm และเปิดตัว Rust ในโค้ดเบส Android
เทคโนโลยีเหล่านี้จะเร่งเร้าเส้นทางความปลอดภัยด้านหน่วยความจำของเราและช่วยให้อุตสาหกรรมซอฟต์แวร์ในวงกว้างสามารถจัดการปัญหาที่สำคัญ

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อคุณภาพ

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําแฝงอาจทําให้ได้ผลลัพธ์ที่ไม่แน่นอน ทั้งนี้ขึ้นอยู่กับสถานะของระบบ ลักษณะการทำงานที่ไม่คาดคิดนี้ทําให้เกิดการขัดข้องและสร้างความรําคาญให้แก่ผู้ใช้

เราพบข้อขัดข้องที่เกิดขึ้นเองหลายล้านรายการจากอุปกรณ์ของผู้ใช้ปลายทางทุกวัน และหลังจากเปิดตัว GWP-ASan เราพบว่าข้อขัดข้องส่วนใหญ่เกิดจากข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
จุดข้อมูลนี้ยืนยันความสัมพันธ์ระหว่างคุณภาพและความหนาแน่นของข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ และสอดคล้องกับสิ่งที่เพื่อนร่วมงานของ Chrome สังเกตเห็น (ดูรายการข้อบกพร่อง GWP-ASan ยอดนิยมของ Chrome)

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําส่งผลเสียต่อความปลอดภัย

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําเป็นปัจจัยหลักที่ส่งผลต่อช่องโหว่ด้านความปลอดภัยของ Android มาโดยตลอด นับตั้งแต่การเปิดตัว Android รุ่นแรก

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําส่งผลเสียต่อความปลอดภัย
รูปที่ 2: ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำที่ทำให้เกิดช่องโหว่ใน Android

แม้ว่าการทราบว่าปัญหานี้ไม่ได้เกิดขึ้นเฉพาะใน Android (ดูสถิติของ Chrome และ Microsoft) จะเป็นเรื่องที่น่ายินดี แต่เราก็ต้องทำมากกว่านี้เพื่อความปลอดภัยของผู้ใช้
ทีม Project Zero ที่ Google จะติดตามข้อบกพร่อง Zero Day ที่ใช้จริงในการโจมตีผู้ใช้ ข้อผิดพลาดเหล่านี้ไม่ใช่ข้อบกพร่องสมมติ แต่เป็นการแสวงหาประโยชน์จากการโจมตีผู้ใช้อย่างต่อเนื่อง ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ (การละเมิดหน่วยความจำและการใช้งานหลังช่วงใช้ฟรี) คิดเป็นสัดส่วนส่วนใหญ่

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําทำให้มีค่าใช้จ่ายเพิ่มขึ้น

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

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจําที่มีจำนวนมากในโค้ดระดับล่างของผู้ให้บริการ ซึ่งมักจะมีการแก้ไขที่กําหนดเอง ทําให้ต้นทุนการแก้ไขและการทดสอบเพิ่มขึ้นอย่างมาก อย่างไรก็ตาม การตรวจหาข้อบกพร่องเหล่านี้ตั้งแต่เนิ่นๆ ในวงจรการพัฒนาจะช่วยให้ลดต้นทุนเหล่านี้ได้

การวิจัยแสดงให้เห็นว่าการพบข้อบกพร่องได้เร็วขึ้นสามารถลดค่าใช้จ่ายได้สูงสุด 6 เท่า อย่างไรก็ตาม ค่าใช้จ่ายอาจลดลงได้มากกว่านี้เนื่องจากความซับซ้อนของระบบนิเวศ จำนวนฐานโค้ดเฉลี่ยที่ดูแลโดยผู้ให้บริการ และความซับซ้อนของซอฟต์แวร์ที่เพิ่มขึ้นเรื่อยๆ

ความปลอดภัยของหน่วยความจำ

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

ความปลอดภัยของหน่วยความจำมีแนวโน้มที่จะกลายเป็นความแตกต่างในด้านคุณภาพและความปลอดภัยในปีต่อๆ ไป และ Android วางแผนที่จะเป็นผู้นําในเรื่องนี้

ข้อกำหนดในการสนับสนุนความปลอดภัยของหน่วยความจำ

เอกสารคำจำกัดความความเข้ากันได้ของ Android (CDD) ขอแนะนำอย่างยิ่งให้ใช้เครื่องมือด้านความปลอดภัยของหน่วยความจำในระหว่างการพัฒนา
เราทำงานอย่างใกล้ชิดกับระบบนิเวศเพื่อเพิ่มการใช้เครื่องมือด้านความปลอดภัยของหน่วยความจำและผสานรวมเครื่องมือเหล่านั้นไว้ในกระบวนการผสานรวมและการทดสอบอย่างต่อเนื่อง
เมื่อเวลาผ่านไป เราต้องการให้อุปกรณ์แต่ละเครื่องผ่านชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) แบบเต็มโดยใช้เครื่องมือด้านความปลอดภัยของหน่วยความจำ ซึ่งแสดงให้เห็นว่าไม่พบข้อบกพร่องดังกล่าว ตัวอย่างเช่น แพลตฟอร์ม Arm v9 จะต้องทำการทดสอบ CTS โดยเปิดใช้การติดแท็กหน่วยความจำ ส่วนแพลตฟอร์ม Arm v8 จะต้องทำการทดสอบ CTS โดยใช้ HWASAN และ KASAN

Rust เป็นภาษาโปรแกรมใหม่สำหรับโค้ดแพลตฟอร์ม

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

เครื่องมือด้านความปลอดภัยของหน่วยความจำ

Android รองรับเครื่องมือที่หลากหลายซึ่งช่วยตรวจหาข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ รูปภาพด้านล่างแสดงการจัดหมวดหมู่ของเครื่องมือด้านความปลอดภัยของหน่วยความจำ Android ที่มี

ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อความปลอดภัย
รูปที่ 3: ภาพรวมเครื่องมือด้านความปลอดภัยของหน่วยความจําของ Android

เครื่องมือของเราครอบคลุมสถานการณ์และเป้าหมายต่างๆ ของการใช้งาน เอกสารต่อไปนี้จะอธิบายเครื่องมือแต่ละรายการและให้ข้อมูลอ้างอิงสำหรับการใช้เครื่องมือเหล่านั้นในผลิตภัณฑ์