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

หน้านี้จะอธิบายข้อบกพร่องและเครื่องมือด้านความปลอดภัยของหน่วยความจำ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

เอกสารคำจำกัดความความเข้ากันได้ (CDD) ของ Android ขอแนะนำอย่างยิ่งให้ใช้เครื่องมือด้านความปลอดภัยของหน่วยความจำในระหว่างการพัฒนา

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

เมื่อเวลาผ่านไป เราต้องการให้มั่นใจว่าอุปกรณ์แต่ละเครื่องผ่านการทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (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

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