มีอุปกรณ์ใดของ Google ที่รองรับความสามารถในเคอร์เนลเริ่มต้นหรือไม่


14

ถ้าฉันรูทแบบไร้ระบบ (ไม่มีการดัดแปลงแก้ไข/systemพาร์ติชั่น) อุปกรณ์ Nexus ฉันจะสามารถตั้งค่าความสามารถของไฟล์ปฏิบัติการได้โดยไม่ต้องเปลี่ยนไบนารีเคอร์เนลดั้งเดิมหรือไม่

ฉันมักจะต้องการที่จะจัดการไฟล์โดยไม่มีข้อ จำกัด จากสถานีของฉัน(ต้องCAP_DAC_READ_SEARCH ) อย่างไรก็ตามฉันไม่ต้องการใช้ superuser
สิ่งที่จำเป็นต้องใช้เป็นเครื่องมือสำหรับการตั้งค่าหมวกพร้อมสนับสนุนโปรแกรมสำหรับใช้พวกเขา(มันไม่ได้ขึ้นอยู่กับสิ่งที่ผู้ใช้พื้นที่อื่น ๆ )

ปัญหาคือฉันไม่ได้เป็นเจ้าของอุปกรณ์ดังกล่าว ดังนั้นผมจึงไม่สามารถบอกได้ว่ามันจะทำงานใด ๆ Nexus 5X Nexus 6P Nexus 9 Pixel Cของ


2
ฉันยังไม่สามารถหาตัวจำลองเน็กซัสได้ด้วย
2284570

ฉันสงสัยว่า ... เนื่องจาก Android ใช้ Bionic libc และไม่ใช่ไลบรารี GNU libc (glibc) มาตรฐานจึงไม่ได้ใกล้เคียงกับ POSIX คุณอาจจะสามารถรวบรวมเคอร์เนลของคุณเองด้วย libc อื่นเช่น CrystaX NDK แทนที่จะเป็น Bionic แต่ฉันไม่รู้ว่าฟีเจอร์เหล่านั้นอยู่ในนั้นหรือไม่
acejavelin

@acejavelin: ส่วนของ userland จำเป็นสำหรับการตั้งค่าคุณสมบัติเพิ่มเติมที่มีความสามารถเท่านั้น ทุกอย่างอื่นคือด้านเคอร์เนล ฉันเพิ่งสังเกตเห็น/system/bin/pingคำสั่งไม่ได้ setuid CAP_NET_RAWบนอุปกรณ์ซัมซุงของฉันจริงบอก อย่างไรก็ตามฉันจะไม่รูทอุปกรณ์จริงและฉันไม่รู้ว่าเครื่องมือใดที่ฉันสามารถใช้เพื่อดูข้อมูลที่เกี่ยวข้องดังนั้นฉันจึงไม่สามารถตรวจสอบได้
user2284570

ทำไมคุณไม่รูทอุปกรณ์ Nexus? มันมีไว้สำหรับการนั้นและไม่ทำให้การรับประกันของคุณเป็นโมฆะ มันง่ายมากที่จะกู้คืนอุปกรณ์ Nexus ให้เป็นค่าเริ่มต้น unrooted และล็อคสถานะอุปกรณ์นั้นโดยทั่วไปจะไม่สามารถเข้าถึงได้
acejavelin

@acejavelin: ฉันไม่ได้เป็นเจ้าของอุปกรณ์เชื่อมต่อ ... เป้าหมายของฉันคือการวิจัยด้านความปลอดภัยและ Google จะให้รางวัลสำหรับอุปกรณ์ของตัวเองเท่านั้น ดังนั้นฉันจำเป็นต้องรู้ว่าเคอร์เนลของหนึ่งในอุปกรณ์ในคำถามของฉันสนับสนุนโดยใช้ความสามารถ xattr หรือไม่ สิ่งที่ฉันเห็นบนแท็บกาแล็กซี่ของฉันอาจเกี่ยวข้องกับซัมซุงเท่านั้น ถ้าฉันไม่ได้เกี่ยวข้องกับการขจัดในคำถามของฉันมันอาจจะปิดเป็นความชัดเจน
2284570

คำตอบ:


1

แม้ว่าคำถามจะเก่า แต่ก็ยังคงปรากฏอยู่ด้านบนของคำถามที่ยังไม่ได้ตอบ (แท็กของฉัน) ดังนั้นฉันคิดว่าฉันควรตอบคำถามนี้ :)

การสนับสนุนของ AOSP สำหรับความสามารถ:

คำถามเกี่ยวกับอุปกรณ์ Google โดยเฉพาะฉันไม่เคยใช้อุปกรณ์ Google อย่างไรก็ตามสิ่งที่ฉันสามารถพูดได้อย่างแน่นอนคือความสามารถของลินุกซ์ (กระบวนการ) ต้องเปิดใช้งานในอุปกรณ์ส่วนใหญ่ พบการอ้างอิงในinitและsystem_serverทั้งองค์ประกอบหลักของ AOSP ยกตัวอย่างเช่นใน Android 4.2 ซึ่งเป็นinstalldส่วนประกอบหลักอีกตัวหนึ่งถูกสร้างขึ้นมาเพื่อให้ทำงานได้ด้วยขีดความสามารถที่ลดลง

ความสามารถของระบบไฟล์เป็นหนึ่งในการปรับปรุงความปลอดภัยที่สำคัญใน Android 4.3ซึ่งลบset-uid/ ออกset-gidจากไบนารีเช่นrun-asการตั้งค่าความสามารถของไฟล์ในพวกเขา สิ่งนี้ทำให้เกิดการเปลี่ยนแปลงในการปฏิวัติการเดินทางของ Android

รองรับความสามารถรอบข้างใน Android 8 ซึ่งไม่สนับสนุนการใช้ความสามารถของไฟล์:

ในทางกลับกันความสามารถของไฟล์นำเสนอความเสี่ยงด้านความปลอดภัยเนื่องจากกระบวนการใด ๆ ที่ดำเนินการกับไฟล์ที่มีความสามารถของไฟล์จะสามารถรับความสามารถเหล่านั้นได้

initบริการหลายอย่างขึ้นอยู่กับพวกเขาเช่นstoragedรวมถึงของตัวเองsshdและdnscrypt-proxyบริการ

การสนับสนุนของ KERNEL สำหรับความสามารถ:

การมาถึงส่วนของเคอร์เนลการสร้างเคอร์เนลที่ไม่มีความสามารถไม่ใช่ทางเลือก:

จากเคอร์เนล 2.5.27 ถึงเคอร์เนล 2.6.26 ความสามารถเป็นองค์ประกอบเคอร์เนลเผื่อเลือกและสามารถเปิด / ปิดการใช้งานผ่านทางตัวเลือกการกำหนดค่าเคอร์เนลCONFIG_SECURITY_CAPABILITIES

และ:

ในเคอร์เนลก่อน Linux 2.6.33 ความสามารถของไฟล์เป็นคุณสมบัติเสริมที่สามารถกำหนดค่าได้ผ่านตัวเลือกCONFIG_SECURITY_FILE_CAPABILITIES ตั้งแต่ Linux 2.6.33 ตัวเลือกการกำหนดค่าจะถูกลบและความสามารถของไฟล์จะเป็นส่วนหนึ่งของเคอร์เนลเสมอ

เคอร์เนลรุ่นที่เก่าแก่ที่สุดบน Android ที่เก็บคือ 2.6.39 ซึ่งรวมถึงการรองรับความสามารถของไฟล์ด้วย

การสนับสนุนความสามารถของระบบไฟล์ในฝั่งเคอร์เนลจะต้องล่าช้าจาก OEM บางตัว แต่ต้องเปลี่ยนเพราะฟังก์ชั่นจะแตก ตัวอย่างเช่นsurfaceflinger( ผู้แต่งพื้นผิวของ Android ) จะไม่ทำงานหากไม่มีความสามารถของไฟล์ตั้งแต่ Android 7.1

เคอร์เนล Mainline Linux 4.3 ได้รับการติดตั้งในกันยายน 15 สำหรับความสามารถของ Ambient (โปรเซส), backportedเป็น Android kernel 3.18 และ 4.1 ในปี 2559 ดังนั้นจึงจำเป็นต้องเป็นส่วนหนึ่งของเคอร์เนล

สรุป:

