ความโปร่งใสของ APK บริการระบบของ Google

Google ลงทุนอย่างต่อเนื่องเพื่อเพิ่มความโปร่งใสให้กับผลิตภัณฑ์ต่างๆ ของเรา เราจึงเพิ่มความโปร่งใสให้กับ APK บริการของระบบ Google 2 รายการใหม่ ได้แก่ Android System SafetyCore (com.google.android.safetycore) และ Android System Key Verifier (com.google.android.contactkeys) APK เหล่านี้ขับเคลื่อนฟีเจอร์คำเตือนเกี่ยวกับเนื้อหาที่ละเอียดอ่อนและฟีเจอร์การยืนยันคีย์การเข้ารหัสใน Google Messages ตามลำดับ บันทึกความโปร่งใสที่เราเผยแพร่เพื่อยืนยันการอ้างสิทธิ์ของเราเกี่ยวกับ APK เหล่านี้

แพ็กเกจที่ครอบคลุม

ส่วนนี้อธิบายแพ็กเกจที่ครอบคลุมในบันทึกความโปร่งใส รวมถึงคีย์การรับรองความโปร่งใสของโค้ดที่เกี่ยวข้อง

Android System SafetyCore

Android System SafetyCore (com.google.android.safetycore) เป็นคอมโพเนนต์ของระบบ Android ที่ให้บริการโครงสร้างพื้นฐานการปกป้องผู้ใช้ในอุปกรณ์ของแอปโดยรักษาความเป็นส่วนตัว

ขณะนี้โค้ดจาก APK นี้ได้รับการรับรองด้วยคีย์ต่อไปนี้ตามที่อธิบายไว้ในใบรับรองนี้

-----BEGIN CERTIFICATE-----
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
4ZM=
-----END CERTIFICATE-----

โปรแกรมตรวจสอบคีย์ของระบบ Android

โปรแกรมตรวจสอบคีย์ของระบบ Android APK (com.google.android.contactkeys) เป็นบริการสำหรับการยืนยันรายชื่อติดต่อใน Android ซึ่งช่วยให้ผู้ใช้ยืนยันคีย์สาธารณะของรายชื่อติดต่อเพื่อยืนยันว่ากำลังสื่อสารกับบุคคลที่ตนต้องการส่งข้อความถึง บริการนี้เป็นระบบการยืนยันคีย์สาธารณะแบบรวมสำหรับแอปต่างๆ ซึ่งใช้การยืนยันผ่านการสแกนคิวอาร์โค้ดหรือการเปรียบเทียบตัวเลข

ขณะนี้โค้ดจาก APK นี้ได้รับการรับรองด้วยคีย์ต่อไปนี้ตามที่อธิบายไว้ในใบรับรองนี้

-----BEGIN CERTIFICATE-----
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
PLM=
-----END CERTIFICATE-----

รูปแบบภัยคุกคาม

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

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

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

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

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

รูปแบบผู้อ้างสิทธิ์

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

  • อ้างสิทธิ์ GoogleSystemServicesApk: (ฉัน Google ขอยืนยันว่า $codeSignature สำหรับ $googleSystemServicesApk) โดยที่
    • $codeSignature คือโทเค็นเว็บ JSON ที่ลงนาม (JWT) ซึ่งมีรายการไฟล์ DEX และไลบรารีเนทีฟ รวมถึงแฮชที่เกี่ยวข้องซึ่งรวมอยู่ใน $googleSystemServicesApk เวอร์ชันที่เจาะจง
    • $googleSystemServicesApk เป็นแพ็กเกจ Android (APK) จากชุดแพ็กเกจต่อไปนี้ {Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}

ทุกคนที่มีสำเนาของ $googleSystemServicesApk สามารถยืนยันการอ้างสิทธิ์ข้างต้นได้ และเราได้อธิบายกระบวนการนี้อย่างละเอียดในหน้าการยืนยัน

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

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

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

  1. แฮชของลายเซ็นโค้ดของ APK ที่ Google พัฒนา สตริงนี้เป็นสตริงฐานสิบหกของข้อมูลสรุป SHA256 ของโทเค็นความโปร่งใสของโค้ด (หรือที่เรียกว่า JWT ของความโปร่งใสของโค้ด)
  2. คําอธิบายประเภทแฮชด้านบน นี่คือสตริง
  3. ชื่อแพ็กเกจของ APK นี่คือสตริง
  4. หมายเลขเวอร์ชัน (versionCode) ของ APK ต้องเป็นจํานวนเต็ม

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

hash\nSHA256(Signed Code Transparency JWT)\npackage_name\npackage_version\n

โปรดทราบว่าในรุ่นนี้ เรากำลังทดสอบการใช้ความโปร่งใสของโค้ด ซึ่งหมายความว่าเราจะบันทึกข้อมูลสรุปของโทเค็นความโปร่งใสของโค้ดแทนแฮชของ APK ดังนั้นขณะนี้คำอธิบายแฮชจึงได้รับการแก้ไขเป็น SHA256(Signed Code Transparency JWT)

นอกจากนี้ การดำเนินการนี้ยังแสดงให้เห็นว่านักพัฒนาแอปสามารถใช้ความโปร่งใสของโค้ดได้อย่างไรเมื่อ Google Play เก็บคีย์ App Signing ไว้

แผนภาพระบบนิเวศ

แผนภาพระบบนิเวศบันทึกที่ตรวจสอบได้