
GoTEE - تطبيق مثال
ينفّذ إطار عمل GoTEE إنشاءً متزامنًا لليونيكيرنلات المبنية على TamaGo في الأوضاع المميزة وغير المميزة، بحيث تتفاعل مع بعضها البعض من خلال وضع المراقب واستدعاءات النظام المخصصة.
بفضل هذه الإمكانيات، ينفّذ GoTEE بيئات تنفيذ موثوقة (TEE) قائمة على TamaGo، مما يجلب أمان الذاكرة وسهولة الاستخدام والإمكانيات التي توفرها لغة Go إلى التنفيذ على المعدن العاري داخل العالم الآمن لـ ARM TrustZone أو بيئات تنفيذ المشرف في RISC-V.
يمكن لـ GoTEE الإشراف على التطبيقات الموثوقة المستقلة المبنية بلغة Go أو Rust أو C، والتي تنفّذ واجهة برمجة تطبيقات GoTEE، بالإضافة إلى أي نظام تشغيل قادر على العمل في العالم العادي لـ ARM TrustZone أو وضع S-mode في RISC-V مثل Linux.
سياقات تنفيذ معزولة لوضع مستخدم ARM، أو العالم العادي لـ TrustZone، أو وضع المشرف RISC-V
واجهة برمجة تطبيقات لبناء نظام التشغيل الموثوق (استدعاءات النظام (Syscall) ومعالجات JSON-RPC والاستثناءات)
يمكن العثور على التوثيق الرئيسي، الذي يتضمن برنامجًا تعليميًا، في ويكي المشروع.
يمكن العثور على توثيق واجهة برمجة تطبيقات الحزمة على pkg.go.dev.
يلخّص الجدول التالي أنظمة SoC واللوحات المدعومة حاليًا.
| SoC | اللوحة | حزمة SoC | حزمة اللوحة |
|---|---|---|---|
| NXP i.MX6ULZ | USB armory Mk II | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL | MCIMX6ULL-EVK | imx6ul | mx6ullevk |
| SiFive FU540 | QEMU sifive_u | fu540 | qemu/sifive_u |
في مصطلحات TEE، يُشار عادةً إلى اليونيكيرنل المميز باسم نظام التشغيل الموثوق (Trusted OS)، بينما يمثل غير المميز تطبيقًا موثوقًا (Trusted Applet).
يوضح مثال GoTEE التشغيل المتزامن ليونيكيرنلات Go التي تعمل كنظام تشغيل موثوق وتطبيق موثوق ونظام تشغيل رئيسي.
[!WARNING] يمكن أن يكون نظام التشغيل الرئيسي أي نظام تشغيل «غني» (مثل Linux)، ويُستخدم TamaGo ببساطة لمثال مكتفٍ ذاتيًا. وينطبق الأمر نفسه على التطبيق الموثوق الذي يمكن أن يكون أي تطبيق معدني عاري قادر على العمل في وضع المستخدم وتنفيذ واجهة برمجة تطبيقات GoTEE، مثل برامج C أو Rust المستقلة.
يمكن استخدام مثال Rust عن طريق استبدال
trusted_applet_goبـtrusted_applet_rustعند البناء.
يجري المزيج المكوّن من نظام التشغيل الموثوق والتطبيق الموثوق في المثال اختبارًا أساسيًا للتنفيذ المتزامن لثلاثة يونيكيرنلات TamaGo بمستويات امتياز مختلفة:
يُعيد نظام التشغيل الرئيسي التحكم عبر استدعاء مراقب.
ينام التطبيق الموثوق لمدة 5 ثوانٍ قبل محاولة قراءة ذاكرة نظام التشغيل الموثوق، مما يؤدي إلى استثناء يعالجه المشرف وينهي التطبيق الموثوق.
يتم تنفيذ واجهة syscall الخاصة بـ GoTEE للتواصل بين نظام التشغيل الموثوق والتطبيق الموثوق.
عند تشغيله على USB armory Mk II، يمكن الوصول إلى التطبيق المثال عبر SSH من خلال Ethernet عبر USB (بروتوكول ECM، مدعوم على مضيفي Linux وmacOS):
$ ssh [email protected]
tamago/arm • TEE security monitor (Secure World system/monitor)
allgptr # memory forensics of applet goroutines
csl # show config security levels (CSL)
csl <periph> <slave> <hex csl> # set config security level (CSL)
dbg # show ARM debug permissions
exit, quit # close session
gotee # TrustZone example w/ TamaGo unikernels
help # this help
linux <uSD|eMMC> # boot NonSecure USB armory Debian base image
lockstep <fault %> # tandem applet example w/ fault injection
peek <hex offset> <size> # memory display (use with caution)
poke <hex offset> <hex value> # memory write (use with caution)
reboot # reset device
sa # show security access (SA)
sa <id> <secure|nonsecure> # set security access (SA)
stack # stack trace of current goroutine
stackall # stack trace of all goroutines
>
يمكن تشغيل المثال بأمر gotee الذي يطلق نظام التشغيل الرئيسي مرتين لإظهار السلوك قبل وبعد تفعيل قيود TrustZone باستخدام الأجهزة الطرفية الحقيقية.
بالإضافة إلى ذلك، يمكن استخدام أمر linux لتشغيل صورة Debian الأساسية لـ USB armory كنظام تشغيل رئيسي غير آمن.
[!NOTE] لا تُدعم للتشغيل غير الآمن إلا إصدارات صورة Debian الأساسية لـ USB armory
= 20211129.

يمكن أيضًا تشغيل المثال عبر محاكاة QEMU.
[!NOTE] تقوم عمليات المحاكاة بإجراء اختبارات جزئية بسبب عدم دعم QEMU الكامل لـ TrustZone/PMP.