Magisk อาจไม่สามารถซ่อนการปลดล็อค bootloader จากแอพได้อีกต่อไป

click fraud protection

นักพัฒนา Magisk ค้นพบว่า Google อาจเริ่มใช้การตรวจสอบฮาร์ดแวร์เพื่อตรวจสอบว่าอุปกรณ์ได้รับการปลดล็อก Bootloader หรือไม่

นักพัฒนา XDA ที่ได้รับการยอมรับ ท็อปจอห์นวูโปรเจ็กต์ "Magisk" ของโปรเจ็กต์มีความหมายเหมือนกันกับ "root" ในชุมชน Android หนึ่งในเหตุผลหลักที่มันได้รับความนิยมมากก็เพราะมันสามารถซ่อนความจริงที่ว่าผู้ใช้ดัดแปลงอุปกรณ์ของพวกเขาได้ อย่างไรก็ตาม Google อาจปราบปรามความสามารถของ Magisk ในการซ่อนสถานะการปลดล็อค bootloader จากแอปพลิเคชัน

ในการรูทโทรศัพท์ โดยปกติคุณจะต้องปลดล็อคโปรแกรมโหลดบูต ซึ่งจะช่วยให้คุณสามารถแฟลชอิมเมจสำหรับบูตที่แก้ไขแล้วได้ สิ่งนี้จำเป็นเนื่องจาก Magisk แก้ไขอิมเมจสำหรับบูตเพื่อปลอมสถานะ bootloader และ/หรือการตรวจสอบสถานะ Verified Boot SafetyNet Attestation API ของ Google ซึ่งเป็นส่วนหนึ่งของบริการ Google Play ใช้เพื่อแจ้งแอปว่าทำงานบนอุปกรณ์ที่ถูกดัดแปลงหรือไม่ หาก SafetyNet API ตรวจพบว่า bootloader ได้รับการปลดล็อคแล้ว ระบบจะส่งคืนสถานะความล้มเหลวสำหรับการตรวจสอบ "Basic Integrity" อุปกรณ์ที่ไม่ผ่านการตรวจสอบนี้จะถูกล็อคออกจากแอปที่ใช้ SafetyNet API เพื่อระบุความสมบูรณ์ของอุปกรณ์ โดยทั่วไปแล้วแอปดังกล่าวจะรวมถึงแอปธนาคาร แอปการชำระเงิน (เช่น Google Pay) และเกมออนไลน์มากมาย (เช่น Pokémon Go) อย่างไรก็ตาม เนื่องจากจนถึงขณะนี้ SafetyNet API ใช้เฉพาะการตรวจสอบซอฟต์แวร์เพื่อตรวจสอบว่าอุปกรณ์ถูกดัดแปลงหรือไม่ Magisk จึงสามารถปลอมแปลง bootloader และ/หรือสถานะ Verified Boot เนื่องจากมีการติดตั้งในระดับที่ต่ำกว่าและมีสิทธิ์ที่สูงกว่าบริการ Google Play และพื้นที่ผู้ใช้อื่น ๆ การใช้งาน ตามที่ topjohnwu อธิบาย MagiskHide "[สร้าง] 'สภาพแวดล้อมที่ปลอดภัย' ที่แยกออกมาสำหรับกระบวนการตรวจจับ และจะต้องผ่าน API ของ Google เพื่อสร้าง

ถูกต้องตามกฎหมาย ผลลัพธ์ของ SafetyNet ที่ไม่สะท้อนสถานะที่แท้จริงของอุปกรณ์"

