virt-qemu-sev-validate(1) Virtualization Support virt-qemu-sev-validate(1)

virt-qemu-sev-validate - اعتبارسنجی اندازه‌گیری راه‌اندازی دامنه در AMD SEV

virt-qemu-sev-validate [OPTIONS]

این برنامه اندازه‌گیری گزارش‌شده برای یک دامنه راه‌اندازی‌شده با AMD SEV را اعتبارسنجی می‌کند. اگر وضعیت خروج برنامه صفر باشد، مالک مهمان می‌تواند مطمئن باشد که سیستم‌عامل مهمان تحت محافظت ارائه‌شده توسط بستر SEV / SEV-ES اجرا می‌شود.

توجه داشته باشید که سطح محافظت بسته به نسل بستر AMD SEV متفاوت است و شرح تفاوت‌ها خارج از حوصله این سند است.

برای اینکه نتایج این برنامه قابل اعتماد تلقی شوند، لازم است روی ماشینی اجرا شود که از قبل مورد اعتماد مالک مهمان باشد. این ماشین می‌تواند سیستمی باشد که مالک مهمان کنترل فیزیکی مستقیم بر آن دارد، یا ماشین مجازی دیگری باشد که تحت حفاظت AMD SEV قرار دارد و قبلاً اندازه‌گیری راه‌اندازی آن اعتبارسنجی شده است. اجرای این برنامه بر روی میزبان مجازی‌سازی پاسخی قابل اعتماد تولید نخواهد کرد.

در صورت دستور برای اتصال به libvirt، این برنامه از استفاده از یک اتصال libvirt محلی به ماشین خودداری می‌کند، زیرا قابل اعتماد نیست. با این حال، به منظور آزمایش یا اهداف نمایشی، می‌توان با استفاده از پرچم --insecure آن را وادار به اجرا در این سناریو کرد. مسلماً نتیجه به دست آمده همچنان قابل اعتماد نخواهد بود.

-h, --help

نمایش راهنمای استفاده از خط فرمان و سپس خروج.

-d, --debug

نمایش اطلاعات اشکال‌زدایی هنگام اجرا.

-q, --quiet

عدم چاپ اطلاعات درباره نتیجه تصدیق (attestation).

این گزینه‌ها اطلاعاتی درباره وضعیت مهمانی که بوت آن باید تصدیق شود ارائه می‌دهند.

--measurement BASE64-STRING

اندازه‌گیری راه‌اندازی گزارش‌شده توسط ناظر مجازی‌سازی (hypervisor) دامنه مورد اعتبارسنجی. اندازه‌گیری باید ۴۸ بایت داده باینری کدگذاری‌شده به صورت رشته base64 باشد.

--api-major VERSION

نسخه اصلی (major) رابط کاربری SEV هایپروایزری که دامنه روی آن در حال اجراست.

--api-minor VERSION

نسخه فرعی (minor) رابط کاربری SEV هایپروایزری که دامنه روی آن در حال اجراست.

--build-id ID

شناسه ساخت (build ID) سامانه SEV هایپروایزری که دامنه روی آن در حال اجراست.

--policy POLiCY

بیت‌ماسک خط‌مشی مرتبط با داده‌های راه‌اندازی نشست دامنه‌ای که باید اعتبارسنجی شود.

این گزینه‌ها اقلام مورد نیاز برای محاسبه اندازه‌گیری مورد انتظار راه‌اندازی دامنه را فراهم می‌کنند. این مقدار سپس با اندازه‌گیری راه‌اندازی گزارش‌شده مقایسه می‌شود.

-f PATH, --firmware=PATH

مسیر باینری بارگذار سفت‌افزار. این ساخت EDK2 است که نحوه راه‌اندازی AMD SEV را می‌داند. برای اینکه اعتبارسنجی قابل اعتماد باشد، مهم است که ساخت سفت‌افزار استفاده‌شده هیچ پشتیبانی از بارگذاری متغیرهای پایدار از NVRAM نداشته باشد، حتی اگر NVRAM در دسترس مهمان قرار گرفته باشد.

