ความไม่ปลอดภัยของหน่วยความจำ
ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ ข้อผิดพลาดในการจัดการหน่วยความจำในภาษาการเขียนโปรแกรมดั้งเดิม เป็นปัญหาที่พบบ่อยที่สุดในโค้ดเบสของ Android คิดเป็นสัดส่วนมากกว่า 60% ของ ช่องโหว่ด้านความปลอดภัย ที่มีความรุนแรงสูงและสำหรับข้อขัดข้องที่ผู้ใช้มองเห็นนับล้านครั้ง
![จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลกระทบต่อประสบการณ์ผู้ใช้ ต้นทุน และความปลอดภัย](https://source.android.com/static/docs/security/images/mem-safe-costs.png?authuser=0&hl=th)
จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อคุณภาพและความเสถียร และเป็นสาเหตุสำคัญที่ทำให้เกิดข้อขัดข้องที่พบในอุปกรณ์ของผู้ใช้ปลายทาง ดังนั้นข้อบกพร่องด้านความปลอดภัยของหน่วยความจำที่มีความหนาแน่นสูงจึงมีความสัมพันธ์โดยตรงกับประสบการณ์ผู้ใช้ที่ไม่ดี
รหัสเนทิฟที่เขียนด้วยภาษาที่ไม่ปลอดภัยในหน่วยความจำ เช่น C, C++ และ Assembly คิดเป็นมากกว่า 70% ของรหัสแพลตฟอร์ม Android และมีอยู่ในแอปพลิเคชัน Play Store ประมาณ 50%
เนื่องจากโค้ดมีความซับซ้อนเพิ่มขึ้นเรื่อยๆ หากปล่อยทิ้งไว้โดยไม่มีใครดูแล ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำก็จะเพิ่มขึ้นเมื่อเวลาผ่านไป ดังนั้นการจัดหาเครื่องมือและเทคโนโลยีให้กับระบบนิเวศของเราที่สามารถตรวจจับและบรรเทาจุดบกพร่องดังกล่าวจึงมีความสำคัญต่อความสำเร็จในระยะยาวของเรา
ในช่วงหลายปีที่ผ่านมา เราได้ทำงานอย่างใกล้ชิดกับพันธมิตรด้านฮาร์ดแวร์ของเราเพื่อพัฒนาเทคโนโลยีฮาร์ดแวร์ เช่น Arm Memory Tagging และได้เปิดตัว Rust ในโค้ดเบสของ Android
เทคโนโลยีเหล่านี้จะเร่งเส้นทางสู่ความปลอดภัยของหน่วยความจำ และจะช่วยให้อุตสาหกรรมซอฟต์แวร์ในวงกว้างสามารถแก้ไขปัญหาสำคัญได้
จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อคุณภาพ
จุดบกพร่องด้านความปลอดภัยของหน่วยความจำแฝงอาจทำให้เกิดผลลัพธ์ที่ไม่สามารถกำหนดได้ ขึ้นอยู่กับสถานะของระบบ พฤติกรรมที่คาดเดาไม่ได้นี้นำไปสู่การขัดข้องและความรำคาญสำหรับผู้ใช้ของเรา
ทุกๆ วันเราสังเกตเห็นข้อขัดข้องของระบบเนทิฟหลายล้านครั้งจากอุปกรณ์ของผู้ใช้ปลายทาง และด้วยการเปิดตัว GWP-ASan เราได้ติดตามข้อขัดข้องส่วนใหญ่จากข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
จุดข้อมูลนี้จะตรวจสอบความสัมพันธ์ระหว่างคุณภาพและความหนาแน่นของข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ และสอดคล้องกับสิ่งที่เพื่อนร่วมงาน Chrome ของเราสังเกตเห็น (ดู รายการด่วนข้อบกพร่องของ Chrome GWP-ASan )
จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อความปลอดภัย
ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำมีส่วนทำให้เกิดช่องโหว่ด้านความปลอดภัยของ Android มาโดยตลอด โดยย้อนกลับไปตั้งแต่ Android รุ่นแรก
![จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อความปลอดภัย](https://source.android.com/static/docs/security/images/vulns-by-type-chart.png?authuser=0&hl=th)
แม้ว่าจะเป็นเรื่องน่ายินดีที่รู้ว่านี่ไม่ได้เป็นเพียงปัญหาของ 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 ที่มีจำหน่าย
![จุดบกพร่องด้านความปลอดภัยของหน่วยความจำส่งผลเสียต่อความปลอดภัย](https://source.android.com/static/docs/security/images/safety-tools-landscape.png?authuser=0&hl=th)
เครื่องมือของเราครอบคลุมสถานการณ์และเป้าหมายการใช้งานที่หลากหลาย เอกสารต่อไปนี้จะอธิบายแต่ละเครื่องมือและให้ข้อมูลอ้างอิงสำหรับการใช้งานในผลิตภัณฑ์ของคุณ