שקיפות של חבילות APK בשירותי המערכת של Google

כחלק מההשקעה המתמשכת של Google בשקיפות המוצרים שלה, אנחנו מוסיפים שקיפות לשני קובצי APK חדשים של שירותי מערכת של Google: 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-----
MIIFyDCCA7CgAwIBAgIUf3otg1DSj4EfxlP2OjAapoQ/moEwDQYJKoZIhvcNAQELBQAwdDELMAkG
A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDAS
BgNVBAoTC0dvb2dsZSBJbmMuMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMCAX
DTI0MDcxNzIwNDQzMFoYDzIwNTQwNzE3MjA0NDMwWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
Q2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4x
EDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQCw93tMu9bD3tAfP1XDj2Y/vvBqDTvi86HesUK8gq0M7kxttep0BP2AkZS5AdVa
DNW6kuMhUN1XOao/Ib/mpgdi3pK6w0WDIlpHsg3coRuCxeniROw3+XUSLNox1mqfLSgHNg9gNoxK
dUyGf8nEIYVgLBUH8OX2oKeirRT7DyR64uVJmts0B0RvNt5VfP5vf6KFpa0prqCNGqQLHLyev3g/
35RH1oAVVsjZnylDYAm9qdAVugL0sgExY01vRNluZZKJuItNpdt+AMOTgStZAEwkhAg7pMbNF27g
AJDCC+XDS16/x1Jnxc+Exlw66aHB++1+dFK/rYkbB+ql4dHjs/LTGqPIeUuE3Xd7UkguKZRRLNtI
Ls9DP1UYuQGZ1IQ9kQamkxScNFgNmymkgTXhBajDKSPy4jb2t5yLHTIJn0OvyMLg2J7/ImHHmc99
07OuXCfy55aW99lqaYsc+rLPOHFi6GjvTUkkyxXqJlhQYb9uQznxkqsfbnBefxCCO924uVIwWDlt
rA+mQ3Bw7TNgb3NmKUmUrmFaRBmrAxnag/jj0N4ff7vXVBR0WkXpb3qRPlSvsEXGYOWPJtc2+U2Q
IFcNyEeu6zWD5yYIcnoX1go2zEVt99b1AFsN0zRWo0mNyeLizDNiDkGT9AtB8rdajhchDqfmZGGX
XqhhJVT9IRMBFQIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQY4GYL4FxVcxk2Euj8
otSQHVYz7zAfBgNVHSMEGDAWgBQY4GYL4FxVcxk2Euj8otSQHVYz7zANBgkqhkiG9w0BAQsFAAOC
AgEAoDuItwszr0yIPcvn/l3s5xZs+3rXe52KcY+ZgMVyM4q5CTEHwX89+K+hMFMTqp8vkrLhjnhz
/SYEY0ZXMQsQ0GWrMHbfIbzUsLhIoMBYn1JA+AH+CCZIYo9GbxaCqu4KJPQNC7sqA3goWf6UqHya
rj8wzXT5+qmOVwBUHgQUap5406/DaPqU0g+w4+hiV/zI67ugWU1z+6WElYIsXjN59zA5rVIJTdnV
w04RNK5fldWUsbkPGQ7hwoyJG4wZewCZ0sU4NUqVecb8z52hdlGj15+rUhDJq0pbDRjFEnulfUFJ
gA5s6iosSYyXrGQgE6NOszxu7nMvSg7MPrS7GQUMnaadQAye/7ELBY4jxlHMOAuj9iwz2Asjuy0a
ye64nfcYBbFSIzV7xRgeUJy42jyRq9ZoILU9fW/I4rHNIcntgB2POpzFOZrKXLC/B8rHKZT9AZOd
iXEKqFRBnHEaGy+MARO7guCQLO8XIVQixDHWS6OJRIvw0LKaf4dSlCxcUEpYSSHJmt6JMOujapCa
JmKz7K+wZWSClJnrc0HhJnZFt6S3TakZx7ALVi0SqxBaxHYFieSn9rmXHOWrSxEz5cmASnsfqnc0
w//Yhjm+gGOmLs/5TzrCyYvYt8Ynsd1G1GHipwc8JXGxLqbOPrNcUpjM65m+sshERIua30du0GOm
4ZM=
-----END CERTIFICATE-----

הכלי לאימות מפתחות של מערכת Android

קובץ ה-APK של Android System Key Verifier‏ (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 שנפרץ, ותוכלו לבצע פעולה כדי להסיר את הפצתו.

מודל המתלונן

מודל המבקש הוא מסגרת שמשמשת להגדרת תפקידים וארטיפקטים במערכת מאומתת. במקרה של שקיפות חבילות ה-APK של שירותי המערכת של Google, אנחנו טוענים שה-hash של קבצים בינאריים חתומים שמתועדים ביומן הזה מייצג קוד רשמי של חבילות ה-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:

  1. גיבוב של חתימת הקוד של חבילת APK שפותחה על ידי Google. זוהי מחרוזת הקסדצימלי של סיכום SHA256 של אסימון של שקיפות קוד (נקרא גם JWT של שקיפות קוד).
  2. התיאור של סוג הגיבוב שלמעלה. זו מחרוזת.
  3. שם החבילה של קובץ ה-APK. זו מחרוזת.
  4. מספר הגרסה (versionCode) של קובץ ה-APK. זהו מספר שלם.

הפורמט של רשומת יומן הוא שרשור של ארבעת פרטי המידע עם תו של שורה חדשה (\n), כפי שמוצג בדוגמה הבאה:

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

חשוב לדעת שבגרסה הזו אנחנו עורכים ניסויים בשימוש בשקיפות הקוד. כלומר, במקום את ה-hash של קובץ ה-APK, אנחנו מתעדים את הדיגסט של אסימון השקיפות של הקוד. לכן, תיאור הגיבוב קבוע כרגע כ-SHA256(Signed Code Transparency JWT).

בנוסף, זהו דוגמה לאופן שבו מפתחי אפליקציות יכולים להשתמש בשקיפות הקוד כשמפתחות החתימה של האפליקציות שלהם נשמרים ב-Google Play.

תרשים של המערכת האקולוגית

תרשים של הסביבה העסקית של יומני האימות