-k PATH, --kernel=PATH

مسیر باینری هسته در صورت انجام بوت مستقیم هسته.

-r PATH, --initrd=PATH

مسیر باینری initrd در صورت انجام بوت مستقیم هسته. در صورت حذف، پیش‌فرض محتوایی با طول صفر است.

-e STRING, --cmdline=STRING

رشته‌ای شامل هرگونه پارامتر خط فرمان هسته که در طول بوت دامنه استفاده شده است. در صورت حذف، پیش‌فرض رشته خالی است.

-n COUNT, --num-cpus=COUNT

تعداد پردازنده‌های مجازی دامنه. هنگامی که خط‌مشی دامنه بر روی الزام SEV-ES تنظیم شده باشد، این مورد الزامی است.

-0 PATH, --vmsa-cpu0=PATH

مسیر وضعیت اولیه VMSA برای پردازنده بوت. هنگامی که خط‌مشی دامنه بر روی الزام SEV-ES تنظیم شده باشد، این مورد الزامی است. محتوای پرونده باید دقیقاً ۴۰۹۶ بایت باشد.

-1 PATH, --vmsa-cpu1=PATH

مسیر وضعیت اولیه VMSA برای پردازنده‌های غیربوت. هنگامی که خط‌مشی دامنه برای الزام SEV-ES تنظیم شده باشد و دامنه بیش از یک پردازنده داشته باشد، این مورد الزامی است. محتوای پرونده باید دقیقاً ۴۰۹۶ بایت باشد.

--tik PATH

پرونده TIK برای دامنه. این پرونده باید دقیقاً ۱۶ بایت باشد و حاوی کلید یکتای یکپارچگی انتقال مرتبط با داده‌های راه‌اندازی نشست دامنه است. این گزینه با آرگومان --tk ناسازگار و مانعه‌الجمع است.

--tek PATH

پرونده TEK برای دامنه. این پرونده باید دقیقاً ۱۶ بایت باشد و حاوی کلید یکتای رمزنگاری انتقال مرتبط با داده‌های راه‌اندازی نشست دامنه است. این گزینه با آرگومان --tk ناسازگار و مانعه‌الجمع است.

--tk PATH

پرونده ترکیبی TEK/TIK برای دامنه. این پرونده باید دقیقاً ۳۲ بایت باشد، به طوری که ۱۶ بایت نخست حاوی TEK و ۱۶ بایت آخر حاوی TIK باشد. این گزینه با آرگومان‌های --tik و --tek ناسازگار است.

این گزینه‌ها هنگام اتصال به libvirt برای دریافت خودکار اطلاعات وضعیت و پیکربندی دامنه مورد تصدیق به کار می‌روند.

-c, --connect URI

شناسه منبع (URI) اتصال libvirt. برای اینکه اعتبارسنجی قابل اعتماد باشد، این نشانی باید به یک میزبان مجازی‌سازی دوردست اشاره کند. این الزام را می‌توان با استفاده از آرگومان --insecure نادیده گرفت.

-o, --domain ID|NAME|UUID

شناسه، نام یا UUID دامنه. برای مشخص کردن اینکه اندازه‌گیری راه‌اندازی کدام دامنه libvirt باید انجام شود به کار می‌رود. دامنه باید در حال اجرا باشد و معمولاً در حالت مکث (paused) راه‌اندازی شده باشد تا اعتبارسنجی قبل از شروع اجرای پردازنده‌های مهمان انجام شود.

-i, --insecure

ادامه فرآیند حتی در صورتی که سناریوی استفاده ناامن باشد. این به برنامه امکان می‌دهد به هایپروایزر محلی libvirt متصل شده و به محتوای پرونده‌ها از میزبان مجازی‌سازی اتکا کند. همچنین اجازه می‌دهد اعتبارسنجی حتی در حالتی که پردازنده‌های ماشین مجازی در وضعیت مکث اولیه نیستند ادامه یابد. به نتیجه این اعتبارسنجی نباید اعتماد کرد.

-g, --ignore-config

