אימות חתימות ברמת Assured OSS בחינם

בדף הזה מוסבר איך לאמת את החתימה על ארטיפקטים של Assured OSS.

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

אימות חבילה

חתימות של חבילות מאוחסנות בנפרד מהחבילה בקטגוריה של Cloud Storage בפורמט ZIP. אפשר לאמת חתימות באמצעות הכלי לאימות Assured OSS (aoss-verifier) או באמצעות סקריפט אימות.

שימוש בכלי aoss-verifier

לפני שמשתמשים בכלי הזה, צריך לוודא ש-Go מותקן במערכת. אם Go לא מותקנת, מתקינים אותה מהאתר של Go.

  1. כדי לאמת את האותנטיות והשלמות של חבילות תוכנה בקוד פתוח, צריך להתקין את הכלי aoss-verifier.

  2. מייצאים את $(go env GOPATH)/bin ומריצים את הפקודה aoss-verifier verify-package.

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    מחליפים את מה שכתוב בשדות הבאים:

    • LANGUAGE: שפת חבילת התכנות, java או python. הערך חייב להיות באותיות קטנות.
    • PACKAGE_ID: ב-Java, זה groupId:artifactId, וב-Python, זה packageName. הערך חייב להיות באותיות קטנות.
    • VERSION: הגרסה של החבילה.
    • ARTIFACT_PATH: הנתיב לקובץ הנתונים בספרייה המקומית שרוצים לאמת. משתמשים בסיומות הבאות של שמות קבצים:
      • סיומת הקובץ jar לחבילת Java
      • סיומת הקובץ whl לחבילת Python

    --disable_certificate_verification הוא דגל אופציונלי שמאפשר לדלג על התאמה של אישור עלים לאישור הבסיס דרך שרשרת האישורים, אם משתמשים בו.

    --temp_downloads_path הוא דגל אופציונלי להגדרת הנתיב שבו רוצים להוריד את הקבצים. (מחליפים את TEMP_DOWNLOADS_DIR_PATH). אם לא מגדירים את הדגל הזה, הקבצים יורדים לתיקייה TEMP_DOWNLOADS_DIR_PATH בספרייה הנוכחית.tmp_downloads

    --disable_deletes הוא דגל אופציונלי ששומר את הקבצים שהורדו. כברירת מחדל, הכלי מנקה את כל הקבצים שהורדו.

מידע נוסף זמין בREADME.

שימוש בסקריפט אימות

בקטע הזה מוסבר איך להשתמש בסקריפט אימות כדי לאמת את החתימות של חבילות שהורדו.

שלב 1: מקבלים את כתובת ה-URL של החתימה

כתובת ה-URL של קובץ ה-ZIP זמינה במטא-נתוני האבטחה של כל חבילה. הדוגמה הבאה היא דוגמה מתוך המטא-נתונים של Container Analysis.

כמו שרואים בדוגמה הבאה, אפשר למצוא את כתובת ה-URL של קובץ ה-ZIP של החתימה בשדה description: digestUrl.

package {
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    maintainer: "<nil>"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3.jar"
    description: "{\n \"artifactMetadataList\": [\n {\n \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3_binary_2022-10-12T06:54:05Z.zip\"\n }\n ]\n}"
  }
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3-sources.jar"
    description: "{\n  \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3-sources_source_2022-10-12T06:54:05Z.zip\"\n}"
  }
}

דוגמה מתוך המטא-נתונים של Cloud Storage ‏ (buildInfo.json file). כמו שרואים בדוגמה הבאה, אפשר לקבל את כתובת ה-URL של קובץ ה-ZIP של החתימה מהשדה externalRefs : referenceLocator.

