VIRT-WHAT-CVM(1) Virtualization Support VIRT-WHAT-CVM(1)

virt-what-cvm - تشخیص اجرای سیستم در یک ماشین مجازی محرمانه

virt-what-cvm [options]

"virt-what-cvm" ابزاری است که می‌توان از آن برای تشخیص اجرای برنامه در یک ماشین مجازی محرمانه (confidential virtual machine) استفاده کرد.

این برنامه فهرستی از «حقایق» (facts) را درباره ماشین مجازی محرمانه بر اساس روش‌های اکتشافی (heuristics) چاپ می‌کند. در هر سطر یک حقیقت چاپ می‌شود.

اگر چیزی چاپ نشود و اسکریپت با کد خروج 0 (بدون خطا) خاتمه یابد، می‌تواند به این معنی باشد که برنامه یا روی سخت‌افزار واقعی (bare-metal) در حال اجرا است، یا درون یک ماشین مجازی غیرمحرمانه اجرا می‌شود، یا درون نوعی از ماشین مجازی محرمانه قرار دارد که ناشناخته است یا امکان تشخیص آن وجود ندارد.

این یک مهمان محرمانه است که با فناوری AMD SEV اجرا می‌شود.

وضعیت: آزمایش‌شده روی Fedora 37 QEMU+KVM

این یک مهمان محرمانه است که با فناوری AMD SEV-ES اجرا می‌شود.

وضعیت: آزمایش‌شده روی Fedora 37 QEMU+KVM

این یک مهمان محرمانه است که با فناوری AMD SEV-SNP اجرا می‌شود.

وضعیت: آزمایش‌شده روی Microsoft Azure SEV-SNP CVM

وضعیت: آزمایش‌شده روی Fedora 38 QEMU+KVM SEV-SNP (devel snapshot)

این یک مهمان محرمانه است که با فناوری Intel TDX اجرا می‌شود.

وضعیت: آزمایش‌شده روی Microsoft Azure TDX CVM

این یک مهمان محرمانه است که به صورت ناآگاه (unenlightened) تحت لایه سازگاری میزبان HyperV (Azure) HCL (Host Compatibility Layer) اجرا می‌شود. این گزینه با amd-sev-snp همراه خواهد بود.

وضعیت: آزمایش‌شده روی Microsoft Azure SEV-SNP & TDX CVM

این یک مهمان محرمانه است که روی معماری s390x با فناوری Protected Virtualization (Secure Execution) اجرا می‌شود.

برنامه‌هایی که از "virt-what-cvm" استفاده می‌کنند یا آن را در بر می‌گیرند، باید پیش از تلاش برای پردازش خروجی دستور، بررسی کنند که وضعیت خروج 0 باشد.

وضعیت خروج غیرصفر نشان‌دهنده بروز خطا است؛ به عنوان مثال، یک آرگومان خط فرمان ناشناخته. اگر وضعیت خروج غیرصفر باشد، حقایق خروجی (در صورت چاپ هر موردی) قابل تضمین نبوده و باید نادیده گرفته شوند.

وضعیت خروج هیچ ارتباطی با اینکه برنامه روی سخت‌افزار واقعی اجرا می‌شود یا تحت مجازی‌سازی محرمانه ندارد، و همچنین ربطی به اینکه آیا "virt-what-cvm" تشخیص را «به‌درستی» انجام داده است یا خیر (که با توجه به تنوع بسیار زیاد سیستم‌های مجازی‌سازی موجود اساساً غیرقابل تعیین است) ندارد.

"virt-what-cvm" به‌گونه‌ای طراحی شده است که بتوانید آن را به آسانی از برنامه‌های دیگر اجرا کرده یا در قالب یک کتابخانه بسته‌بندی کنید.

برنامه شما باید وضعیت خروج را بررسی کند (بخش بالا را ببینید).

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

ویژگی‌های سخت‌افزاری که این برنامه برای احراز حقایق درباره محیط مجازی‌سازی محرمانه به آن‌ها تکیه می‌کند، همان ویژگی‌هایی هستند که رفتار آن‌ها با تأیید اعتبار یک گزارش تصدیق اثبات خواهد شد.

