เหตุใดจึงไม่สามารถคัดลอกไบนารี su ได้ (การตอบสนองทางเทคนิคโปรด)


18

ฉันได้รูทอุปกรณ์ Samsung หลายเครื่องและ "เป้าหมาย" พื้นฐานดังนั้นการพูดดูเหมือนว่าจะได้รับsuไบนารีใน/system/xbinและติดตั้งSuperuser.apk Superuser.apk

คำถามของฉันคือเหตุใดจึงต้องข้ามห่วงทั้งหมดเหล่านี้เพื่อรูทโทรศัพท์ (ติดตั้งการกู้คืนที่กำหนดเองและ ROM ก่อนรูทแฟลชหรือใช้ประโยชน์จากการติดตั้งปัจจุบัน) หนึ่งไม่สามารถดาวน์โหลด su precompiled ย้ายไปที่การ์ด SD และเรียกใช้ผ่าน adb? สิ่งที่ดูเหมือนจะทำให้ ROM "pre-rooted" คือมันมี Superuser และไบนารี su ในเส้นทางของระบบตามลำดับ /system/xbinผมไม่เห็นว่าทำไมมันเป็นสิ่งสำคัญเพื่อที่จะวิ่งออกจาก

คำตอบ:


24

su binary ต้องการทั้งการดำเนินการและ setuid bit ที่ได้รับอนุญาต จำเป็นต้องมีไฟล์แรกและไฟล์ที่สองจะถูกเรียกใช้โดยอัตโนมัติด้วยสิทธิ์ของเจ้าของไฟล์ (set user id หรือ setuid ในกรณีนี้เจ้าของคือ root อ่านเพิ่มเติมที่นี่ )

ไฟล์บนที่จัดเก็บข้อมูลภายนอกไม่มีการตั้งค่าบิตสิทธิในการเรียกใช้งานและ setuid และไม่สามารถให้สิทธิ์ได้หากไม่มีสิทธิ์รูท โปรดทราบว่าการ์ด SD นั้นจะถูกเมาท์ด้วยแฟล็ก 'noexec' เพื่อป้องกันการดำเนินการโดยทั่วไปในการบูต:

shell@android:/sdcard $ ./su
/system/bin/sh: ./su: can't execute: Permission denied
126|shell@android:/sdcard $ chmod 4755 su
Unable to chmod su: Operation not permitted
10|shell@android:/sdcard $ mount | grep /mnt/sdcard
/dev/block/mmcblk0p1 /mnt/sdcard vfat [...],noexec,[...]

นั่นเป็นเหตุผลว่าทำไมคุณไม่สามารถคัดลอกsuไปยังการ์ด SD แล้วเรียกใช้เพื่อให้รากของคุณเอง


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

3
@ user974896: ไม่มีที่ไหนอีกแล้วที่ผู้ใช้ที่ไม่ใช่ระบบจะสามารถเรียกใช้งานได้และ Android ไม่มีแม้แต่ไฟล์passwdหรือshadowอะไรก็ตาม คุณต้องการรูทเพื่อวางsuตำแหน่งที่สามารถใช้งานได้ซึ่งเป็นสาเหตุที่วิธีการรูทเกี่ยวข้องกับการใช้ประโยชน์จากการเลื่อนระดับสิทธิ์หรือการกู้คืนแบบกำหนดเอง (ซึ่งการเดิมพันทั้งหมดปิด)
eldarerathis

ใช่. นี่คือคำตอบ
Android Quesito

3
@ user974896: นอกเหนือจาก / sdcard ที่เมาท์ noexec แล้วการเรียกระบบ setuid สามารถเรียกใช้ได้เมื่อบิตสิทธิ suid ถูกตั้งค่าในไฟล์เรียกทำงานและการเรียกระบบ chown และ chmod จะอนุญาตให้รูทตั้งบิต setuid ได้เท่านั้น เป็นเจ้าของโดย root (อย่างมีประสิทธิภาพจะมีเพียง root เท่านั้นที่สามารถสร้างไฟล์ปฏิบัติการที่สามารถรันด้วยสิทธิ์พิเศษของรูท) ทุกคนสามารถเรียก su ได้ แต่ถ้าผู้เรียกได้รับอนุญาตให้ทำในฐานข้อมูล Superuser (หรือใน Linux ดั้งเดิมในฐานข้อมูล passwd / shadow) การโทรจะไม่สำเร็จ เฉพาะแอป Superuser (และกระบวนการพิเศษ) เท่านั้นที่สามารถแก้ไขฐานข้อมูลของ Superuser
โกหกไรอัน

