ความโปร่งใสของโมดูลเมนไลน์ของ Android

เรามุ่งมั่นที่จะแสดงรายการโมดูลระบบปฏิบัติการ Android ทุกโมดูล (เรียกว่า Mainline) ที่ให้บริการเป็นการอัปเดตผ่าน Google Play ในบันทึกความโปร่งใส เพื่อเพิ่มความน่าเชื่อถือในระบบปฏิบัติการ Android ให้มากยิ่งขึ้น เราเผยแพร่บันทึกความโปร่งใสเพื่อยืนยันการอ้างสิทธิ์ที่เรากล่าวถึง โมดูลเหล่านี้ เราไม่ได้แสดงรายการโมดูลที่ติดตั้งไว้ล่วงหน้าอย่างชัดเจนเนื่องจากโมดูลเหล่านี้รวมอยู่ใน ความโปร่งใสของไบนารีของ Pixel แล้ว

โมเดลภัยคุกคาม

ระบบความโปร่งใสสามารถใช้เพื่อตรวจหาและยับยั้งการโจมตีซัพพลายเชนได้ เราจะยกตัวอย่างให้ดู

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

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

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

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

โมเดลผู้อ้างสิทธิ์

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

  • ClaimMainlineModule: (ฉัน, Google, อ้างสิทธิ์ว่า $hashModule มีไว้สำหรับ $mainlineModule) โดยที่:
    • $hashModule คือแฮชเข้ารหัสลับ (เช่น SHA256) ของไฟล์โมดูลระบบปฏิบัติการเวอร์ชันหนึ่งที่เฉพาะเจาะจงของ $mainlineModule
    • $mainlineModule คือ APEX หรือแพ็กเกจ Android (APK) ที่ประกอบขึ้นเป็นโมดูลระบบปฏิบัติการที่ Google สร้าง ลงนาม และเผยแพร่

ทุกคนที่มีสำเนาของ $mainlineModule จะยืนยันการอ้างสิทธิ์นี้ได้ หน้าการยืนยันมีวิธีการโดยละเอียด สำหรับกระบวนการนี้ ขั้นตอนเหล่านี้ใช้ได้กับทั้ง APK ปกติและโมดูล Mainline (ซึ่งอาจเป็นไฟล์ APK หรือ APEX)

เนื้อหาบันทึก

เมื่อ Google เผยแพร่โมดูล Mainline เวอร์ชันใหม่ ระบบจะเพิ่มรายการที่เกี่ยวข้องลงใน บันทึกความโปร่งใสของโมดูล Mainline

แต่ละรายการในบันทึกนี้จะมีข้อมูลเมตา 4 รายการ ดังนี้

  1. แฮชของ APK หรือ APEX ของโมดูล Mainline ของ Android ที่ลงนามแล้ว ซึ่งเป็นสตริงเลขฐานสิบหกของ SHA256 Digest ของไฟล์ทั้งหมด
  2. คำอธิบายประเภทแฮชด้านบน ซึ่งเป็นสตริง
  3. ชื่อแพ็กเกจของโมดูล ซึ่งเป็นสตริง
  4. หมายเลขเวอร์ชัน (versionCode) ของโมดูล ซึ่งเป็นจำนวนเต็มที่ไม่ใช่ 0

รูปแบบของรายการบันทึกคือการเชื่อมโยงข้อมูลทั้ง 4 รายการเข้าด้วยกันโดยมีอักขระขึ้นบรรทัดใหม่ (\n) ดังตัวอย่างต่อไปนี้

hash\nhash_description\npackage_name\npackage_version\n

เนื่องจากโมดูล Mainline อาจเป็นไฟล์ APK หรือ APEX คำอธิบายแฮชจึงอาจเป็น SHA256(APK) หรือ SHA256(APEX)