این برنامه ممکن است مثبت کاذب (false positive) داشته باشد؛ به این معنی که ممکن است آن را یک ماشین مجازی محرمانه گزارش کند در حالی که در واقعیت یک ماشین مجازی غیرمحرمانه است که ادای آن را درمی‌آورد.

این برنامه نباید منفی کاذب (false negative) داشته باشد؛ به این معنی که نباید در گزارش وجود یک ماشین مجازی محرمانه ناکام بماند. با این هشدار که این قاعده تنها برای محیط‌هایی معتبر است که به طور صریح آزمایش شده‌اند.

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

به عنوان راهکاری جهت محافظت در برابر منفی‌های کاذب این ابزار، محیط‌هایی که نیازمند ضریب اطمینان بالایی هستند باید یک یا چند مورد از این اقدامات را در نظر بگیرند:

* حقایق گزارش‌شده توسط این برنامه باید در یکی از PCRهای TPM
  اندازه‌گیری و ثبت (measure) شوند
* گزارش تصدیق باید حقایق گزارش‌شده توسط این برنامه را
  پوشش دهد
* گزارش تصدیق باید وضعیت فعال‌سازی هر قابلیتی که تحت تأثیر
  تصمیم‌گیری‌های مبتنی بر حقایق گزارش‌شده توسط این ابزار است
  را پوشش دهد

http://people.redhat.com/~rjones/virt-what, https://github.com/Azure/confidential-computing-cvm-guest-attestation, https://virtee.io

Daniel P. Berrangé <berrange @ redhat . com>

(C) Copyright 2023 Red Hat Inc., http://people.redhat.com/~rjones/virt-what

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است؛ چه نسخه ۲ پروانه و چه (به انتخاب خودتان) هر نسخه بعدی دیگری، بازتوزیع کرده یا تغییر دهید.

این برنامه با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف مشخص. برای جزئیات بیشتر به پروانه عمومی همگانی گنو مراجعه کنید.

شما باید به همراه این برنامه نسخه‌ای از پروانه عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت به آدرس زیر مکاتبه کنید: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

اشکالات را می‌توان در صفحه Bugzilla مربوط به Red Hat مشاهده کرد: https://bugzilla.redhat.com

اگر اشکالی در virt-what-cvm پیدا کردید، لطفاً این مراحل را برای گزارش آن دنبال کنید:

1. بررسی گزارش‌های باگ موجود
به https://bugzilla.redhat.com بروید و اشکالات مشابه را جستجو کنید. ممکن است فرد دیگری پیش‌تر همین باگ را گزارش کرده باشد و حتی ممکن است برطرف شده باشد.
2. ثبت پیام‌های اشکال‌زدایی و خطا
دستور زیر را اجرا کنید:
virt-what-cvm -d > virt-what-cvm.log 2>&1

و فایل virt-what-cvm.log را نگه دارید. این فایل ممکن است حاوی پیام‌های خطایی باشد که باید همراه با گزارش باگ خود ارسال کنید.

3. دریافت نسخه virt-what-cvm
دستور زیر را اجرا کنید:
virt-what-cvm --version
4. ارسال یک گزارش باگ
به https://bugzilla.redhat.com رفته و یک باگ جدید ثبت کنید. لطفاً مشکل را با حداکثر جزئیات ممکن شرح دهید.

به یاد داشته باشید که شماره‌های نسخه (مرحله ۳)، فایل پیام‌های اشکال‌زدایی (مرحله ۲) و تا جای ممکن سایر جزئیات را ضمیمه کنید.

5. انتساب باگ به rjones @ redhat.com
باگ را به rjones @ redhat.com (بدون فاصله‌ها) منتسب یا دوباره منتسب کنید. همچنین اگر مایل به دریافت پاسخ سریع‌تری هستید، می‌توانید یک ایمیل حاوی شماره باگ به من ارسال کنید.
2024-09-28 virt-what-1.27