عدم تلاش برای بررسی سلامت پیکربندی دامنه. رفتار پیش‌فرض این است که در صورت شناسایی عناصر پیکربندی در XML مهمان که اندازه‌گیری راه‌اندازی را باطل می‌کنند، خطا چاپ شود. این می‌تواند به مالک مهمان در شناسایی اشتباهات پیکربندی کمک کند. در صورت ارائه آرگومان --ignore-config، این بررسی سلامت نادیده گرفته می‌شود و در نتیجه احتمالاً عدم موفقیت اعتبارسنجی گزارش خواهد شد.

این گزینه‌ها روشی را برای تزریق یک رمز در صورت موفقیت‌آمیز بودن اعتبارسنجی اندازه‌گیری راه‌اندازی ارائه می‌دهند.

--inject-secret ALIAS-OR-GUID:PATH

مسیر به پرونده‌ای حاوی رمز برای تزریق به سیستم‌عامل مهمان. کاربرد معمول آن ارائه یک گذرواژه برای باز کردن قفل رمزگذاری سراسری دیسک سیستم‌فایل ریشه است. ALIAS می‌تواند یکی از رمزهای شناخته‌شده باشد:

•
luks-key - بایت‌هایی برای استفاده به عنوان کلید جهت باز کردن اسلات کلید LUKS. با GUID به صورت 736869e5-84f0-4973-92ec-06879ce3da0b.

به عنوان جایگزین، GUID به یک UUID دلخواه به انتخاب فراخواننده اشاره دارد. محتوای PATH بر اساس نیازمندی‌های GUID مربوطه تعریف شده و بدون تغییر استفاده می‌شود. به‌ویژه به موارد زیر توجه داشته باشید:

  • از کاراکترهای ناخواسته خط جدید در انتهای PATH خودداری کنید مگر اینکه توسط GUID الزامی شده باشد.
  • هر بایت پایانی NUL در صورتی که توسط GUID الزامی باشد باید صراحتاً در PATH گنجانده شود.

این آرگومان را می‌توان چندین بار تکرار کرد، به شرطی که برای هر نمونه یک GUID متفاوت ارائه شود.

--secret-header PATH

مسیر پرونده‌ای که سرآیند رمز تزریق‌شده در قالب base64 در آن نوشته شده و بعداً به دامنه تزریق خواهد شد. این گزینه در صورتی که اتصالی به libvirt وجود نداشته باشد الزامی است؛ در غیر این صورت رمز به صورت مستقیم تزریق می‌شود.

--secret-payload PATH

مسیر پرونده‌ای که محموله رمز تزریق‌شده در قالب base64 در آن نوشته شده و بعداً به دامنه تزریق خواهد شد. این گزینه در صورتی که اتصالی به libvirt وجود نداشته باشد الزامی است؛ در غیر این صورت رمز به صورت مستقیم تزریق می‌شود.

این سناریو امکان اعتبارسنجی امن یک اندازه‌گیری را در وضعیتی کاملاً آفلاین و بدون اتصال به میزبان هایپروایزر فراهم می‌کند. تمام اقلام داده مورد نیاز باید به صورت پارامترهای خط فرمان ارائه شوند. این مدل استفاده امن در نظر گرفته می‌شود زیرا تمامی داده‌های ورودی توسط کاربر ارائه شده‌اند.

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --firmware OVMF.sev.fd \
    --tk this-guest-tk.bin \
    --measurement Zs2pf19ubFSafpZ2WKkwquXvACx9Wt/BV+eJwQ/taO8jhyIj/F8swFrybR1fZ2ID \
    --api-major 0 \
    --api-minor 24 \
    --build-id 13 \
    --policy 3

اعتبارسنجی اندازه‌گیری یک مهمان SEV با بوت مستقیم هسته:

# virt-qemu-sev-validate \
    --firmware OVMF.sev.fd \
    --kernel vmlinuz-5.11.12 \
    --initrd initramfs-5.11.12 \
    --cmdline "root=/dev/vda1" \
    --tk this-guest-tk.bin \
    --measurement Zs2pf19ubFSafpZ2WKkwquXvACx9Wt/BV+eJwQ/taO8jhyIj/F8swFrybR1fZ2ID \
    --api-major 0 \
    --api-minor 24 \
    --build-id 13 \
    --policy 3

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --firmware OVMF.sev.fd \
    --num-cpus 2 \
    --vmsa-cpu0 vmsa0.bin \
    --vmsa-cpu1 vmsa1.bin \
    --tk this-guest-tk.bin \
    --measurement Zs2pf19ubFSafpZ2WKkwquXvACx9Wt/BV+eJwQ/taO8jhyIj/F8swFrybR1fZ2ID \
    --api-major 0 \
    --api-minor 24 \
    --build-id 13 \
    --policy 7

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود، با VMSA ساخته‌شده به صورت خودکار:

# virt-qemu-sev-validate \
    --firmware OVMF.sev.fd \
    --num-cpus 2 \
    --cpu-family 23 \
    --cpu-model 49 \
    --cpu-stepping 0 \
    --tk this-guest-tk.bin \
    --measurement Zs2pf19ubFSafpZ2WKkwquXvACx9Wt/BV+eJwQ/taO8jhyIj/F8swFrybR1fZ2ID \
    --api-major 0 \
    --api-minor 24 \
    --build-id 13 \
    --policy 7

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود و تزریق گذرواژه دیسک در صورت موفقیت:

# virt-qemu-sev-validate \
    --firmware OVMF.sev.fd \
    --tk this-guest-tk.bin \
    --measurement Zs2pf19ubFSafpZ2WKkwquXvACx9Wt/BV+eJwQ/taO8jhyIj/F8swFrybR1fZ2ID \
    --api-major 0 \
    --api-minor 24 \
    --build-id 13 \
    --policy 3 \
    --inject-secret 736869e5-84f0-4973-92ec-06879ce3da0b:passwd.txt \
    --secret-header secret-header.b64 \
    --secret-payload secret-payload.b64

پرونده‌های secret-header.b64 و secret-payload.b64 اکنون می‌توانند برای تزریق به میزبان مجازی‌سازی ارسال شوند.

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

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --connect qemu+ssh://root@some.remote.host/system \
    --firmware OVMF.sev.fd \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV با بوت مستقیم هسته:

# virt-qemu-sev-validate \
    --connect qemu+ssh://root@some.remote.host/system \
    --firmware OVMF.sev.fd \
    --kernel vmlinuz-5.11.12 \
    --initrd initramfs-5.11.12 \
    --cmdline "root=/dev/vda1" \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --connect qemu+ssh://root@some.remote.host/system \
    --firmware OVMF.sev.fd \
    --num-cpus 2 \
    --vmsa-cpu0 vmsa0.bin \
    --vmsa-cpu1 vmsa1.bin \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود، با VMSA ساخته‌شده به صورت خودکار:

# virt-qemu-sev-validate \
    --connect qemu+ssh://root@some.remote.host/system \
    --firmware OVMF.sev.fd \
    --cpu-family 23 \
    --cpu-model 49 \
    --cpu-stepping 0 \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود و تزریق گذرواژه دیسک در صورت موفقیت:

# virt-qemu-sev-validate \
    --connect qemu+ssh://root@some.remote.host/system \
    --firmware OVMF.sev.fd \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64 \
    --inject-secret 736869e5-84f0-4973-92ec-06879ce3da0b:passwd.txt

این سناریو امکان دریافت تمام داده‌ها از هایپروایزر محلی را از طریق اتصال به libvirt فراهم می‌کند. این حالت فقط برای اهداف آزمایش، اشکال‌زدایی یا نمایش استفاده می‌شود، زیرا اجرا بر روی هایپروایزر محلی سناریویی امن نیست. برای فعال‌سازی این استفاده، پرچم --insecure باید مشخص شود. با ارائه اشاره‌گری به مهمان libvirt برای اعتبارسنجی، تمام اطلاعات لازم برای انجام اعتبارسنجی، به جز جفت TIK/TEK، می‌توانند به طور خودکار دریافت شوند.

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --insecure \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV با بوت مستقیم هسته:

# virt-qemu-sev-validate \
    --insecure \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود:

# virt-qemu-sev-validate \
    --insecure \
    --vmsa-cpu0 vmsa0.bin \
    --vmsa-cpu1 vmsa1.bin \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV-ES SMP که از دیسک بوت می‌شود، با VMSA ساخته‌شده به صورت خودکار:

# virt-qemu-sev-validate \
    --insecure \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64

اعتبارسنجی اندازه‌گیری یک مهمان SEV که از دیسک بوت می‌شود و تزریق گذرواژه دیسک در صورت موفقیت:

# virt-qemu-sev-validate \
    --insecure \
    --tk this-guest-tk.bin \
    --domain fedora34x86_64 \
    --inject-secret 736869e5-84f0-4973-92ec-06879ce3da0b:passwd.txt

پیچیدگی پیکربندی یک مهمان و اعتبارسنجی اندازه‌گیری بوت آن باعث می‌شود که مشاهده خطای زیر بسیار محتمل باشد:

ERROR: Measurement does not match, VM is not trustworthy

این پیام خطا بدترین حالت را فرض می‌کند، اما در بیشتر موارد شکست ناشی از پیکربندی نادرست مهمان، یا ارسال اطلاعات اشتباه هنگام تلاش برای اعتبارسنجی آن خواهد بود. اطلاعات زیر راهنمایی برای مواردی است که باید بررسی شوند تا بیشترین شانس تشخیص مشکل به دست آید:

  • بررسی پیکربندی ماشین مجازی برای گواهی DH و بلوک نشست (session blob) در XML مهمان libvirt.

    محتوای این فیلدها باید در قالب base64 باشد، که توسط دستور sevctl session تولید می‌شود. ابزارهای دیگر ممکن است فایل‌ها را با قالب باینری تولید کنند، بنابراین اطمینان حاصل کنید که به درستی به base64 تبدیل شده باشند.

  • بررسی مطابقت مقدار خط‌مشی (policy) در پیکربندی ماشین مجازی با بلوک نشست.

    مقدار <policy> در XML مهمان libvirt باید با مقدار ارسال‌شده به دستور sevctl session مطابقت داشته باشد. اگر این مقدار ناسازگار باشد، مهمان حتی شروع به کار نخواهد کرد و QEMU خطایی مانند زیر نمایش می‌دهد:

sev_launch_start: LAUNCH_START ret=1 fw_error=11 'Bad measurement'
  • بررسی ارسال جفت‌کلید صحیح TIK/TEK.

    جفت‌کلید TIK/TEK به طور یکتا به هر گواهی DH و بلوک نشست وابسته است. مطمئن شوید که جفت‌کلید TIK/TEK ارائه‌شده به این برنامه با گواهی DH و بلوک نشست پیکربندی‌شده برای XML مهمان libvirt منطبق باشد. این یکی از متداول‌ترین اشتباهات است. همچنین اطمینان حاصل کنید که پرونده‌های TIK و TEK جابه‌جا نشده باشند.

  • بررسی مطابقت باینری سفت‌افزار با مورد استفاده‌شده برای بوت.

    محتوای باینری سفت‌افزار بخشی از داده‌های تحت پوشش اندازه‌گیری راه‌اندازی است. اطمینان حاصل کنید که باینری سفت‌افزار ارائه‌شده به این برنامه با آنچه برای راه‌اندازی مهمان استفاده شده منطبق باشد. میزبان هایپروایزر به صورت دوره‌ای به‌روزرسانی‌های نرم‌افزاری دریافت می‌کند که ممکن است نسخه جدیدی از باینری سفت‌افزار را همراه داشته باشند.

  • بررسی مطابقت هسته، initrd و cmdline با موارد استفاده‌شده برای بوت.

    اگر مهمان برای بوت مستقیم هسته پیکربندی شده است، بررسی کنید که هسته، initrd و cmdline ارائه‌شده به این برنامه با موارد استفاده‌شده برای بوت مهمان منطبق باشند. در خط فرمان هسته فاصله‌های خالی باید دقیقاً حفظ شوند، از جمله هرگونه فاصله در ابتدا یا انتهای آن.

  • بررسی فعال بودن اندازه‌گیری هش هسته.

    ویژگی kernelHashes در XML مهمان libvirt مشخص می‌کند که آیا هش‌های مربوط به محتوای هسته، initrd و cmdline تحت پوشش اندازه‌گیری بوت قرار گیرند یا خیر. در صورت فعال بودن، باید محتوای منطبق به این برنامه داده شود. اگر غیرفعال باشد، این محتوا نباید (NOT) ارسال شود.

  • بررسی ارسال هش اندازه‌گیری صحیح.

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

  • بررسی استفاده از بلوک‌های صحیح VMSA / مقادیر CPU SKU برای میزبان.

    بلوک‌های VMSA وضعیت ثبات اولیه را برای پردازنده بوت و پردازنده‌های اضافی فراهم می‌کنند. یکی از ثبات‌ها CPU SKU (خانواده، مدل، گام / family, model, stepping) پردازنده فیزیکی میزبان را کدگذاری می‌کند. اطمینان حاصل کنید که بلوک VMSA استفاده‌شده برای اعتبارسنجی با SKU میزبانی که مهمان روی آن بوت شده مطابقت داشته باشد. ارائه مستقیم مقادیر CPU SKU به ابزار می‌تواند احتمال استفاده از مقادیر نادرست را کاهش دهد.

  • بررسی صحیح بودن تعداد پردازنده‌ها.

    هنگام ارائه بلوک‌های VMSA برای مهمان‌های SEV-ES، تعداد پردازنده‌های موجود بر نتیجه اندازه‌گیری اثر می‌گذارد. اطمینان حاصل کنید که تعداد vCPU صحیح متناظر با تلاش بوت مهمان به کار رفته باشد.

بهترین شیوه این است که این ابزار در حالت کاملاً آفلاین اجرا شده و تمام اطلاعات به عنوان پارامترهای صریح خط فرمان ارسال شوند. با این حال هنگام اشکال‌زدایی خطاها، دستور دادن به آن برای اتصال به libvirt و دریافت اطلاعات می‌تواند مفید باشد. در صورت اتصال به یک نمونه دوردست libvirt، ابزار اطلاعاتی را که بتوان به آنها اعتماد کرد (که داده‌های اولیه وضعیت راه‌اندازی VM هستند) دریافت خواهد کرد. همچنین برای شناسایی اشتباهات متداول، سلامت پیکربندی XML را بررسی می‌کند. اگر پرچم --insecure مشخص شده باشد، می‌تواند بخشی از اطلاعات پیکربندی را استخراج کرده و از آن برای فرآیند تصدیق استفاده کند.

اگر باز هم اشتباه شناسایی نشد، می‌توان این ابزار را روی میزبان مجازی‌سازی اجرا کرد. در این سناریو تنها سه پارامتر خط فرمان مورد نیاز TIK، TEK و نام دامنه libvirt هستند. ابزار باید بتواند به صورت خودکار تمام اطلاعات مورد نیاز دیگر را مشخص کند. اگر همچنان خطا گزارش شود، این موضوع با احتمال بسیار قوی نشان می‌دهد که جفت TIK/TEK با گواهی DH و بلوک نشست پیکربندی‌شده مطابقت ندارد.

پرچم --debug مقادیر هش و/یا تخلیه هگز (hex dump) را برای بخش‌های مختلف اطلاعات استفاده‌شده در فرآیند تصدیق نمایش می‌دهد. مقایسه خروجی --debug اجرا بر روی میزبان هایپروایزر با خروجی به‌دست‌آمده در حالت آفلاین می‌تواند راهنمایی بیشتری برای تشخیص پارامتر ناسازگار فراهم کند.

