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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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