เหตุใดแอปพลิเคชัน Android แต่ละเครื่องจึงใช้กระบวนการ Dalvik VM ที่แตกต่างกัน


10

ฉันได้อ่านแล้วว่าแอพพลิเคชั่น Android แต่ละตัวนั้นใช้กระบวนการ Dalvik VM ที่แตกต่างกัน (แยกจาก zygote)

ฉันยังอ่านด้วยว่า VM เหล่านี้มีน้ำหนักเบามากและใช้การคัดลอกบนบัฟเฟอร์การเขียนและทั้งหมดนั้นดีมาก

แต่ฉันก็อ่านด้วยว่าสิ่งนี้ไม่ได้ทำเพื่อเหตุผลด้านความปลอดภัย (เช่นแยก) - ในความเป็นจริง dalvik vm ไม่ควรถูกพิจารณาว่าเป็นขอบเขตความปลอดภัย Google กล่าว

ดังนั้นคำถามของฉันคือ: ทำไมแต่ละกระบวนการต้องทำงานบน VM ที่แตกต่างกัน?

คำตอบ:


11

ใน Android แอปพลิเคชันทุกตัวจะทำงานเป็นผู้ใช้แยกต่างหาก ในเคอร์เนล Linux แต่ละกระบวนการเป็นเจ้าของโดยผู้ใช้คนเดียวดังนั้นจึงไม่สามารถเรียกใช้แอปพลิเคชัน Dalvik หลายรายการในกระบวนการ Linux เดียว

โอเวอร์เฮดของการใช้งานหลายอินสแตนซ์ของ Dalvik VM นั้นมีน้ำหนักเบาเนื่องจากการfork()เรียกระบบLinux เป็นการคัดลอกเมื่อเขียนการเขียนไปยังหน้า COW ที่ใช้ร่วมกันจะทำให้เกิด "ข้อผิดพลาดของหน้า" และหน้านั้นจะถูกคัดลอก ดังนั้นแม้ว่าพื้นที่หน่วยความจำของ VM ส่วนใหญ่ใน RAM จะถูกแชร์ไม่มี "สถานะที่ใช้ร่วมกัน" ระหว่าง VM

กระบวนการแยกให้แยกเฉพาะสถานะ แต่ไม่แยกสิทธิ์

dalvik vm ไม่ควรถูกพิจารณาว่าเป็นขอบเขตความปลอดภัย

นั่นเป็นเพราะ VM ไม่สามารถบังคับใช้ขอบเขตความปลอดภัย VM กำลังทำงานในโหมดผู้ใช้ (โหมดเดียวกับโปรแกรมที่กำลังดำเนินการ) ซึ่งหมายถึงจุดบกพร่องใน VM อาจทำให้แอปพลิเคชันสามารถแก้ไขสถานะ VM ได้ในลักษณะที่ไม่ได้ตั้งใจ เคอร์เนลทำงานในโหมดที่มีสิทธิพิเศษและสามารถบังคับใช้ขอบเขตความปลอดภัยได้


4

กระบวนการ Dalvikvm แต่ละกระบวนการทำงานภายใต้สภาพแวดล้อมแบบกล่องทรายที่เป็นเจ้าของโดยรหัสผู้ใช้ ( uid) ของแอปพลิเคชันที่ทำงานอยู่นั้นควรสังเกตว่าเมื่อติดตั้งแอปพลิเคชันแล้วuidจะได้รับการจัดสรรและกำหนดให้กับ

ผลลัพธ์สุทธิคือแอปพลิเคชันที่ทำงานอยู่แต่ละโปรแกรมไม่สามารถเหยียบย่ำกระบวนการของผู้อื่นได้เนื่องจากการuidมอบหมายที่แตกต่างกันซึ่งเป็นการป้องกันแอปที่รันอยู่

วิธีการมองที่มันก็คือนี้ - มีมีเป็นหนึ่งที่พบบ่อยuidสำหรับทุกการใช้งานแล้วใช้ที่เป็นอันตรายสามารถจริงๆทำให้เกิดความเสียหายเป็น peering สู่การตั้งค่าของคนแทนที่ตัดรหัสเรียกใช้โปรแกรมประยุกต์อื่นและทำทุกประเภทของสิ่งที่ไม่ดีTMที่ ใบสมัคร


3

Dalvik VM ไม่ได้จัดเตรียมขอบเขตการรักษาความปลอดภัย แต่เคอร์เนลได้จัดเตรียมขอบเขตด้านความปลอดภัยในแง่ของกระบวนการที่ VM ใช้งานนั่นเป็นสาเหตุที่ยกตัวอย่างเช่นมันไม่ใช่เรื่องใหญ่สำหรับแอปพลิเคชัน Android ในการเรียกใช้รหัสเนทีฟ (มากกว่าหรือน้อยกว่า) โดยคำจำกัดความทำงานนอก VM มันยังอยู่ในกระบวนการและเคอร์เนลช่วยให้มั่นใจได้ว่ากระบวนการจะไม่สามารถเป็นอันตรายต่อแอปพลิเคชันอื่นไม่ว่ากระบวนการนั้นจะเรียกใช้รหัสภายใน VM หรือไม่ก็ตาม

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