ช่องโหว่ร้ายแรงใน Bootloader ของ OnePlus 3/3T ทำให้ผู้โจมตีสามารถสลับสถานะ SELinux จาก Enforcing เป็น Permissive! อ่านต่อเพื่อทราบข้อมูลเพิ่มเติม!
ที่ โอเปิ้ล 3 และ โอเปิ้ล 3T เป็นหนึ่งในโทรศัพท์ที่ดีที่สุดที่คุณสามารถซื้อได้ตอนนี้ ในขณะที่เรือธงที่กำลังจะมาถึงของปี 2560 ยังไม่ได้เปิดเผยต่อผู้บริโภค OnePlus 3/3T ครองประสิทธิภาพในโลกแห่งความเป็นจริง ในราคาที่เหมาะสม
แต่ถ้าเราจะให้ความยุติธรรมในการประเมินอุปกรณ์ เราต้องรับทราบว่าแม้ OnePlus จะพยายามอย่างดีที่สุดแล้ว แต่ OnePlus 3/3T ก็ไม่ได้ปราศจากข้อบกพร่อง ตัวอย่างเช่น ก่อนหน้านี้เราได้รายงานปัญหาด้านความปลอดภัยเช่น OnePlus เปิดเผยรายละเอียด IMEI ผ่านเครือข่ายเมื่อคุณตรวจสอบการอัปเดตบนโทรศัพท์ของคุณ และตอนนี้ เรามีปัญหาด้านความปลอดภัยอีกประการหนึ่งที่จะเพิ่มลงในรายการ ซึ่งปัญหาดังกล่าวอาจมีการแตกสาขาที่เป็นอันตรายมากกว่า
ช่องโหว่ใน Bootloader ของ OnePlus 3/3T เปิดประตูสู่การโจมตีที่เป็นอันตราย ตามที่ค้นพบโดย Roee Hay จากทีมวิจัยความปลอดภัยของแอปพลิเคชัน IBM X-Force และ เปิดเผยบนแพลตฟอร์ม IBM X-Force Exchangeช่องโหว่นี้ทำให้ผู้โจมตีสามารถจัดการสถานะ SELinux บนอุปกรณ์ได้ ดังนั้นจึงสลับเป็นโหมดอนุญาต ความต้องการของผู้โจมตีทั้งหมดคือ
การเข้าถึงทางกายภาพ ไปยังอุปกรณ์หรือ การเข้าถึงการเชื่อมต่อ ADB จากระยะไกล ไปยังอุปกรณ์ซีลีนุกซ์หรือ Security-Enhanced Linux คือโมดูลความปลอดภัยเคอร์เนล Linux ซึ่งช่วยให้สามารถเข้าถึงและจัดการนโยบายความปลอดภัยได้ SELinux ได้รับการแนะนำให้รู้จักกับ Android โดยเริ่มจาก Android 4.3 และได้รับการตั้งค่าเป็น การบังคับใช้ โหมดเป็นค่าเริ่มต้นตั้งแต่ Android 4.4 ระบบควบคุมการเข้าถึงที่จำเป็นนี้จะช่วยบังคับใช้สิทธิ์การควบคุมการเข้าถึงที่มีอยู่และความพยายามในการป้องกันการโจมตีที่ยกระดับสิทธิ์ สิ่งนี้ทำหน้าที่เป็นอุปสรรคในการควบคุมอุปกรณ์ของคุณโดยไม่ได้รับอนุญาต เช่น แอพหรือช่องโหว่ที่มีเป้าหมายเพื่อเข้าถึงรูทอย่างประสงค์ร้าย การตั้งค่า SELinux เป็น การบังคับใช้ โดยค่าเริ่มต้นบน Android ทำหน้าที่เป็นขั้นตอนแรกในการปกป้องผู้ใช้ปกติจากการโจมตีดังกล่าว
ช่องโหว่นี้ค่อนข้างตรงไปตรงมาในการหาประโยชน์ - อันที่จริงดูเหมือนว่าจะเป็นการกำกับดูแลอย่างมากในส่วนของ OnePlus มากกว่าที่คุณจะจินตนาการถึงการใช้ประโยชน์โดยทั่วไปของคุณ ขั้นแรก ผู้โจมตีจะรีบูท OnePlus 3/3T เข้าสู่โหมด 'fastboot' - หากคุณมีการเข้าถึงทางกายภาพ เพียงกดปุ่มเพิ่มระดับเสียงระหว่างการบู๊ต แต่ถ้าคุณทำไม่ได้ คุณสามารถออกคำสั่ง ADB ได้ adb reboot bootloader
ไปยังอุปกรณ์ โหมด fastboot บนอุปกรณ์จะแสดงอินเทอร์เฟซ USB ซึ่งไม่ควรอนุญาตให้คำสั่งที่ละเอียดอ่อนด้านความปลอดภัยดำเนินการบนอุปกรณ์ที่ล็อคไว้ แต่ใน OnePlus 3/3T เพียงแค่ออก fastboot oem selinux permissive
คำสั่งผ่านอินเทอร์เฟซ fastboot จะสลับโหมด SELinux จาก การบังคับใช้ ถึง อนุญาต.
fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s...
OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $
เพื่อให้ปัญหาซับซ้อนยิ่งขึ้น OnePlus 3 และ 3T ไม่มีรายการใด ๆ ใน 'เกี่ยวกับหน้าจอ' เพื่อกล่าวถึงสถานะ SELinux ปัจจุบันของอุปกรณ์ เหยื่อจะยังคงไม่รับรู้ถึงสถานะที่ถูกบุกรุกของอุปกรณ์ของตน หากพวกเขาไม่เห็นว่ามีการใช้งานช่องโหว่นี้อย่างแข็งขัน การไม่มีรายการสถานะ SELinux ใน 'เกี่ยวกับหน้าจอ' หายไปจากทั้งรุ่น Open Beta ที่ใช้ Android 6.0 และ ROM อย่างเป็นทางการของ Android 7.0
มีแอพหลายตัวที่จะสลับสถานะ SELinux เป็น Permissive เช่น SELinuxModeChanger แอปพลิเคชัน. การสลับ SELinux ด้วยวิธีนี้ไม่อนุญาตให้สถานะคงอยู่ผ่านการรีบูต แม้ว่าคุณสามารถทำได้ ใช้สคริปต์ เพื่อรักษา อนุญาต สถานะของ SELinux ในการรีบูตอย่างหนัก ทั้งสองวิธีนี้จำเป็นต้องมีการเข้าถึงรูท ซึ่งหมายความว่าผู้ใช้มีความรู้เกี่ยวกับความเสี่ยงที่พวกเขาเผชิญอยู่แล้ว แต่ความแตกต่างที่สำคัญกับการเปลี่ยนโหมด SELinux เป็น อนุญาต การใช้ช่องโหว่ข้างต้นนั้นไม่ใช่เพียงเท่านั้น ยังคงมีอยู่ในระหว่างการรีบูตอย่างหนักมันก็เป็นเช่นนั้น โดยไม่จำเป็นต้องเข้าถึงรูท.
ยังไม่มีวิธีแก้ไขช่องโหว่ ณ ปัจจุบันนี้
อัปเดต:
เราก็เอื้อมมือออกไป สุลต่านคดาซึ่งเป็นหนึ่งในนักพัฒนา ROM แบบกำหนดเองที่ได้รับการยอมรับมากที่สุดสำหรับอุปกรณ์ OnePlus เพื่อดูว่าเขาสามารถช่วยเราเรียนรู้เพิ่มเติมเกี่ยวกับปัญหานี้ได้หรือไม่ เขาขุดโค้ดทันทีเพื่อค้นหาแหล่งที่มาของราก นี่คือสิ่งที่เขาพบ:
วิธีที่ "fastboot oem selinux
- ผู้ใช้สามารถกำหนดให้ bootloader ผ่านแฟล็กที่ปกติแล้วจะทำให้ selinux อนุญาตบนบิลด์ ROM ทางวิศวกรรม/การดีบัก
- OnePlus แก้ไข init ของ Android เพื่อเป็นเกียรติแก่การตั้งค่าสถานะ "androidboot.selinux" แม้กระทั่งสำหรับ ROM ที่ใช้งานจริง
นี่คือจุดที่การกำหนดค่า init ของ Android ให้ละเว้นแฟล็ก "androidboot.selinux" สำหรับบิลด์ที่ใช้งานจริง: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7
การตั้งค่าสถานะ ALLOW_DISABLE_SELINUX ในซอร์สโค้ดถูกตั้งค่าเป็น 1 เท่านั้นสำหรับ userdebug และงานสร้างทางวิศวกรรม
(ROM ของฉันไม่ได้รับผลกระทบจากสิ่งนี้เพราะฉันสร้าง ROM ในโหมดการใช้งานจริง (ผู้ใช้))
ดังนั้น "androidboot.selinux" จึงถูกละเลยใน ROM ของฉัน "fastboot oem selinux
- แก้ไข bootloader แบบ Hex เพื่อเปลี่ยนอินสแตนซ์ทั้งหมดของสตริง "selinux" เป็นอย่างอื่น (เช่น "sclinux") เพื่อให้ init ของ Android ไม่รู้จักการตั้งค่าสถานะ
- แก้ไขไบนารีเริ่มต้นของ Android ใน OxygenOS เพื่อแทนที่อินสแตนซ์ทั้งหมดของ "androidboot.selinux" เป็น สิ่งที่แตกต่างออกไป (เช่น "androidboot.sclinux") เพื่อให้ Android init ไม่รู้จัก การตั้งค่าสถานะ androidboot.selinux
- เพิ่มแฮ็คลงในไดรเวอร์บรรทัดคำสั่งเคอร์เนลที่คล้ายกับ SafetyNet บายพาสของฉันเพื่อซ่อนการตั้งค่าสถานะ "androidboot.selinux" จาก init ของ Android
เราขอขอบคุณ Sultanxda สำหรับเวลาและความพยายามของเขาในการช่วยให้เราทราบว่าเกิดอะไรขึ้นเบื้องหลัง นอกจากนี้เรายังติดต่อกับ OnePlus ซึ่งทราบสถานการณ์และกำลังพิจารณาเรื่องนี้อยู่
เราหวังว่า OnePlus จะรับทราบถึงปัญหาร้ายแรงนี้ต่อสาธารณะ และมีแผนการแก้ไขปัญหาอย่างโปร่งใส