ข้อบกพร่องของไดรเวอร์กราฟิกใน Samsung Galaxy S6 ทำให้ข้อมูลแท็บ Google Chrome รั่วไหลได้อย่างไร

เคยสงสัยบ้างไหมว่าพบช่องโหว่ด้านความปลอดภัยได้อย่างไร? บริษัท GraphicsFuzz จากสหราชอาณาจักร อธิบายว่าพวกเขาพบข้อบกพร่องของไดรเวอร์กราฟิกใน Samsung Galaxy S6 ได้อย่างไร ซึ่งพวกเขาสามารถนำไปใช้เพื่อดูข้อมูลจากแท็บที่เปิดอยู่ใน Google Chrome

ย้อนกลับไปในช่วงปลายเดือนมีนาคม บริษัทสตาร์ทอัพในสหราชอาณาจักรที่เชี่ยวชาญด้านการทดสอบความน่าเชื่อถือของ GPU ได้ติดต่อเราเพื่อแจ้ง พวกเขาค้นพบข้อบกพร่องของ GPU ที่ทำให้เกิด ควอลคอมม์ Snapdragon 845ซัมซุงกาแล็คซี่ S9/เอส9+ เพื่อรีบูตเมื่อเยี่ยมชมหน้าเว็บ บริษัทที่เรียกว่า กราฟิกฟัซทำงานร่วมกับเราเพื่อรายงานปัญหาไปที่ วอลคอมม์ และ ซัมซุง. ผู้อ่านของเราบางคนสนใจที่จะเรียนรู้ว่าบริษัทมีลักษณะอย่างไร กราฟิกฟัซ สามารถค้นหาช่องโหว่เหล่านี้ได้ ดังนั้นเราจึงร่วมมือกับบริษัทเพื่อแสดงวิธีที่พวกเขาค้นพบช่องโหว่ของ GPU รุ่นเก่า ช่องโหว่ที่ได้รับการแพตช์แล้วนี้ทำให้ผู้โจมตีสามารถ "สอดแนม" เนื้อหาจากระยะไกลได้ Google Chrome แท็บเบราว์เซอร์บน ซัมซุงกาแล็คซี่ S6.

ผู้ใช้รายนี้ดูเว็บไซต์ของธนาคารก่อนที่จะไปที่หน้าเว็บที่เป็นอันตราย เนื้อหาถูกจับและอัปโหลดไปยังเซิร์ฟเวอร์ระยะไกล แหล่งที่มา: กราฟิกฟัซ.

GraphicsFuzz ค้นหาข้อบกพร่องของ GPU ได้อย่างไร

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

ผลลัพธ์ของอุปกรณ์ยอดนิยมหลายตัวที่ใช้ชุดทดสอบ GraphicsFuzz Samsung Galaxy S6, Samsung Galaxy S7 และ Samsung Galaxy S8 รวมอยู่ในแผนภูมิเหล่านี้ แหล่งที่มา: กราฟิกฟัซ.

สำหรับซัมซุงกาแล็คซี่ S6 กราฟิกฟัซ พบว่ารูปภาพในแถวหนึ่งแสดงรูปภาพที่ควรจะอยู่ในอีกตารางหนึ่ง ซึ่งหมายความว่ารูปภาพจากการทดสอบก่อนหน้านี้รั่วไหลไปสู่การทดสอบในภายหลัง จากนั้นทีมงานจึงรันชุดทดสอบอีกครั้งใน Google Chrome และพบว่าบางส่วนของหน้าเว็บปรากฏในรูปภาพ นอกจากนี้ พวกเขาพบว่าการเปิดแท็บอื่นทำให้รูปภาพแสดงส่วนต่างๆ ของแท็บอื่นๆ โดยพื้นฐานแล้ว ข้อผิดพลาดนี้ทำให้แท็บ Google Chrome หนึ่งแท็บรั่วไหลข้อมูลเกี่ยวกับแท็บ Chrome อื่น! ทีมงานเบื้องหลัง. กราฟิกฟัซ ไม่ได้ตั้งใจมองหาจุดบกพร่องด้านความปลอดภัย แต่สุดท้ายพวกเขาก็พบจุดบกพร่องอันเป็นผลมาจากการทดสอบ (ควรสังเกตว่าทีมงานได้จำลองจุดบกพร่องบนเบราว์เซอร์ Samsung ในสต็อกบน Galaxy S6 ด้วย มอซซิลา ไฟร์ฟอกซ์.)