3
@ user974896: สิ่งนี้นอกเหนือจากระบบความปลอดภัยปกติใน Android ที่แอปพลิเคชัน dalvik แต่ละตัวทำงานเป็นผู้ใช้ของตัวเองหมายความว่าแอปพลิเคชันที่ใช้เฉพาะแอปพลิเคชันที่อยู่ในรายการที่อนุญาตพิเศษของ Superuser สามารถเพิ่มระดับเองได้ ในบัญชีดำ) หรือจะทำให้ Superuser แจ้งผู้ใช้เพื่อขออนุญาต
Lie Ryan

5

การรูทเกี่ยวข้องกับการใช้ประโยชน์จากจุดอ่อนขึ้นอยู่กับรุ่น Android ดังนั้น " ข้ามผ่านห่วงทั้งหมดเพื่อรูทโทรศัพท์ "

มันเป็นไก่และไข่!

ในการใช้ประโยชน์จากรูทคุณต้องใช้ adb daemon ที่ไม่ปลอดภัย (เช่นความสามารถในการติดตั้งใหม่ /system ) บนโทรศัพท์มือถือและเพื่อให้มี adb ที่ไม่ปลอดภัยคุณต้องรูท! และคุณต้องมี bootloader ที่ปลดล็อคด้วย

ลองดูที่ช่องโหว่หนึ่งที่เรียกว่าzergRush ที่พบใน github; ฟังก์ชั่นที่น่าสนใจเรียกว่าdo_fault()ที่ความพยายามที่จะ "ทำลาย" สแต็กเฟรมของvolddaemon ของ 's โดยการเชื่อมต่อกับไปป์ที่เป็นเจ้าของมันและทำให้เกิดความผิดพลาดโดยการเขียนตัวชี้กองซ้อนเพื่อชี้ไปที่ เวอร์ชั่นของเชลล์boomshที่รันจาก/data/local/tmpนั้น

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


ขอบคุณสำหรับลิงค์ที่ฉันจะอ่านพวกเขาในภายหลัง ดังนั้นแม้ว่า sdcard จะถูก chmodded 777 จากโรงงานฉันยังไม่สามารถกลายเป็นรากโดยเพียงแค่ดาวน์โหลดและดำเนินการได้หรือไม่
user974896

1
แก้ไข! ไม่ไป! ไม่ทำให้แตกต่างเล็กน้อยและเนื่องจาก ROM ที่ติดตั้งมาจากโรงงานจะมีการป้องกันláคุณจำเป็นต้องรูทเพื่อให้บรรลุ - chmodใช้สิทธิ์ของ SDcard ในการทำเช่นนั้น! :)
t0mm13b

1
แล้วอะไรคือสิ่งที่ทำให้ su พิเศษมากถ้ามันอยู่ใน / system / xbin หากคุณป้อน adb shell (หรือเรียกใช้แอปในฐานะผู้ใช้ปกติ) คุณจะเป็นผู้ใช้ที่ไม่มีสิทธิ์ ทำไมการดำเนินการ su เมื่ออยู่ใน / system / xbin ทำให้คุณรูตเมื่อเทียบกับการทำงานใน chmod 777 / sdcard ในทางทฤษฎีของเรา?
user974896

/system/xbinเป็นไดเรกทอรีที่ยูทิลิตี้ busybox เข้าสู่และ ... ในโทรศัพท์มือถือที่รูทการออกสิ่งนี้echo $PATHจะทำให้/ sbin: / ผู้ขาย / bin: / system / sbin: / system / bin: / system / xbin <- สังเกตมัน! มันอยู่ในเส้นทาง! ในการที่จะมีสิ่งนั้นในนั้นคุณจำเป็นต้องรูทดังนั้นสถานการณ์ของไก่และไข่จำนวนมาก ... : D
t0mm13b

ใช่ฉันรู้ว่านั่นคือสิ่งที่จะไปตามค่าเริ่มต้น สิ่งที่ฉันหมายถึงคือสิ่งที่พิเศษมากเกี่ยวกับการทำงานที่นั่น ทำไมจะดำเนินการ. / su ใน / sdcard /, / data /, หรือไดเรกทอรีที่ไม่จำเป็นต้องใช้รากไม่ทำงานสมมติว่าโรงงานส่ง ROM พร้อมไดเรกทอรี chmodded ที่ 777 สิ่งที่ฉันหมายถึงเป็นสิ่งเดียวที่หยุดหนึ่งจากการดาวน์โหลด และการรัน. / su คือความจริงที่ว่าไดเรกทอรีที่ผู้ใช้ที่ไม่ใช่รูทสามารถทำสิ่งนี้ได้ซึ่งไม่สามารถเรียกใช้งานได้หรือมีภาพที่ใหญ่กว่า
user974896
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.