מדריך שילוב של בקר הגבלת ניפוי באגים

השתמש בהוראות בדף זה כדי לשלב את בקר הגבלת באגים של AAOS (DRC).

איור 1. דוגמה לאפליקציה של DRC.

ארכיטקטורה

ארכיטקטורת DRC מומחשת באיור 2. לרכיבים המתוארים באדום (מנפיק אסימון ו-DRC) יש יישומי התייחסות נלווים שניתן להתאים אישית.

איור 2. ארכיטקטורת DRC.

מה זה DRC?

יחידת ראש המכונית כוללת את אפליקציית DRC (ראה יישום ההתייחסות packages/apps/Car/DebuggingRestrictionController ). אפליקציית ההפניה כוללת את ההיגיון לקבלת אסימון גישה ממנפיק האסימון, אימות האסימון, ולאחר מכן החלת שינויים בהגבלה של ניפוי באגים כפי שצוין באסימון. ההיגיון כולל רכיבי UX בסיסיים בצד המכונית.

מהו מנפיק האסימון?

זהו שירות אינטרנט המנפיק אסימוני גישה חתומים קריפטוגרפית (ראה יישום הפניה packages/apps/Car/DebuggingRestrictionController/server ). שירות האינטרנט הייחוס הוא פונקציית Firebase Cloud הניתנת לפריסה (למידע נוסף, ראה פונקציות ענן עבור Firebase ).

דרישות מוקדמות

לפני שתפרוס מימוש עזר, הקפד להשלים את המשימות הבאות.

הכן אישורים לחתימה על אסימוני גישה

מנפיק האסימון יוצר חתימות אינטרנט של JSON (JWS) כאסימוני גישה. לתאימות מיטבית, מנפיק ההתייחסות תומך רק באלגוריתם RS256 (חתימות RSA עם SHA256). כדי להקל על סיבוב מפתחות, השתמש בשרשרת אישורים במקום באישור יחיד כדי לחתום על אסימוני גישה. שרשרת אישורים טיפוסית צריכה להיות מורכבת מתעודת CA שורש, תעודת CA ביניים ואישור ישות קצה.

אישור הישות החותמת על אסימוני JWS אינו שונה מתעודת TLS רגילה. אתה יכול לרכוש אישור מ-CA ציבוריים כגון DigiCert או לתחזק שרשרת אישורים משלך באמצעות אישורי שורש בחתימה עצמית או מודולי אבטחת חומרה. אישור הישות הקצה צריך להיות אישור X509v3 עם סיומת Subject Alternative Name (SAN). סיומת SAN מכילה מזהה (לדוגמה, שם מארח) של מנפיק האסימון. לבסוף, יש להעדיף תעודות RSA על פני תעודות EC מכיוון שמנפיק האסימון תומך רק ב-RS256.

גוגל מספקת סקריפט מעטפת להפקת אישורים בחתימה עצמית ב- packages/apps/Car/DebuggingRestrictionController/server/genkey.sh .

הגדר את Firebase

מנפיק אסימון ההפניה משתמש באימות Firebase ובפונקציית Firebase Cloud .

כדי להגדיר את חשבון Firebase שלך:

  1. כדי ליצור פרויקט Firebase, ראה הוסף Firebase לפרויקט Android שלך .
  2. כדי להפעיל חלק ממאמתי Firebase, ראה היכן אני מתחיל עם אימות Firebase? .
  3. כדי להוסיף פונקציה ריקה של Firebase Cloud, ראה תחילת העבודה .
  4. אם עדיין לא נעשה, התקן את הכלים Node.js , NPM ו-Firebase כדי להדר ולפרוס את מנפיק האסימון.

שלב את אפליקציית DRC

אפליקציית העזר של DRC ממוקמת packages/apps/Car/DebuggingRestrictionController . ניתן לבנות את האפליקציה יחד ב-AOSP עם Soong או לבטל את החבילה עם Gradle .

מבנה מאגד

כדי לבנות אפליקציה מצורפת:

  1. העתק את applicationId , projectId ו- apiKey מ- google-services.json לתוך packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java . פעולה זו תאפשר לאפליקציית DRC להתחבר כראוי ל-Firebase.
  2. עדכן את הקבועים האלה packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java :
    • TOKEN_USES_SELF_SIGNED_CA מציין אם נעשה שימוש באישורי שורש של שורש בחתימה עצמית. אם מופעלת, אפליקציית DRC סומך רק על אישור CA השורש המקודד ב-PEM שצוין ב- ROOT_CA_CERT .
    • TOKEN_ISSUER_API_NAME הוא השם של פונקציית Firebase Cloud וצריך להתאים לפונקציית הענן שיצרת קודם לכן ב-Firebase Console.
    • TOKEN_ISSUER_HOSTNAME צריך להתאים לשם החלופי של הנושא באישור ישות הקצה שיחתום על אסימוני הגישה.
    • DRC_TEST_EMAIL ו- DRC_TEST_PASSWORD הם אישורים לחשבון ניסיון אופציונלי, שניתן להקצות אותו מראש ב-Firebase אם הפעלת כניסה לדוא"ל/סיסמה. אלה משמשים לבדיקות מכשור בלבד.

