แพลตฟอร์ม Android ใช้ประโยชน์จากการปกป้องตามผู้ใช้ของ Linux เพื่อระบุและแยกทรัพยากรของแอป วิธีนี้จะแยกแอปออกจากกันและ ปกป้องแอปและระบบจากแอปที่เป็นอันตราย ในการดำเนินการนี้ Android จึงกำหนด รหัสผู้ใช้ (UID) ที่ไม่ซ้ำกันไปยังแอป Android แต่ละแอป และเรียกใช้ในแอปนั้นๆ ขั้นตอนได้
Android ใช้ UID เพื่อตั้งค่าแซนด์บ็อกซ์ระดับแอปพลิเคชันของเคอร์เนล แกนหลักจะบังคับใช้ความปลอดภัยระหว่างแอปกับระบบที่ระดับกระบวนการผ่านสิ่งอํานวยความสะดวกมาตรฐานของ Linux เช่น รหัสผู้ใช้และกลุ่มที่กําหนดให้กับแอป โดยค่าเริ่มต้น แอปจะโต้ตอบกันไม่ได้และเข้าถึงระบบปฏิบัติการได้แบบจํากัด หากแอป A พยายามทำสิ่งที่เป็นอันตราย เช่น ข้อมูลของแอป B หรือโทรเข้าโทรศัพท์โดยไม่ได้รับอนุญาต จะทำให้ เนื่องจากไม่มีสิทธิ์เริ่มต้นที่เหมาะสมของผู้ใช้ Sandbox นั้นใช้งานง่าย ตรวจสอบได้ และอิงตามการแยกกระบวนการและสิทธิ์ของไฟล์ของผู้ใช้สไตล์ UNIX ที่ใช้กันมานานหลายทศวรรษ
เนื่องจาก Application Sandbox อยู่ในเคอร์เนล โมเดลการรักษาความปลอดภัยนี้ ใช้ได้กับทั้งโค้ดแบบเนทีฟและแอประบบปฏิบัติการ ซอฟต์แวร์ทั้งหมดที่อยู่เหนือ เคอร์เนล เช่น ไลบรารีระบบปฏิบัติการ เฟรมเวิร์กของแอป รันไทม์ของแอป และ ทั้งหมดทำงานภายใน Application Sandbox ในบางแพลตฟอร์ม ถูกจำกัดอยู่เฉพาะในกรอบการพัฒนา ชุด API หรือ ภาษา ใน Android จะไม่มีข้อจำกัดเกี่ยวกับ เป็นลายลักษณ์อักษรที่จะบังคับใช้การรักษาความปลอดภัย ในเรื่องนี้ โค้ดแบบเนทีฟคือ เป็นแซนด์บ็อกซ์กับโค้ดที่ตีความ
การป้องกัน
โดยทั่วไป เพื่อแยกออกจาก Application Sandbox ด้วยการกำหนดค่าอย่างถูกต้อง อุปกรณ์ของคุณต้องมีความเสี่ยงต่อความปลอดภัยของเคอร์เนลของ Linux อย่างไรก็ตาม การป้องกันแต่ละรายการที่บังคับใช้แซนด์บ็อกซ์ของแอปก็ไม่สามารถป้องกันได้ทั้งหมด เช่นเดียวกับฟีเจอร์ด้านความปลอดภัยอื่นๆ ดังนั้นการป้องกันแบบหลายชั้นจึงมีความสำคัญเพื่อป้องกันไม่ให้ช่องโหว่เดียวนำไปสู่การประนีประนอมระบบปฏิบัติการหรือแอปอื่นๆ
Android ใช้การป้องกันหลายอย่างเพื่อบังคับใช้แอป แซนด์บ็อกซ์ การบังคับใช้เหล่านี้เริ่มขึ้นตลอด ทำให้ได้ เพิ่มความเข้มงวดให้กับการควบคุมการเข้าถึงโดยพิจารณาตาม UID เดิม (DAC) Android รุ่นก่อนหน้าประกอบด้วยรายการต่อไปนี้ การป้องกัน:
- ใน Android 5.0 SELinux ให้บริการการแยกการควบคุมการเข้าถึง (MAC) ที่จำเป็น ระหว่างระบบกับแอปได้ แต่แอปของบุคคลที่สามทั้งหมดจะทำงานภายใน บริบท SELinux เพื่อบังคับใช้การแยกระหว่างแอปโดยใช้ UID DAC เป็นหลัก
- ใน Android 6.0 เราได้ขยายแซนด์บ็อกซ์ SELinux เพื่อแยกแอปจาก
ขอบเขตต่อผู้ใช้จริง นอกจากนี้ Android ยังตั้งค่าเริ่มต้นที่ปลอดภัยขึ้นสำหรับ
ข้อมูลแอป: สำหรับแอปที่มี
targetSdkVersion >= 24
(ค่าเริ่มต้น) สิทธิ์ DAC ในไดเรกทอรีหน้าแรกของแอปเปลี่ยนจาก 751 เป็น 700 ส่วนนี้ระบุไว้ ค่าเริ่มต้นที่ปลอดภัยมากขึ้นสำหรับข้อมูลแอปส่วนตัว (แต่แอปจะลบล้างตัวเลือกเหล่านี้ได้ เริ่มต้น) - ใน Android 8.0 แอปทั้งหมดได้รับการตั้งค่าให้ทำงานด้วย
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
seccomp-bpf
- ใน Android 9 แอปที่ไม่มีสิทธิ์ทั้งหมดที่มี
targetSdkVersion >= 28
ต้องทำงานในแซนด์บ็อกซ์ SELinux แต่ละรายการ โดยระบุ MAC ตามแอป การปกป้องนี้ช่วยปรับปรุงการแยกแอป รวมถึงป้องกันไม่ให้การลบล้างปลอดภัย ค่าเริ่มต้น และ (ที่สำคัญที่สุด) จะป้องกันไม่ให้แอปสร้างโลกของข้อมูล สามารถเข้าถึงได้ - ในแอป Android 10 มีมุมมองข้อมูลดิบที่จำกัดของ ระบบไฟล์ที่ไม่มีการเข้าถึงเส้นทาง เช่น /sdcard/DCIM โดยตรง อย่างไรก็ตาม แอป ยังคงมีสิทธิ์แบบเต็มในการเข้าถึงเส้นทางเฉพาะแพ็กเกจ ตามที่ระบบส่งคืน เมธอดที่เกี่ยวข้อง เช่น Context.getExternalFilesDir()
หลักเกณฑ์ในการแชร์ไฟล์
การตั้งค่าข้อมูลแอปให้เข้าถึงได้ทั่วโลกเป็นแนวทางปฏิบัติด้านความปลอดภัยที่ไม่ดี ระบบจะให้สิทธิ์เข้าถึงแก่ทุกคนและไม่สามารถจํากัดสิทธิ์เข้าถึงเฉพาะผู้รับที่ต้องการได้ การทำเช่นนี้ทำให้ข้อมูลรั่วไหลและเกิดความสับสน
ช่องโหว่ที่เป็นอันตราย และเป็นที่ชื่นชอบสำหรับมัลแวร์ซึ่งกำหนดเป้าหมายไปยังแอป
ข้อมูลที่ละเอียดอ่อน (เช่น โปรแกรมรับส่งอีเมล) ใน Android 9 ขึ้นไป การแชร์
ไฟล์ในลักษณะนี้ไม่ได้รับอนุญาตอย่างชัดเจนสำหรับแอปที่มี
targetSdkVersion>=28
ใช้หลักเกณฑ์ต่อไปนี้แทนการเผยแพร่ข้อมูลแอปให้เข้าถึงได้ทั่วโลก เมื่อแชร์ไฟล์:
- หากแอปของคุณต้องการแชร์ไฟล์กับแอปอื่น ให้ใช้ Content Provider ผู้ให้บริการเนื้อหาแชร์ข้อมูลโดยมีรายละเอียดที่เหมาะสม และเมื่อไม่มีข้อเสียมากมายของสิทธิ์ UNIX ที่เข้าถึงได้ทั่วโลก รายละเอียด โปรดดูที่ ข้อมูลเบื้องต้นเกี่ยวกับผู้ให้บริการเนื้อหา)
- หากแอปมีไฟล์ที่ผู้ใช้ทุกคนควรเข้าถึงได้จริงๆ (เช่น รูปภาพ) ไฟล์เหล่านั้นต้องเป็นไฟล์สื่อโดยเฉพาะ (รูปภาพ วิดีโอ และไฟล์เสียงเท่านั้น) และจัดเก็บโดยใช้คลาส MediaStore (สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเพิ่มสื่อ รายการ โปรดดูที่ เข้าถึงไฟล์สื่อจากพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน)
สิทธิ์รันไทม์ของพื้นที่เก็บข้อมูลจะควบคุมการเข้าถึง
ไปจนถึงคอลเล็กชันที่มีการพิมพ์อย่างเข้มงวดผ่าน MediaStore
สำหรับการเข้าถึงไฟล์ที่พิมพ์น้อย เช่น PDF และคลาส MediaStore.Downloads แอปต้องใช้
Intent เช่น Intent ACTION_OPEN_DOCUMENT
หากต้องการเปิดใช้ลักษณะการทำงานของ Android 10 ให้ใช้
ไฟล์ Manifest requestLegacyExternalStorage
รายการ
และทำตามแนวทางปฏิบัติแนะนำเกี่ยวกับสิทธิ์ของแอป
- ค่าเริ่มต้นของแฟล็กไฟล์ Manifest คือ
true
สำหรับ แอปที่กำหนดเป้าหมายเป็น Android 9 (และต่ำกว่า) - ค่าเริ่มต้นคือ false สำหรับแอปที่กำหนดเป้าหมายเป็น Android 10 หากต้องการเลือกไม่ใช้มุมมองพื้นที่เก็บข้อมูลที่กรองชั่วคราวในแอปที่กําหนดเป้าหมายเป็น Android 10 ให้ตั้งค่า Flag ของไฟล์ Manifest เป็น
true
- โปรแกรมติดตั้งจะเพิ่มแอปในรายการที่อนุญาตเพื่อใช้สิทธิ์ที่จำกัด อนุญาตให้ใช้พื้นที่เก็บข้อมูลที่ไม่ใช่แซนด์บ็อกซ์ แอปที่ไม่อนุญาต ได้แก่ โดยใช้แซนด์บ็อกซ์