อย่างไรก็ตาม เมื่อเร็ว ๆ นี้ ผู้ใช้สังเกตเห็นว่าอุปกรณ์ที่ปลดล็อค bootloader ไม่ผ่านการตรวจสอบความสมบูรณ์พื้นฐานของ SafetyNet แม้ว่าพวกเขาจะใช้ Magisk เพื่อแก้ไขอิมเมจสำหรับบูตก็ตาม ตามข้อมูลของ topjohnwu นี่เป็นเพราะว่า Google อาจใช้การรับรองคีย์ระดับฮาร์ดแวร์เพื่อตรวจสอบว่าอิมเมจสำหรับบูตไม่ได้ถูกดัดแปลง โดยเฉพาะอย่างยิ่ง นี่หมายถึงบริการ Google Play "[ส่ง] ใบรับรองที่เก็บคีย์ที่ยังไม่ได้แก้ไขไปยังเซิร์ฟเวอร์ SafetyNet ตรวจสอบความถูกต้องตามกฎหมาย และตรวจสอบ ข้อมูลส่วนขยายใบรับรองเพื่อให้ทราบว่าอุปกรณ์ของคุณ [มี] เปิดใช้งานการบูตที่ตรวจสอบแล้ว (สถานะ bootloader) หรือไม่" ซึ่งหมายความว่าอาจไม่เป็นเช่นนั้นอีกต่อไป เป็นไปได้ที่จะซ่อนความจริงที่ว่า bootloader ถูกปลดล็อคแล้วซึ่งจะส่งผลให้แอปพลิเคชันเช่น Google Pay และ Pokémon Go ไม่ทำงาน โดยทั่วไป.

ตามที่ topjohnwu ระบุไว้ การเปลี่ยนแปลงวิธีที่ SafetyNet ตรวจสอบสถานะการปลดล็อค bootloader นี้มาจากการอัปเดตฝั่งเซิร์ฟเวอร์เป็น SafetyNet API ที่มีอยู่ในบริการ Google Play อย่างไรก็ตาม ไม่ใช่ผู้ใช้ทุกรายที่ไม่ผ่านการตรวจสอบ SafetyNet ที่อัปเดตเหล่านี้ ดังนั้นการรับรองคีย์ระดับฮาร์ดแวร์ใหม่จึงอาจยังไม่บังคับใช้ในวงกว้าง

เราได้เห็น topjohnwu เอาชนะอุปสรรคทางเทคนิคครั้งแล้วครั้งเล่า Google มักออกการตรวจสอบใหม่ใน SafetyNet ซึ่ง topjohnwu ค้นพบและข้ามใน Magisk Android เวอร์ชันใหม่แต่ละเวอร์ชันนำการเปลี่ยนแปลงมาสู่โครงสร้างพาร์ติชั่นหรืออิมเมจสำหรับบูต โดยกำหนดให้ topjohnwu ศึกษาการเปลี่ยนแปลงแล้วใช้วิธีแพตช์ใหม่ อย่างไรก็ตาม แม้แต่ topjohnwu ก็อาจต้องดิ้นรนเพื่อหาทางเลี่ยงในครั้งนี้

นั่นเป็นเพราะว่าวิธีแก้ปัญหาในครั้งนี้เกี่ยวข้องกับการแฮ็กเฟิร์มแวร์ Trusted Execution Environment (TEE) ของอุปกรณ์เพื่อดึงข้อมูลคีย์ส่วนตัว อย่างไรก็ตาม การดำเนินการนี้เป็นเรื่องยากอย่างไม่น่าเชื่อ เนื่องจากจำเป็นต้องค้นหาช่องโหว่ในเฟิร์มแวร์ที่ออกแบบมาให้มีความปลอดภัยอย่างไม่น่าเชื่อ ในความเป็นจริง บริษัทหลายแห่งเสนอการชำระเงินเป็นจำนวนหลายแสนดอลลาร์หากพบช่องโหว่ดังกล่าว ตัวอย่างเช่น Google จ่ายเงิน 250,000 ดอลลาร์สำหรับช่องโหว่ในการเรียกใช้โค้ดจากระยะไกลในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ของ Pixel และ สูงถึง 1,000,000 ดอลลาร์ สำหรับช่องโหว่ใน ไททัน เอ็ม ชิปรักษาความปลอดภัย แม้ว่าคีย์ส่วนตัวจะรั่วไหลไป แต่ก็ไม่น่าจะมีประโยชน์อะไรมากนักตั้งแต่นั้นมา Google สามารถเพิกถอนกุญแจจากระยะไกลได้ จึงไม่สามารถใช้เพื่อตรวจสอบความสมบูรณ์ของอุปกรณ์ได้