האפליקציה מוגדרת כעת לשימוש בחשבון Firebase שלך ​​ובאישורים שלך. ב-Android 9 ומעלה, עליך להגדיר רישום הרשאות מורשות . רשימת ההיתרים חייבת להכיל לפחות android.permission.MANAGE_USERS . לדוגמה:

<permissions>
  <privapp-permissions package="com.android.car.debuggingrestrictioncontroller">
    <permission name="android.permission.INTERNET"/>
    <permission name="android.permission.MANAGE_USERS"/>
  </privapp-permissions>
</permissions>

בנייה מפורקת

רכיבי DRC מפורקים משתמשים ב-Gradle כדי להרכיב את האפליקציה.

כדי ליצור מבנה מפורק:

  1. אשר שהתקנת את ה-Android SDK.
  2. צור קובץ טקסט בשם local.properties בספריית השורש של האפליקציה.
  3. הגדר את המיקום של Android SDK:
     sdk.dir=path/to/android/sdk
    
  4. כדי להגדיר את Firebase, העתק google-services.json אל packages/apps/Car/DebuggingRestrictionController/app . Gradle מנתח את הקובץ ומגדיר אוטומטית את השאר.
  5. הגדר את משתני הסביבה. כמו ברכיבים מצורפים, עליך לציין:
    • $TOKEN_USES_SELF_SIGNED_CA : נכון או לא נכון;
    • $ROOT_CA_CERT : נתיב לאישור CA השורש המקודד ב-PEM;
    • $TOKEN_ISSUER_API_NAME : שם הפונקציה Firebase Cloud;
    • $TOKEN_ISSUER_HOST_NAME : SAN בתעודה;
    • $DRC_TEST_EMAIL ו- $DRC_TEST_EMAI L: אישורים עבור חשבון ניסיון, בניית באגים בלבד.
  6. כדי לבנות את האפליקציה עם Gradle, הפעל פקודה כזו:
    $ ./gradlew build
    

שלב את מנפיק האסימון

מנפיק אסימון ההפניה הוא Firebase Cloud Function המיושמת ב- Node.js הפונקציה יכולה להיקרא רק על ידי משתמש מאומת. לפני פריסת האפליקציה, עליך להגדיר את המפתח הפרטי ואת האישורים המשמשים לחתימה על אסימוני JWS.

  1. אכלס קובץ JSON עם התוכן הבא:
    {
        "key": "---BEGIN PRIVATE KEY---\nRSA_PRIVATE_KEY\n-----END PRIVATE KEY-----\n",
        "certificates.0": "-----BEGIN CERTIFICATE-----\nTOKEN_SIGNING_CERT\n-----END CERTIFICATE-----\n",
        "certificates.1": "-----BEGIN CERTIFICATE-----\nINTERMEDIATE_CA_CERT\n-----END CERTIFICATE-----\n",
        "certificates.2": "-----BEGIN CERTIFICATE-----\nROOT_CA_CERT\n-----END CERTIFICATE-----\n",
        "expiration": "30m",
        "issuer": "Debugging Access Token Issuer",
        "audience": "IHU"
    }
    

    אישורים מזמינים עם תעודת ישות הקצה תחילה ואישור CA שורש בסוף. תקופת התפוגה ניתנת להתאמה אישית וניתן להגדיר אותה למשך זמן ארוך יותר אם אסימון שהופק לוקח זמן מה עד שניתן יהיה לקבל אותו ולצרוך אותו על ידי אפליקציית DRC. ביטול אסימון אינו נתמך.

  2. העלה את התצורה ל-Firebase:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. פרוס את פונקציית Firebase Cloud:
  5. $ firebase deploy --only functions
    
  6. כדי לנהל ולנטר את מנפיק האסימון שלך, ראה ניהול פריסת פונקציות ואפשרויות זמן ריצה .

הגדר הגבלות ברירת מחדל

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

ניתן להגדיר את מגבלת ברירת המחדל עבור משתמש מערכת ללא ראש עם מערך המחרוזות config_defaultFirstUserRestrictions ב- frameworks/base/core/res/res/values/config.xml . הגדרת הגבלה זו משביתה אוטומטית את Android Debug Bridge (ADB) עד שההגבלה תוסר, לדוגמה:

<string-array translatable="false" name="config_defaultFirstUserRestrictions">
  <item>no_debugging_features</item>
</string-array>

מגבלות ברירת המחדל עבור משתמשים רגילים (לדוגמה, נהגים ונוסעים), ואורחים יכולים להיות מוגדרים ב- frameworks/base/core/res/res/xml/config_user_types.xml . אתה יכול לשים על המחרוזות האלה כדי להגדיר את מגבלות ברירת המחדל על כל סוג של משתמש בהתאמה, לדוגמה:

<user-types>
  <full-type name="android.os.usertype.full.SECONDARY" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
  <full-type name="android.os.usertype.full.GUEST" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
</user-types>