"packages": [
        {
            "SPDXID": "SPDXRef-Package-logback-core-1.2.11.jar",
            "checksums": [
                {
                    "algorithm": "SHA256",
                    "checksumValue": "c847e0e310acda8bc1347c9d9cc051e91210b9f943e131fceb5034c2f0c9a5d8"
                }
            ],
            "downloadLocation": "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar",
            "externalRefs": [
                {
                    "referenceCategory": "SECURITY",
                    "referenceLocator": "cpe:2.3:a:*:JAVA\\:\\:ch\\.qos\\.logback\\:logback\\-core:1\\.2\\.11:*:*:*:*:*:*:*",
                    "referenceType": "cpe23Type"
                },
                {
                    "referenceCategory": "OTHER",
                    "referenceLocator": "gs://cloud-aoss/java/ch.qos.logback:logback-core/1.2.11/logback-core-1.2.11_binary_2022-10-12T14:19:11Z.zip",
                    "referenceType": "digestURL"
                }
            ],

אפשר להשתמש בקובץ ה-zip של החתימה המקומית לאימות ידני, או בכתובת ה-URL של Cloud Storage ישירות כדי להשתמש בסקריפט האימות. כדי להוריד את הקובץ signature.zip:

  1. מגדירים אימות באמצעות Application Default Credentials ‏ (ADC).

  2. מורידים את signature.zip באמצעות הפקודה הבאה:

      gcloud storage cp SIGNATURE_ZIP_URL PATH_TO_LOCAL_STORE --recursive
    

    מחליפים את מה שכתוב בשדות הבאים:

    • SIGNATURE_ZIP_URL: כתובת ה-URL של קובץ ה-ZIP של החתימה.
    • PATH_TO_LOCAL_STORE: הנתיב המקומי שבו רוצים להוריד את הקובץ.

שלב 2: מקבלים את אישור הבסיס

כדי לגשת לאישור הבסיס, משתמשים בכתובת ה-URL הבאה:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

אפשר להוריד את האישור באופן מקומי או להשתמש ישירות בקישור לאישור. כדי להוריד את האישור, מריצים את הפקודה הבאה:

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

מחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את האישור.

שלב 3: מאתרים את קובץ החבילה

הקובץ שנאמת הוא קובץ ה-jar לחבילות Java וקובץ ה-wheel לחבילות Python. הקובץ הזה יהיה PATH_TO_DATA_FILE לצורך אימות.

שלב 4: אימות

אפשר לאמת ידנית את קובץ ה-ZIP של החתימה באמצעות השלבים שמופיעים במאמר בנושא אימות חתימה ידני, או להשתמש בסקריפט האימות.

כדי לבצע אימות באמצעות סקריפט אימות, מריצים את הפקודות הבאות:

  1. מורידים את סקריפט האימות ומעניקים הרשאות.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. מריצים את סקריפט האימות ומאמתים. אפשר להשתמש בכתובות URL מרוחקות או בנתיבים מקומיים עבור קובץ ה-zip של החתימה ואישור הבסיס.

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url SIGNATURE_ZIP_URL --root_cert_url ROOT_CERT_URL
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PATH_TO_DATA_FILE עם הנתיב לקובץ החבילה שצוין בשלב 3
    • SIGNATURE_ZIP_URL בכתובת ה-URL של קובץ ה-ZIP של החתימה שהתקבלה בשלב 1.
    • ROOT_CERT_URL בכתובת ה-URL של אישור הבסיס שהתקבלה בשלב 2.

אימות מטא-נתונים

בקטע הזה מוסבר איך אפשר לאמת את החתימה במטא-נתונים של Assured OSS שאליהם ניגשים באמצעות Cloud Storage.

שימוש בכלי aoss-verifier

אפשר להשתמש בכלי aoss-verifier כדי לבדוק את המטא-נתונים.

לפני שמשתמשים בכלי הזה, צריך להתקין את Go.

  1. מתקינים את הכלי aoss-verifier.

  2. מייצאים את $(go env GOPATH)/bin ומריצים את הפקודה aoss-verifier verify-metadata.

    aoss-verifier verify-metadata \
       --metadata_type TYPE \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    מחליפים את מה שכתוב בשדות הבאים:

    • TYPE: הערכים האפשריים הם buildinfo,‏ vexinfo ו-healthinfo.
    • LANGUAGE: שפת חבילת התכנות, java או python. הערך חייב להיות באותיות קטנות.
    • PACKAGE_ID: ב-Java, הפורמט הוא groupId:artifactId. ב-Python, הפורמט הוא packageName. הערך חייב להיות באותיות קטנות.
    • VERSION: הגרסה של החבילה.

    --disable_certificate_verification הוא דגל אופציונלי שמאפשר לדלג על ההתאמה בין אישור הקצה לאישור הבסיס דרך שרשרת האישורים, אם משתמשים בו.

    --temp_downloads_path הוא דגל אופציונלי להגדרת הנתיב שבו רוצים להוריד את הקבצים (צריך להחליף את TEMP_DOWNLOADS_DIR_PATH). אם הדגל הזה לא מוגדר, הקבצים יורדים לתיקייה tmp_downloads בספרייה הנוכחית.

    --disable_deletes הוא דגל אופציונלי ששומר את הקבצים שהורדו. כברירת מחדל, הכלי מנקה את כל הקבצים שהורדו.

מידע נוסף זמין בREADME.

שימוש בסקריפט אימות

בקטע הזה מוסבר איך להשתמש בסקריפט אימות כדי לאמת את קובץ המטא-נתונים של האבטחה.

שלב 1: מקבלים את קובץ ה-ZIP של החתימה ואת קובץ המטא-נתונים

אנחנו יכולים לגשת למטא-נתונים כמו שמתואר בקטע גישה למטא-נתונים. קובץ המטא-נתונים יופיע עם קובץ ה-signature.zip.

דוגמה – התוכן של buildInfo.zip

buildInfo.json
signature.zip

buildInfo.json הוא קובץ המטא-נתונים שנדרש לאימות, ו-signature.zip הוא קובץ ה-ZIP של החתימה.

שלב 2: מקבלים את אישור הבסיס

כדי להוריד את אישור הבסיס, משתמשים בקישור הבא לכתובת ה-URL:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

אפשר להוריד את האישור באופן מקומי או להשתמש ישירות בקישור לאישור. כדי להוריד את האישור, מריצים את הפקודה הבאה:

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

מחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את האישור.

שלב 3: אימות

אפשר לאמת את signature.zip באמצעות אימות ידני או באמצעות סקריפט האימות.

כדי לבצע אימות באמצעות סקריפט אימות, מריצים את הפקודות הבאות:

  1. מורידים את סקריפט האימות ומעניקים הרשאות.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. מריצים את סקריפט האימות ומאמתים. צריך להשתמש בנתיב המקומי של קובץ ה-ZIP של החתימה. לגבי אישור הבסיס, אפשר להשתמש בכתובת ה-URL או בנתיב המקומי. קובץ הנתונים יהיה קובץ המטא-נתונים שאנחנו בודקים – buildInfo.json, vexInfo.json או healthInfo.json.

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_local_path SIGNATURE_LOCAL_PATH --root_cert_url ROOT_CERT_URL
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PATH_TO_DATA_FILE עם קובץ המטא-נתונים שאנחנו מאמתים, כפי שצוין בשלב 1.

    • SIGNATURE_LOCAL_PATH בכתובת ה-URL של קובץ ה-ZIP של החתימה שהתקבלה בשלב 1.

    • ROOT_CERT_URL בכתובת ה-URL של אישור הבסיס שהתקבלה בשלב 2.

      אם רוצים להשתמש באישור מקומי שכבר הורד, צריך להשתמש באפשרות הזו במקום:

      --root_cert_local ROOT_CERT_LOCAL
      

      מחליפים את ROOT_CERT_LOCAL בנתיב של האישור המקומי.

אימות סקריפט של כלי

‫Assured OSS מספקת שלושה סקריפטים של כלי עזר. בקטע הזה מוסבר איך מאמתים את החתימה בסקריפטים האלה.

מחולל Python Requirements.txt

אפשר לגשת לחתימה של הקובץ הזה בכתובת gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip. אפשר לאמת את signature.zip באמצעות אימות ידני או באמצעות סקריפט האימות. כדי לאמת במהירות את החתימה באמצעות סקריפט האימות, פועלים לפי השלבים הבאים:

  1. מגדירים אימות.

  2. אם עדיין לא הורדתם את קובץ הסקריפט של מחולל requirements.txt, הורידו את הקובץ.

     gcloud storage cp "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh" . --recursive
    
  3. מאחזרים את אישור הבסיס. כתובת ה-URL של הקישור היא https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt אפשר להוריד את האישור באופן מקומי או להשתמש בקישור לאישור ישירות. כדי להוריד את האישור, מריצים את הפקודה הבאה:

    curl -o PATH_TO_LOCAL_STORE/ca.crt "https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt"
    

    מחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את האישור.

  4. מורידים את סקריפט האימות, אם עדיין לא עשיתם זאת.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. מריצים את סקריפט האימות ומאמתים.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip" --root_cert_url ROOT_CERT_URL
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PATH_TO_DATA_FILE עם הנתיב המקומי של סקריפט generator.sh שרוצים לאמת, כפי שצוין בשלב 2.
    • ROOT_CERT_URL עם כתובת ה-URL של אישור הבסיס. אם רוצים להשתמש באישור מקומי שכבר הורד, מריצים את הפקודה הבאה:
    –root_cert_local ROOT_CERT_LOCAL
    

    מחליפים את ROOT_CERT_LOCAL בנתיב המקומי של אישור הבסיס.

סקריפט לאימות חתימה

אפשר לגשת לחתימה של הקובץ הזה בכתובת gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip. אפשר לאמת את signature.zip באמצעות אימות ידני או באמצעות סקריפט האימות. כדי לאמת במהירות את החתימה באמצעות סקריפט האימות, פועלים לפי השלבים הבאים:

  1. מגדירים אימות.

  2. אם עדיין לא הורדתם את קובץ הסקריפט של אימות החתימה, הורידו אותו.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  3. מאחזרים את אישור הבסיס. כתובת ה-URL של הקישור היא https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt אפשר להוריד את האישור באופן מקומי או להשתמש בקישור לאישור ישירות. הפקודה להורדת האישור:

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    מחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את האישור.

  4. מריצים את סקריפט האימות ומאמתים.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip" --root_cert_url ROOT_CERT_URL
    

    מחליפים את מה שכתוב בשדות הבאים:

    PATH_TO_DATA_FILE עם הנתיב המקומי של סקריפט האימות שרוצים לאמת, כפי שהתקבל בשלב 2. ‫ROOT_CERT_URL עם כתובת ה-URL של אישור הבסיס. אם רוצים להשתמש באישור מקומי שכבר הורד, צריך להשתמש באפשרות הזו:

    –root_cert_local ROOT_CERT_LOCAL
    

    מחליפים את ROOT_CERT_LOCAL בנתיב המקומי של אישור הבסיס.

הורדת סקריפט של מטא-נתונים

אפשר לגשת לחתימה של הקובץ הזה בכתובת gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip. אפשר לאמת את signature.zip באמצעות אימות ידני או באמצעות סקריפט האימות. כדי לאמת במהירות את החתימה באמצעות סקריפט האימות, פועלים לפי השלבים הבאים:

  1. מגדירים אימות.

  2. אם עדיין לא הורדתם את קובץ הסקריפט download_metadata.py, הורידו אותו.

    gcloud storage cp "gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py" . --recursive
    
  3. מאחזרים את אישור הבסיס. כתובת ה-URL של הקישור היא https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt אפשר להוריד את האישור באופן מקומי או להשתמש בקישור לאישור ישירות.

    כדי להוריד את האישור, מריצים את הפקודה הבאה:

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    מחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את האישור.

  4. מורידים את סקריפט האימות.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. מריצים את סקריפט האימות ומאמתים.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip --root_cert_url ROOT_CERT_URL
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PATH_TO_DATA_FILE עם הנתיב המקומי של סקריפט download_metadata.py שרוצים לאמת, כפי שצוין בשלב 2.
    • ROOT_CERT_URL עם כתובת ה-URL של אישור הבסיס. אם רוצים להשתמש באישור מקומי שכבר הורד, מריצים את הפקודה הבאה:
    –root_cert_local ROOT_CERT_LOCAL
    

    מחליפים את ROOT_CERT_LOCAL בנתיב המקומי של אישור הבסיס.

המאמרים הבאים