หน้านี้จะอธิบายข้อบกพร่องและเครื่องมือด้านความปลอดภัยของหน่วยความจำ
ความไม่ปลอดภัยของหน่วยความจำ
ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ ซึ่งเป็นข้อผิดพลาดในการจัดการหน่วยความจำในภาษาโปรแกรมแบบเนทีฟ เป็นปัญหาที่พบบ่อยที่สุดในฐานของโค้ด 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
เครื่องมือของเราครอบคลุมสถานการณ์การใช้งานและเป้าหมายที่หลากหลาย เอกสารประกอบในส่วนนี้จะอธิบายเครื่องมือแต่ละรายการและให้ข้อมูลอ้างอิงสำหรับการใช้ เครื่องมือเหล่านั้นในผลิตภัณฑ์ของคุณ