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

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

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

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

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

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