บั๊กทำงานอย่างไร

รูปภาพที่ใช้เพื่อทำให้เกิดข้อผิดพลาดระยะยาวใน Samsung Galaxy S6 แหล่งที่มา: กราฟิกฟัซ.

หน้าเว็บ "ที่เป็นอันตราย" ที่สร้างโดย กราฟิกฟัซ ใช้ WebGL เพื่อพยายามวาดฉากอวกาศภายในผืนผ้าใบดังที่แสดงด้านบน สีของแต่ละพิกเซลถูกกำหนดโดยแฟรกเมนต์เชเดอร์ ซึ่งเป็นโปรแกรมที่หน้าเว็บจัดทำขึ้นเพื่อดำเนินการบน GPU ที่ กราฟิกฟัซ เฟรมเวิร์กได้แก้ไขตัวแบ่งส่วนซึ่งทำให้มันทำงานเป็นเวลานานมาก เมื่อเชเดอร์ทำงานนานเกินไป โดยทั่วไปเบราว์เซอร์หรือระบบปฏิบัติการจะยกเลิกการเรนเดอร์ อย่างไรก็ตาม ในขณะที่ GPU ยกเลิกการเรนเดอร์หลังจากวาดพิกเซลไปสองสามพิกเซล ไดรเวอร์ GPU ไม่ได้รายงานสิ่งนี้ไปยัง Google Chrome (หากดูภาพที่ด้านบนของบทความแสดงหน่วยความจำวิดีโอขยะ คุณจะเห็นฉากอวกาศบางส่วนอยู่ด้านบนจริงๆ ซ้าย) ซึ่งหมายความว่าพิกเซลที่แสดงผลก่อนการยกเลิกจะไม่ถูกแตะต้อง ซึ่งหมายความว่าภาพที่เรนเดอร์ขั้นสุดท้ายส่วนใหญ่เป็นวิดีโอขยะ หน่วยความจำ. เนื่องจากหน่วยความจำวิดีโอถูกใช้อย่างต่อเนื่องในการแสดงผลหน้าเว็บอื่นๆ ข้อมูล "ขยะ" จึงประกอบด้วยการแสดงผลหน้าเว็บอื่นๆ ก่อนหน้านี้ ดังนั้นหน้าเว็บอื่นๆ จึงปรากฏบนหน้าเว็บที่ "เป็นอันตราย" สิ่งสำคัญที่สุดคือ WebGL ช่วยให้หน้าเว็บสามารถบันทึกเนื้อหาของสิ่งที่กำลังแสดงผลได้ รูปภาพนี้จะถูกอัพโหลดไปยังเซิร์ฟเวอร์ระยะไกล

แผนภาพอธิบายข้อบกพร่องของ GPU ที่ทำงานมายาวนานทำให้ข้อมูลแท็บ Chrome "รั่วไหล" แหล่งที่มา: กราฟิกฟัซ.

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

ข้อผิดพลาดนี้แสดงให้เห็นในวิดีโอนี้ในช่วง 22 วินาทีแรก ปัญหาด้านความปลอดภัยอื่นๆ ที่พบโดย GraphicsFuzz ก็แสดงให้เห็นเช่นกัน

บทเรียนที่ต้องเรียนรู้

GPU ที่ทำงานผิดปกติสามารถหลีกเลี่ยงมาตรการรักษาความปลอดภัยของ Google Chrome และ Android ได้ทั้งหมด เนื่องจาก WebGL อนุญาตให้หน้าเว็บที่เป็นอันตรายส่งโค้ดไปยัง GPU เพื่อดำเนินการได้ Google ไม่สามารถแก้ไขข้อบกพร่องของ GPU ได้ เนื่องจากบริษัทไม่ได้ควบคุมฮาร์ดแวร์และไดรเวอร์ ในกรณีนี้ ขึ้นอยู่กับผู้จำหน่าย GPU (ในกรณีนี้คือ ARM) ที่จะแก้ไขข้อบกพร่องและ OEM ที่อุปกรณ์ได้รับผลกระทบ (ในกรณีนี้คือ Samsung) ที่จะรวมการแก้ไขเข้ากับการอัปเดต เพิ่มผู้ให้บริการลงในส่วนผสม และดูได้ง่ายว่าข้อบกพร่องเช่นนี้ใช้เวลานานมากในการแก้ไขอย่างไร—ต้องใช้เวลา อย่างน้อย 5 เดือน สำหรับผู้ใช้ Samsung Galaxy S6 ส่วนใหญ่ที่จะได้รับแพตช์

