במאמר הזה מוסבר איך להכין את הדיסק, ליצור אישורים לאבטחה ולהפעיל תכונות נדרשות במערכת ההפעלה (OS) כדי ליצור קובץ אימג' מותאם אישית ומוגן.
כברירת מחדל, מכונה וירטואלית מוגנת תומכת ב-מערכת הפעלה שמותאמת לקונטיינרים, בהפצות שונות של Linux ובגרסאות שונות של Windows Server. אבל אם אתם צריכים תמונות בהתאמה אישית לאפליקציה שלכם, עדיין תוכלו להשתמש במכונה וירטואלית מוגנת.
הכנת הדיסק
מכונה וירטואלית מוגנת מסתמכת על קושחה שתואמת ל-Unified Extensible Firmware Interface (UEFI) כדי לתמוך בתכונות כמו אתחול מאובטח. מכונה וירטואלית מוגנת דורשת סכימת טבלת מחיצות GUID (GPT); אין תמיכה ברשומת אתחול ראשית (MBR).
בדיסק צריכות להיות לפחות שתי מחיצות:
- מחיצת מערכת EFI (ESP): נפח של 100 מגה-בייט (MB) מספיק למחיצה הזו, והוא רק הצעה. אם צריך, אפשר ליצור מחיצה גדולה יותר. הדרישה היחידה לגבי ESP היא שהיא תעבור עיצוב עם מערכת קבצים מסוג File Allocation Table (FAT).
- מחיצת מערכת ההפעלה: שאר הדיסק. המחיצה הזו מכילה את מערכת ההפעלה לאתחול (Linux או Windows). אין הגבלה על גודל המחיצה הזו.
אפשר ליצור עוד מחיצות נתונים לפי הצורך.
העתקת מערכת ההפעלה למחיצת מערכת ההפעלה
אחרי שמפרמטים את הדיסק ומחלקים אותו למחיצות בצורה נכונה, מעתיקים את קובצי מערכת ההפעלה למחיצת מערכת ההפעלה. למערכת ההפעלה יש טוען אתחול שצריך להיות ממוקם בנתיב תקין ב-ESP, כפי שמצוין במפרט UEFI:
\EFI\Boot\bootx64.efi. שימו לב: יכול להיות שיהיה צורך להעתיק את טוען האתחול של מערכת ההפעלה למיקום שצוין.
ב-Windows, יש פקודה בשם bcdboot שאפשר להשתמש בה כדי להעתיק את טוען האתחול של מערכת ההפעלה למיקום הנכון, בנוסף לפעולות אחרות שנדרשות ב-Windows (כמו העתקת מאגר ה-BCD). מידע נוסף זמין במאמר BCDBoot Command-Line Options (אפשרויות של שורת הפקודה BCDBoot) ב-Microsoft Hardware Dev Center (מרכז פיתוח חומרה של מיקרוסופט).
כשמשתמשים בתמונות של מכונות וירטואליות מוגנות, אפשר גם ליהנות משני אמצעי אבטחה נוספים: מודול פלטפורמה מהימנה וירטואלי (vTPM) ומעקב אחר התקינות. בסעיפים הבאים מפורטים היתרונות של התכונות האלה והדרישות של מערכת ההפעלה.
מודול פלטפורמה מהימן וירטואלי (vTPM)
מודול פלטפורמה מהימנה (TPM) הוא מכשיר ייעודי להגנה על אובייקטים, כמו מפתחות ואישורים, שבהם אתם משתמשים כדי לאמת את הגישה למערכת. באימג'ים של מכונות וירטואליות מוגנות, נעשה שימוש בגרסאות וירטואליות של מכשירי TPM כדי להפעיל אתחול מדוד. בקיצור, אתחול מדוד מבטיח את התקינות של נתיב הטעינה הקריטי של מנהלי ההתקנים של האתחול והליבה. פרטים נוספים על vTPM ועל אתחול מדוד זמינים במאמרי העזרה בנושא מכונות וירטואליות מוגנות.
כדי להשתמש ב-vTPM ובאתחול מדוד, נדרש מנהל התקן. הגרסאות המינימליות של מערכת ההפעלה עם תמיכה ב-TPM 2.0 הן:
- Windows Server 2012
- גרסה 3.20 של Linux
- Red Hat Enterprise Linux 7.3
מעקב אחר תקינות
הכלי למעקב אחר תקינות מאפשר להבין את מצב המכונות הווירטואליות ולקבל החלטות לגביו. Monitoring משתמש בנתונים שנוצרו על ידי Measured Boot כדי לדווח על מופע המכונה הווירטואלית. בתיעוד של מכונות וירטואליות מוגנות יש מידע נוסף על מעקב אחר תקינות ועל אוטומציה של תגובות לכשלים באימות התקינות.
כדי לתמוך בתכונה 'מעקב אחר שלמות המכונה' של מכונות וירטואליות מוגנות, התמונה צריכה ליצור אותות שלמות:
- מערכת Windows יוצרת אותות תקינות כברירת מחדל.
- ב-Linux צריך להתקין ולהפעיל את מודול Integrity Measurement Architecture (IMA). הערך של
CONFIG_IMA_MEASURE_PCR_IDXבמודול צריך להיות 10. זהו ערך ברירת המחדל של מודול IMA.
ייבוא תמונת הדיסק ל-Compute Engine
אחרי שהתמונה מוכנה, צריך להעלות אותה ל-Compute Engine. לשלבים הנדרשים להעלאת התמונה אלCloud de Confiance by S3NS, אפשר לעיין במאמר ייבוא תמונות של דיסקים לאתחול אל Compute Engine.
הגדרת אישורים ל-Secure Boot
אי אפשר להוסיף אישורים ישירות למשתני UEFI של Compute Engine באמצעות כלי כמו mokutil. הסיבה היא שתפריטי הניהול האינטראקטיביים של UEFI ו-MOK לא תומכים בקלט של מסוף טורי ב- Cloud de Confiance by S3NS. במקום זאת, מוסיפים אישורים למסד נתונים של מפתחות כשיוצרים תמונה של מכונה וירטואלית מוגנת.
כשמוסיפים את קובץ ה-image של המכונה הווירטואלית המוגנת למופע של מכונה וירטואלית, מועבר ל-Compute Engine סט של אישורים ציבוריים של X.509 בקידוד DER (Distinguished Encoding Rules) ומסדי נתונים של Secure Boot. הקבצים האלה מאוחסנים במשתני UEFI תואמים ומשמשים ליצירת יחסי אמון בין הפלטפורמה, הקושחה ומערכת ההפעלה.
המסד נתונים יכול להיות אישור או קובץ בינארי גולמי. יש ארבעה ערכים בסך הכול:
- מפתח פלטפורמה (
pk): מפתח שמשמש ליצירת יחסי אמון בין בעלי הפלטפורמה לבין הקושחה. אפשר לציין רק מפתח אחד של הפלטפורמה, והוא חייב להיות אישור X.509 תקין. - מפתח להחלפת מפתחות (
kek): מפתח שמשמש ליצירת יחסי אמון בין הקושחה למערכת ההפעלה. אפשר לציין כמה מקשים לערך הזה. - מסד נתונים של מפתחות אסורים (
dbx): מסד נתונים של אישורים שבוטלו. אם קובץ אתחול נחתם באמצעות אחד מהם, המערכת תפסיק את האתחול. אפשר לציין ערך אחד או כמה ערכים. - מסד נתונים של מפתחות (
db): מסד נתונים של אישורים מהימנים שאפשר להשתמש בהם לחתימה על קובצי אתחול. אפשר לציין ערך אחד או כמה ערכים.
במפרט UEFI יש מידע נוסף על הערכים האלה ועל אופן הפעולה שלהם.
בדוגמה הבאה נעשה שימוש ב-OpenSSL כדי ליצור את המפתחות והאישורים של Secure Boot.
יצירת זוג מפתחות RSA של 2048 ביט
openssl genrsa -out secure-boot-key.rsa 2048יצירת אישור X.509 בחתימה עצמית מהמפתח בפורמט DER
openssl req -new -x509 -sha256 \ -subj '/CN=secure-boot' \ -key secure-boot-key.rsa \ -outform DER \ -out secure-boot-cert.pem
הוספת התמונה המוגנת אל Cloud de Confiance by S3NS
אחרי שמעלים את התמונה והאישורים, אפשר להוסיף את התמונה ל-Compute Engine. אפשר להוסיף את התמונה באמצעות Google Cloud CLI או Compute Engine API.
gcloud
מוסיפים את התמונה המותאמת אישית ל-Compute Engine:
gcloud compute images create [IMAGE_NAME] \
--source-disk [SOURCE_DISK] \
--source-disk-zone [ZONE] \
--platform-key-file= \
--key-exchange-key-file= \
--signature-database-file=, \
--forbidden-database-file= \
--guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"
where:
-
[IMAGE_NAME]הוא השם של קובץ האימג' החדש. -
[SOURCE_DISK]הוא הדיסק שממנו רוצים ליצור את התמונה החדשה. -
[ZONE]הוא האזור שבו הדיסק נמצא.
האפשרות WINDOWS עבור guest-os-features נדרשת רק כשמשתמשים בתמונה של Windows. מידע נוסף על יצירת תמונה זמין במאמר בנושא gcloud create.
REST
פועלים לפי ההוראות ליצירת תמונה מדיסק אחסון מתמיד, אבל מציינים את initial_state_config בגוף הבקשה.
...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",
"initial_state_config": {
"pk": {
"content": [KEY],
"fileType": [BIN,X509]
},
"keks": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
],
"dbxs": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
],
"dbs": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
]
}
אישורי ברירת מחדל
שימו לב שהשדות pk, keks, dbxs ו-dbs הם אופציונליים. אם מספקים הגדרת מצב ראשוני, יכול להיות שחלק מהשדות האלה או כולם לא יוגדרו. כשיוצרים מכונה חדשה מהתמונה, Cloud de Confiance מספק ערך ברירת מחדל ל-PK, ל-KEK, ל-db ול-dbx, אלא אם הוגדר ערך מותאם אישית בשדה כלשהו שלא הוגדר. אם לא מספקים הגדרות של מצב התחלתי (כלומר, ההגדרה חסרה ולא רק ריקה), התמונה תכלול את ההגדרות של המצב ההתחלתי של תמונת המקור.
ערכי ברירת המחדל של השדות האלה הם:
-
PK: האישור שמשויך למפתח הפרטי שנוצר כברירת מחדל על ידי Google.
KEK: אישורי ברירת המחדל של Microsoft KEK.
dbx: רשימת הביטולים של Microsoft DBX שמוגדרת כברירת מחדל. הורדה מפורום ממשק קושחה מאוחד וניתן להרחבה: קובץ רשימת הביטולים של UEFI
db: ארבעת האישורים הבאים:
MicWinProPCA2011_2011-10-19.der: הורדה מ-Microsoft או מ-GitHub.SHA-1:
580a6f4cc4e4b669b9ebdc1b2b3e087b80d0678d
MicCorUEFCA2011_2011-06-27.der: הורדה מ-Microsoft או מ-GitHub.SHA-1:
46def63b5ce61cf8ba0de2e6639c1019d0ed14f3
microsoft uefi ca 2023.der: הורדה מ-Microsoft או מ-GitHub.SHA-1:
b5eeb4a6706048073f0ed296e7f580a790b59eaa
windows uefi ca 2023.der: הורדה מ-Microsoft או מ-GitHub.SHA-1:
45a0fa32604773c82433c3b7d59e7466b3ac0c67
חשוב להיזהר, כי הוספת אישורים משלכם תחליף את אישורי ברירת המחדל במקום למזג אותם עם האישורים שאתם מספקים.