บน Linux distros มีโปรแกรมเพียงไม่กี่โปรแกรมที่ใช้ประโยชน์จากความสามารถของ Linux แม้ว่าจะมีpam_capส่วนใหญ่ (หรือทั้งหมด?) distros ยังคงใช้set-uidในsu, sudo, ping, mount, passwdและอื่น ๆ แต่ความสามารถของ Android นั้นรวมอยู่ในกรอบและบริการหลักอย่างลึกซึ้ง การลบออกจะต้องแก้ไขหลายร้อยหรืออาจเป็นหลายพันบรรทัดใน AOSP และเคอร์เนลซอร์ส มันทำให้รู้สึกไม่ว่า OEM (โดยเฉพาะ Google ผู้พัฒนา AOSP และแก้ไขเคอร์เนลลินุกซ์สำหรับ Android) ไม่ได้ทำให้การใช้งานนี้ฟรีค่าใช้จ่ายคุณลักษณะด้านความปลอดภัยเมื่อพร้อมใช้งานใน Android เคอร์เนล มันเป็นคุณสมบัติที่เกี่ยวข้องกับระบบปฏิบัติการบริสุทธิ์ไม่ต้องการการสนับสนุนฮาร์ดแวร์เพิ่มเติมใด ๆ ดังนั้นโทรศัพท์จากผู้ผลิตใด ๆ จะต้องมีความสามารถรองรับ


คำถาม:

ฉันจะสามารถตั้งค่าความสามารถในการปฏิบัติการได้โดยไม่ต้องเปลี่ยนเคอร์เนลไบนารีเดิมหรือไม่

ใช่คุณต้องเป็น

สิ่งที่ต้องการเป็นเครื่องมือสำหรับการตั้งค่าตัวพิมพ์ใหญ่ ...

ฉันได้ใช้capsh, getcap, setcap, getpcapsจากlibcapและnetcap, pscapจากlibcap-ngไม่มีปัญหาใด ๆ แต่ฉันชอบความสามารถของ Ambient ซึ่งง่ายต่อการกำหนดค่าและไม่ขึ้นอยู่กับคุณสมบัติของระบบไฟล์ใด ๆ เช่นExtended Attributesเหมือนกับในกรณีของความสามารถของไฟล์ นอกจากนี้คุณยังสามารถใช้listxattr, getxattr, setxattrและremovexattrเครื่องมือที่ได้จากxattr_syscall_wrapperการจัดการsecurity.capabilityหรือ XATTR อื่น ๆ โดยตรง

จากความคิดเห็นของคุณ:

ฉันเพิ่งสังเกตเห็น/system/bin/pingคำสั่งไม่ได้setuidอยู่ในอุปกรณ์ Samsung ที่แท้จริงของฉันCAP_NET_RAW

ของ Android ปิงไม่ได้มีมิได้set-uid CAP_NET_RAWมันสร้างซ็อกเก็ตที่ไม่ใช่ RAWพิเศษIPPROTO_ICMPซึ่งแตกต่างจากIPPROTO_RAW- ไม่ต้องใช้สิทธิ์ใด ๆ


ข้อมูลอ้างอิงเพิ่มเติม:

นอกเหนือจากการอ้างอิงมากกว่า 10 รายการแล้วนี่คือส่วนอื่น ๆ ของรหัส AOSP ที่รองรับและใช้ประโยชน์จากความสามารถของ Linux:

  • องค์ประกอบหลัก:ไบโอนิคlibc, init, trusty(OS)
  • ส่วนประกอบภายนอก: libcap ,libcap-ng
  • ภูต / บริการ: zygote (คดเคี้ยวและแอพพลิเคsystem_server) hostapd, wpa_supplicant, dnsmasq, logd, netd( NetLinkผู้จัดการ DNS เอกชน) debuggerd(ทดสอบ) sdcardภูต, performanced, incidentd, mtpd, traced_probes(Perfetto) racoon(IPSec) wificondจำนวนภูต HAL rildรวมทั้ง
  • executables: reboot (init) dumpstate, tcpdump, strace, iputils( ping, tracerouteฯลฯ )
  • Minijail:เครื่องมือและห้องสมุด sandboxing เฉพาะซึ่งหมุนรอบความสามารถ adbdใช้ประโยชน์จากห้องสมุดนี้เพื่อยกเลิกสิทธิ์
  • SELinuxใช้capabilityคลาสเพื่อให้ / ปฏิเสธความสามารถในโดเมน

สรุปได้ว่า Android ขึ้นอยู่กับความสามารถของ Linux เป็นอย่างมากไม่ใช่คุณสมบัติที่ใช้เพียงเล็กน้อย


ที่เกี่ยวข้อง:


ไม่ตอบอะไรเลย ทุกสิ่งที่คุณกล่าวว่าเป็นที่รู้จักกัน ประเด็นของคำถามก็คือเพราะมันใช้งานไม่บ่อยนักเพราะอุปกรณ์ของ Google รวมอยู่ด้วย
2284570
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.