กราฟิกฟัซ ช่วยให้ผู้จำหน่าย GPU ค้นหาข้อบกพร่องที่ตรวจพบได้ยาก เช่น ข้อผิดพลาดในการคอมไพล์ที่ทำให้เกิดการสร้างและดำเนินการโค้ดที่ไม่ถูกต้องบน GPU กรอบการทดสอบอัตโนมัติช่วยให้พวกเขาค้นหาจุดบกพร่องเช่นที่แสดงในบทความนี้ การวนซ้ำที่ใช้เวลานานซึ่งเกิดจากหน้าเว็บ "ที่เป็นอันตราย" ยังแสดงให้เห็นว่าทำให้เกิดปัญหากับอุปกรณ์อื่น ๆ เช่น เอชทีซี วัน M7 และอีกไม่นานนี้ ซัมซุงกาแล็คซี่ S9. กราฟิกฟัซ ทดสอบสมาร์ทโฟนเรือธงและเผยแพร่ ตารางผลลัพธ์ ซึ่งจัดอันดับอุปกรณ์เหล่านี้ตามประสิทธิภาพในชุดย่อยของการทดสอบ ข้อขัดข้องและข้อผิดพลาดในการแสดงผลหลายร้อยรายการ พบได้ในระหว่างการทดสอบ แต่ส่วนใหญ่ไม่ได้รับการตรวจสอบเพื่อดูว่าเป็นภัยคุกคามด้านความปลอดภัยหรือไม่ อย่างไรก็ตาม ตามที่เห็นได้จากการหาประโยชน์นี้ GPU ที่ทำงานผิดปกติถือเป็นความเสี่ยงด้านความปลอดภัย และอาจเป็นไปได้ว่าช่องโหว่ด้านความปลอดภัยที่สำคัญอย่างน้อยหนึ่งรายการกำลังรอการค้นพบอยู่ กราฟิกฟัซ หวังว่าผู้จำหน่าย GPU จะให้ความสำคัญกับการปรับปรุงคุณภาพไดรเวอร์ในอนาคต

ความน่าเชื่อถือเชิงเปรียบเทียบของไดรเวอร์กราฟิก เรียงตามจำนวนปัญหาทั้งหมด แหล่งที่มา: กราฟิกฟัซ.

ไทม์ไลน์การเปิดเผยข้อมูล

  • ในเดือนธันวาคม พ.ศ. 2559 กราฟิกฟัซ รายงานข้อผิดพลาดไปยัง ตัวติดตามข้อบกพร่องของ Google Chromium เพราะมันมีสิทธิ์สำหรับ Chrome Reward Program หลังจากที่ GraphicsFuzz ส่งข้อบกพร่องไปยังตัวติดตามข้อบกพร่องของ Google Chromium แล้ว Google ก็ยอมรับข้อบกพร่องดังกล่าวแล้วส่งต่อไปยัง ARM และ Samsung เพื่อทำการแก้ไข
  • Google ส่งต่อรายงาน เพื่อติดต่อที่ ARM และ Samsung
  • Samsung ได้แก้ไขข้อบกพร่องอย่างเงียบ ๆ และเปิดตัวการแก้ไขในการอัปเดต Android 7.0 Nougat ที่เปิดตัวระหว่างเดือนมีนาคมถึงมิถุนายนปี 2017 แม้ว่าจะไม่มี CVE ที่สร้างโดย Samsung, Google หรือ ARM และทั้ง Samsung และ ARM ไม่ได้เปิดเผยข้อมูลใด ๆ เกี่ยวกับแพตช์ โปรดทราบว่า กราฟิกฟัซ ไม่ได้รายงานข้อผิดพลาดผ่านทาง กระบวนการที่เหมาะสม.
  • ภายหลัง, กราฟิกฟัซ สามารถยืนยันได้ว่าทั้ง Samsung และ ARM ได้เห็นรายงานแล้ว และ ARM ก็สามารถแก้ไขปัญหาได้เนื่องจากรายงานดังกล่าว
  • ในเดือนสิงหาคม พ.ศ. 2560 กราฟิกฟัซ ได้รับรางวัล $2,000 จาก Google สำหรับรายงานข้อผิดพลาด
  • ในเดือนพฤศจิกายน 2560 รายงานข้อผิดพลาดถูกเปิดเผยสู่สาธารณะ.