เมื่อมีการบังคับใช้การรับรองคีย์ระดับฮาร์ดแวร์อย่างกว้างขวางสำหรับ SafetyNet แล้ว อุปกรณ์ส่วนใหญ่ที่มีโปรแกรมโหลดบูตที่ปลดล็อคแล้วซึ่งใช้ Android 8.0 Oreo หรือสูงกว่าจะไม่ผ่านการตรวจสอบความสมบูรณ์พื้นฐานของ SafetyNet เนื่องจากอุปกรณ์ทั้งหมดที่เปิดตัวด้วย Android 8.0 Oreo หรือสูงกว่าจำเป็นต้องมีที่เก็บคีย์ฮาร์ดแวร์ที่ใช้งานใน TEE อุปกรณ์บางอย่างในปัจจุบันมีโมดูลรักษาความปลอดภัยฮาร์ดแวร์ (HSM) เฉพาะซึ่งทำให้การใช้ประโยชน์ยากยิ่งขึ้นโดยการย้าย TEE ออกจากโปรเซสเซอร์หลัก Titan M ใน Pixel 4 และ ชิปรักษาความปลอดภัยตัวใหม่ของ Samsung ใน Galaxy S20 เป็นตัวอย่างนี้

ท็อปจอห์นวู อธิบายด้วย วิธีแก้ปัญหาที่เป็นไปได้อื่นๆ นั้นเป็นไปไม่ได้หรือมีความท้าทายสูง การใช้ Xposed Framework เพื่อแก้ไข SafetyNet Attestation API ในบริการ Google Play ไม่น่าจะทำงานเนื่องจาก "การตรวจสอบ SafetyNet ที่เหมาะสมจะตรวจสอบผลลัพธ์บนเซิร์ฟเวอร์ระยะไกล ไม่ใช่ใน [the] อุปกรณ์ซึ่งสามารถจัดการได้โดยเฟรมเวิร์กการแทรกโค้ด" นอกจากนี้ บริการ Google Play ยังมีความสับสนอย่างมาก ทำให้การสร้างโมดูล Xposed ดังกล่าวมีความท้าทายอย่างเหลือเชื่อในช่วงแรก สถานที่. การปลอมแปลงผลการทดสอบ SafetyNet จะไม่สามารถทำได้เนื่องจากการตอบกลับของ SafetyNet "มาจากเซิร์ฟเวอร์ของ Google และลงนามด้วยรหัสส่วนตัวของ Google"

Google มีความสามารถในการทำให้การตรวจสอบ SafetyNet เข้มงวดขึ้นโดยใช้การรับรองคีย์ที่สนับสนุนด้วยฮาร์ดแวร์มาหลายปีแล้ว การที่พวกเขาละเว้นไม่ทำเช่นนั้นเป็นเวลา 3 ปีทำให้ผู้ใช้สามารถเพลิดเพลินกับรูทและโมดูล Magisk ได้โดยไม่ต้องเสียสละความสามารถในการใช้แอปธนาคาร อย่างไรก็ตาม ดูเหมือนว่าความสามารถของ Magisk ในการซ่อนสถานะการปลดล็อค bootloader อย่างมีประสิทธิภาพกำลังจะสิ้นสุดลงในไม่ช้า เป็นการเปลี่ยนแปลงที่เราคาดหวังมานานหลายปี แต่เราเสียใจที่ในที่สุดมันก็มีผลใช้บังคับ เราหวังว่า Google จะอัปเดต SafetyNet Attestation API เพื่อส่งคืนว่าการตรวจสอบสถานะใช้ฮาร์ดแวร์หรือไม่ การรับรองเนื่องจากจะช่วยให้นักพัฒนาแอปตัดสินใจว่าต้องการบล็อกผู้ใช้ทั้งหมดที่ปลดล็อกหรือไม่ บูตโหลดเดอร์


ขอบคุณ Daniel Micay (@แดเนียล มิเคย์) สำหรับความคิดเห็นของเขาเกี่ยวกับเรื่องนี้!