همان‌طور که پیش‌تر در این سند اشاره شد، به یاد داشته باشید که به طور کلی نباید به هیچ نتیجه تصدیقی که از اجرا بر روی میزبان هایپروایزر به دست می‌آید اعتماد کرد. بنابراین در صورت شناسایی یک اشتباه در پیکربندی، اکیداً توصیه می‌شود تصدیق مجدداً در حالت آفلاین بر روی یک ماشین مورد اعتماد اجرا شود.

در صورت تصدیق موفقیت‌آمیز اندازه‌گیری راه‌اندازی، وضعیت خروج برابر با 0 خواهد بود.

در صورت عدم موفقیت در تصدیق اندازه‌گیری راه‌اندازی، یکی از کدهای زیر بازگردانده می‌شود:

  • 1 - اندازه‌گیری مهمان اعتبارسنجی نشد

    با فرض صحیح بودن ورودی‌های این برنامه، راه‌اندازی ماشین مجازی به خطر افتاده است و از این پس نباید مورد اعتماد باشد.

  • 2 - سناریوی استفاده قابل پشتیبانی نیست

    روشی که این برنامه فراخوانی شده است، مانع از توانایی آن در اعتبارسنجی اندازه‌گیری راه‌اندازی می‌شود.

  • 3 - سناریوی استفاده امن نیست

    روشی که این برنامه فراخوانی شده است، بدین معناست که نتیجه هرگونه اعتبارسنجی اندازه‌گیری راه‌اندازی امن نخواهد بود.

    می‌توان برنامه را مجدداً با آرگومان --insecure فراخوانی کرد تا اعتبارسنجی اجباری شود؛ با این حال، نباید به نتایج آن اعتماد کرد. این کار فقط باید برای مقاصد آزمایش، اشکال‌زدایی یا نمایش استفاده شود و هرگز نباید در محیط عملیاتی به کار رود.

  • 4 - پیکربندی دامنه برای اندازه‌گیری نادرست است

    روشی که مهمان پیکربندی شده است مانع از این می‌شود که برنامه بتواند اندازه‌گیری راه‌اندازی را اعتبارسنجی کند. توجه داشته باشید که به طور کلی پیکربندی مهمان گزارش‌شده توسط هایپروایزر قابل اعتماد نیست، بنابراین امکان دارد این خطا یک مثبت کاذب طراحی‌شده برای ایجاد منع خدمت (DoS) باشد.

    این برنامه می‌تواند مجدداً با آرگومان --ignore-config فراخوانی شود تا از بررسی‌های صحت روی XML دامنه صرف‌نظر شود. این کار احتمالاً منجر به شکست با کد خروج 1 به نشانه نامعتبر بودن اندازه‌گیری خواهد شد.

  • 5 - وضعیت دامنه برای اندازه‌گیری نادرست است

    دامنه برای اینکه بتوان اندازه‌گیری راه‌اندازی آن را اعتبارسنجی کرد، باید در حال اجرا باشد.

  • 6 - خطای غیرمنتظره‌ای در کد رخ داده است

    یک نقص منطقی در این برنامه بدین معناست که قادر به تکمیل اعتبارسنجی اندازه‌گیری نیست. این یک باگ است که باید به نگه‌دارندگان گزارش شود.

Daniel P. Berrangé

لطفاً تمام اشکالاتی را که کشف می‌کنید گزارش دهید. این کار را می‌توان از یکی از راه‌های زیر انجام داد:

1.
فهرست پستی

https://libvirt.org/contact.html

2.
ردیاب باگ

https://libvirt.org/bugs.html

علاوه بر این، می‌توانید اشکالات را به توزیع‌کننده / ارائه‌دهنده نرم‌افزار خود گزارش دهید.

Copyright (C) 2022 by Red Hat, Inc.

برنامه virt-qemu-sev-validate تحت شرایط مجوز گنو LGPL نسخه 2.1 یا بالاتر توزیع می‌شود. این یک نرم‌افزار آزاد است؛ برای شرایط تکثیر به سورس‌کد مراجعه کنید. هیچ ضمانتی وجود ندارد؛ حتی برای قابل فروش بودن یا تناسب با یک هدف خاص.

virsh(1), SEV launch security usage https://libvirt.org/kbase/launch_security_sev.html, https://libvirt.org