شفافیت APK خدمات سیستم Google

به عنوان بخشی از سرمایه‌گذاری مستمر Google در شفاف‌سازی محصولاتش، ما شفافیت را به دو APK سرویس‌های سیستم Google جدید اضافه می‌کنیم: Android System SafetyCore (com.google.android.safetycore) و Android System Key Verifier (com.google.android.contactkeys). این فایل‌های APK به ترتیب هشدارهای محتوای حساس و ویژگی تأیید کلید رمزنگاری را در پیام‌های Google تقویت می‌کنند. گزارش شفافیتی که برای تأیید ادعاهایی که در مورد این فایل‌های APK داریم منتشر کردیم.

بسته های تحت پوشش

این بخش بسته هایی را که در گزارش شفافیت پوشش داده شده اند و همچنین کلیدهای امضای شفافیت کد مربوطه را توضیح می دهد.

سیستم اندروید SafetyCore

Android System SafetyCore (com.google.android.safetycore) یک جزء سیستم Android است که زیرساخت حفاظت از کاربر روی دستگاه را برای برنامه‌ها فراهم می‌کند.

کد این APK در حال حاضر با کلید زیر که توسط این گواهی توصیف شده است امضا شده است:

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

تأیید کننده کلید سیستم اندروید

APK تأیید کننده کلید سیستم Android (com.google.android.contactkeys) سرویسی برای تأیید تماس در Android است. این به کاربر اجازه می‌دهد تا کلیدهای عمومی مخاطب را تأیید کند تا تأیید کند که با شخصی که قصد ارسال پیام را دارد در ارتباط است. این سرویس یک سیستم یکپارچه برای تأیید کلید عمومی در برنامه های مختلف است که از تأیید از طریق اسکن کد QR یا مقایسه اعداد استفاده می کند.

کد این APK در حال حاضر با کلید زیر که توسط این گواهی توصیف شده است امضا شده است:

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

مدل تهدید

از سیستم های شفافیت می توان برای شناسایی - و در نتیجه جلوگیری از حملات زنجیره تامین استفاده کرد. با چند مثال توضیح می دهیم.

فرض کنید یک مهاجم به طور مخرب یک APK خدمات سیستم Google را تغییر می‌دهد و حتی موفق می‌شود آن را با کلید امضایی که توسط Google Play استفاده می‌شود امضا کند. هر کسی که APK مخرب را دریافت کند می‌تواند از گزارش شفافیت باینری پرس و جو کند تا صحت APK را تأیید کند. آنها متوجه خواهند شد که Google فراداده APK مربوطه را به گزارش اضافه نکرده است و می دانند که به APK در معرض خطر اعتماد ندارند.

از آنجایی که انتشار در گزارش فرآیندی جدا از فرآیند انتشار همراه با امضا است (همانطور که در نمودار اکوسیستم نشان داده شده است)، این امر باعث می‌شود که مهاجم فراتر از به خطر انداختن کلید باشد.

در حالی که ما قصد داریم این گزارش را با استفاده از یک پروتکل شاهد استاندارد در یک شبکه عمومی شاهدان ادغام کنیم، از طرف‌های خارجی و مستقل تشویق می‌کنیم که یکپارچگی این گزارش در دسترس عموم را نظارت کنند. این طرف‌ها می‌توانند ویژگی‌های ضمیمه لاگ را تأیید کنند و هرگونه دستکاری را گزارش کنند.

وجود چنین سیستم شفافیتی و قابلیت کشف بیشتر حملات، فعالیت های مخرب را منع می کند. اگر یک APK به خطر بیفتد اما کاربران فقط به مواردی که در گزارش هستند اعتماد کنند، APK در معرض خطر باید به طور عمومی افشا شود. این احتمال کشف وجود APK در معرض خطر را افزایش می دهد و می توان برای حذف توزیع آن اقدام کرد.

مدل مدعی

مدل مدعی چارچوبی است که برای تعریف نقش ها و مصنوعات در یک سیستم قابل تأیید استفاده می شود. در مورد شفافیت APK سرویس‌های سیستم Google، ادعای ما این است که هش باینری‌های امضاشده ثبت‌شده در این گزارش، نشان‌دهنده کد رسمی برای APK سرویس‌های سیستم Google مربوطه است.

  • ادعای GoogleSystemServicesApk : (من، گوگل، ادعا می کنم که $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 است:

  1. هش امضای کد یک APK توسعه یافته گوگل. این یک رشته هگز از خلاصه SHA256 یک رمز شفافیت کد (همچنین به عنوان کد شفافیت JWT شناخته می شود) است.
  2. شرح نوع هش در بالا. این یک رشته است.
  3. نام بسته APK. این یک رشته است.
  4. شماره نسخه ( ورژن کد ) APK. این یک عدد صحیح است.

قالب یک ورودی گزارش، الحاق چهار قطعه اطلاعات با یک کاراکتر خط جدید ( \n ) است، همانطور که در زیر نشان داده شده است:

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

توجه داشته باشید که در این نسخه، ما در حال آزمایش با استفاده از شفافیت کد هستیم. این بدان معناست که به جای هش APK، خلاصه رمز شفافیت کد را ضبط می کنیم. بنابراین توضیحات هش در حال حاضر به عنوان SHA256(Signed Code Transparency JWT) ثابت شده است.

علاوه بر این، این روشی را نشان می‌دهد که توسعه‌دهندگان برنامه می‌توانند از شفافیت کد زمانی که کلیدهای امضای برنامه آن‌ها توسط Google Play نگهداری می‌شود، استفاده کنند.

نمودار اکوسیستم

Verifiable Log Ecosystem Diagram