
صورة حاوية تقوم بتسريب وقت تشغيل الحاوية الأساسية إلى خادم بعيد.
صورة حاوية تستخرج بيئة تشغيل الحاوية الأساسية وترسلها إلى خادم بعيد. اختبر بيئة تشغيل الحاوية الأساسية لمنصة الحاويات المفضلة لديك من موفري الخدمات السحابية!
كما هو موضح من قبل runc CVE-2019-5736، تقوم بيئات تشغيل الحاويات Linux التقليدية بتعريض نفسها للحاويات التي تشغلها من خلال /proc/self/exe. يستخدم whoc هذا الرابط لقراءة بيئة تشغيل الحاوية التي تنفذه.
هذا هو الوضع الافتراضي لـ whoc الذي يعمل ضد بيئات تشغيل الحاويات المرتبطة ديناميكيًا.
whoc إلى /proc/self/exe، وتم استبدال الموصل الديناميكي للصورة (ld.so) بـ upload_runtime.upload_runtime) إلى عملية بيئة التشغيل ويمرر التنفيذ إليها.upload_runtime ثنائي بيئة التشغيل من خلال /proc/self/exe ويرسله إلى الخادم البعيد المُكوّن.
بالنسبة لبيئات تشغيل الحاويات المرتبطة بشكل ثابت، يأتي whoc بنسخة أخرى: whoc:waitforexec.
upload_runtime هو نقطة الدخول للصورة، ويعمل كـ PID 1 لحاوية whoc.whoc واستدعاء ملف يشير إلى /proc/self/exe (مثال: docker exec whoc_ctr /proc/self/exe).upload_runtime ثنائي بيئة التشغيل من خلال /proc/$runtime-pid/exe ويرسله إلى الخادم البعيد المُكوّن.
ستحتاج إلى تثبيت docker و python3. استنسخ المستودع:
git clone [email protected]:twistlock/whoc.git && cd whoc
قم بإعداد خادم ملفات لاستقبال بيئة تشغيل الحاوية المستخرجة:
mkdir -p stash && cd stash
ln -s ../util/fileserver.py fileserver
./fileserver
من شل آخر، قم بتشغيل صورة whoc في بيئة الحاوية التي تختارها، على سبيل المثال Docker:
cd whoc
docker build -f Dockerfile_dynamic -t whoc:latest src # or ./util/build.sh
docker run --rm -it --net=host whoc:latest 127.0.0.1 # or ./util/run_local.sh
لاحظ أن خادم الملفات استقبل بيئة تشغيل الحاوية. إذا قمت بتشغيل whoc تحت Docker العادي، يجب أن تكون بيئة التشغيل المستلمة runc.
يستخدم --net=host فقط في الاختبارات المحلية حتى تتمكن حاوية whoc من الوصول بسهولة إلى خادم الملفات على المضيف عبر 127.0.0.1.
افتراضيًا، يتم بناء whoc لـ linux/amd64، ولكنه يدعم أيضًا معماريات CPU أخرى. يمكن بناء وضع الانتظار للتنفيذ كالمعتاد. لبناء whoc في الوضع الديناميكي لمعماريات CPU أخرى، يجب ملء وسيط البناء PLATFORM_LD_PATH_ARG بمسار الموصل الديناميكي على المعمارية المستهدفة.
نص بناء مثال لـ arm64 متاح في util/build_arm64.sh.
مساعدة للثنائي الرئيسي لـ whoc، upload_runtime:
Usage: upload_runtime [options] <server_ip>
Options:
-p, --port Port of remote server, defaults to 8080
-e, --exec Wait-for-exec mode for static container runtimes, waits until an exec to the container occurred
-b, --exec-bin In exec mode, overrides the default binary created for the exec, default is /bin/enter
-a, --exec-extra-argument In exec mode, pass an additional argument to the runtime so it won't exit quickly
-r, --exec-readdir-proc In exec mode, instead of guessing the runtime pid (which gives whoc one shot of catching the runtime),
find the runtime by searching for new processes under '/proc'