
सुरक्षा प्रशिक्षण प्लेटफार्मों में मोबाइल घटकों के एकीकरण को सक्षम करने के लिए एक कंटेनर-आधारित ढांचा
डॉकराइज़्ड एंड्रॉइड एक कंटेनर-आधारित ढाँचा है जो डॉकर के अंदर एंड्रॉइड एमुलेटर को चलाने और इसे ब्राउज़र के माध्यम से नियंत्रित करने की अनुमति देता है। यह प्रोजेक्ट साइबर रेंज में मोबाइल सुरक्षा घटकों को एकीकृत करने के लिए एक प्रारंभिक बिंदु प्रदान करने के उद्देश्य से विकसित किया गया है, लेकिन इसका उपयोग किसी भी उद्देश्य के लिए किया जा सकता है। किसी भी मामले में, विकास और परीक्षण उद्देश्यों के लिए सुझाया गया प्रोजेक्ट docker-android है।
जैसा कि उपरोक्त संक्षिप्त विवरण में कहा गया है, यह प्रोजेक्ट साइबर रेंज में मोबाइल सुरक्षा घटकों को शामिल करने के लिए एक प्रारंभिक बिंदु प्रदान करने के उद्देश्य से बनाया गया है। इस कारण से, पहले से विकसित की गई सुविधाएँ और भविष्य में जोड़ी जाने वाली सुविधाएँ उपयोगकर्ता को यथार्थवादी सिमुलेशन (उदाहरण के लिए सुरक्षा प्रशिक्षण के लिए) सेट करने में आसान बनाने में मदद करेंगी। यह README काफी लंबा है, शायद आप सीधे "कैसे चलाएं" भाग पर जाना चाहें।
वर्तमान में निम्नलिखित सुविधाएँ उपलब्ध हैं:
| प्रारंभिक सेटअप | इंस्टेंस प्रबंधक सेटअप | मैन्युअल सेटअप |
|---|---|---|
| initial-setup | instance-manager-setup | manual-setup |
| टूलबॉक्स सुविधाएँ | इंस्टेंस स्विच |
|---|---|
| toolbox | instance-switch |
प्रोजेक्ट तीन मुख्य भागों से बना है:
मुख्य घटक वह है जो एक डॉकर कंटेनर के अंदर एंड्रॉइड घटक (एमुलेटेड या वास्तविक) को चलाने के लिए आवश्यक सभी प्रक्रियाओं को निष्पादित करता है, साथ ही बाहर की ओर कुछ सुविधाओं को उजागर करता है। यह निस्संदेह सबसे जटिल भाग है क्योंकि इसे सुविधाओं का एक सेट प्रदान करने के लिए विभिन्न प्रक्रियाओं का प्रबंधन करना होता है। उपरोक्त आंकड़ा दीर्घकालिक प्रक्रियाओं, आरंभिक प्रक्रियाओं और उपयोगिता स्क्रिप्ट के बीच एक स्पष्ट अंतर दिखाता है। इसके अलावा, यह आंकड़ा दर्शाता है कि 6 दीर्घकालिक प्रक्रियाएँ हैं, यह मुख्य घटक का सामान्य अवलोकन प्रदान करने के लिए जोड़ी गई एक छोटी अशुद्धि है, वास्तव में मुख्य घटक के दो अलग-अलग स्वाद हैं:
मुख्य वास्तुशिल्प अंतर दीर्घकालिक प्रक्रियाओं से संबंधित है: एमुलेटर के लिए कोर दीर्घकालिक एमुलेटर प्रक्रिया चलाता है जबकि वास्तविक डिवाइस के लिए कोर भौतिक डिवाइस को प्रदर्शित और नियंत्रित करने के लिए दीर्घकालिक scrcpy प्रक्रिया चलाता है। अन्य भाग काफी समान हैं, बस कोर घटक के प्रकार के आधार पर अलग-अलग व्यवहार का पालन करने के लिए कुछ तर्क के साथ।
UI घटक बैकएंड द्वारा प्रदान की गई सभी सुविधाओं का उपयोग करने का एक सरल तरीका प्रदान करता है और डिवाइस को प्रदर्शित और नियंत्रित करने की क्षमता भी जोड़ता है। उपयोगकर्ता को मैन्युअल रूप से कोर घटक का पता और संबंधित पोर्ट (बैकएंड द्वारा प्रदान किया गया पोर्ट और websockify द्वारा प्रदान किया गया पोर्ट) डालना होता है; इस मैन्युअल सेटअप के माध्यम से डिफ़ॉल्ट पोर्ट (जो बैकएंड के लिए 4242 और websockify के लिए 6080 हैं) को बदलना संभव है।
इंस्टेंस प्रबंधक घटक का कार्य एक एकल REST API के माध्यम से चल रहे कोर के बारे में सभी जानकारी (यानी, पते और पोर्ट) प्रदान करना है। यह एक सरल JSON कॉन्फ़िगरेशन फ़ाइल लिखकर किया जाता है जिसमें docker-compose में मौजूद सभी कोर के बारे में जानकारी होती है, ताकि एक-एक करके मैन्युअल रूप से जोड़ने के कष्टदायक कार्य से बचा जा सके। JSON कॉन्फ़िगरेशन फ़ाइल की संरचना निम्नलिखित है:
{
"instances": [
{
"name": [डिवाइस की पहचान करने के लिए सामान्य स्ट्रिंग],
"address": [घटक का पता],
"core_port": [बैकएंड का पोर्ट],
"vnc_port": [VNC का पोर्ट]
}
]
}
secsi/dockerized-android-core-bare कोई सिस्टम इमेज डाउनलोड नहीं करता है और आप अपने होस्ट मशीन पर वह फ़ोल्डर माउंट कर सकते हैं जहाँ आपके पास सभी SDK फ़ोल्डर हैं।
प्लेटफ़ॉर्म चलाने का पूरा उदाहरण देखने के लिए आप examples निर्देशिका में उपलब्ध docker-compose देख सकते हैं। इस निर्देशिका में तीन अलग-अलग कॉन्फ़िगरेशन हैं:
एक बार जब आप समझ जाते हैं कि यह कैसे काम करता है, तो आप अपनी किसी भी आवश्यकता को पूरा करने के लिए इसे बदल सकते हैं।
आपकी मशीन पर Docker और Docker Compose स्थापित होना चाहिए।
यह प्लेटफ़ॉर्म होस्ट OS के आधार पर अलग-अलग तरीकों से व्यवहार करता है, यहाँ एक तालिका है जो वर्तमान अनुकूलता को सारांशित करती है:
| Linux | Windows | OS X | |
|---|---|---|---|
| एमुलेटर के लिए कोर | पूर्ण अनुकूलता | अभी समर्थित नहीं | समर्थित नहीं |
| वास्तविक डिवाइस के लिए कोर | पूर्ण अनुकूलता | पूर्ण अनुकूलता | वर्कअराउंड |
Windows और OS X के लिए आपको नेस्टेड वर्चुअलाइज़ेशन के साथ एक Linux VM का उपयोग करना होगा।
यह जाँचने के लिए कि क्या आपकी Linux मशीन नेस्टेड वर्चुअलाइज़ेशन का समर्थन करती है, आप निम्नलिखित कमांड चला सकते हैं:
sudo apt install cpu-checker
kvm-ok
OS X पर वास्तविक डिवाइस के लिए कोर का उपयोग करने के लिए आप:
वायरलेस कनेक्शन के लिए Google एक सरल ट्यूटोरियल प्रदान करता है। कंटेनर के अंदर से होस्ट adb से कनेक्ट करने के लिए आपको मैन्युअल रूप से कंटेनर के अंदर प्रवेश करना होगा और चलाना होगा:
adb -H host.docker.internal devices
फ्रेमवर्क का उपयोग शुरू करने के लिए कमांड निम्नानुसार हैं:
cp ./examples/docker-compose-core.yml docker-compose.yml
docker-compose up
अधिक सरलता से आप निम्न कमांड का भी उपयोग कर सकते हैं:
docker-compose -f ./examples/docker-compose-core.yml up
अब केवल ब्राउज़र के माध्यम से निम्नलिखित पते http://127.0.0.1:8080 पर नेविगेट करना और वर्तमान कॉन्फ़िगरेशन सेट करना शेष है:
यदि इंस्टेंस प्रबंधक का उपयोग नहीं किया गया था, तो मैन्युअल सेटअप पर क्लिक करें और निम्नलिखित जानकारी दर्ज करें:
यदि इंस्टेंस प्रबंधक का उपयोग किया जाता है, तो "इंस्टेंस प्रबंधक" पर क्लिक करें और केवल IP पता और उसका पोर्ट नंबर (उदाहरण के लिए, 193.21.1.100:7373) दर्ज करें।
बस इतना ही! आप ब्राउज़र के भीतर फ्रेमवर्क का उपयोग कर सकते हैं।
आप utils फ़ोल्डर में रखी स्क्रिप्ट के माध्यम से स्वयं भी इमेज बना सकते हैं।
आप ENV वेरिएबल के माध्यम से सेटअप को अनुकूलित करने के लिए कुछ सुविधाओं को कॉन्फ़िगर कर सकते हैं, निम्नलिखित तालिका उन सभी की सूची प्रदान करती है:
REAL_DEVICE_SERIAL वेरिएबल महत्वपूर्ण है यदि एक से अधिक भौतिक डिवाइस जुड़े हैं क्योंकि यदि यह गायब है तो कुछ भी काम नहीं करेगा। अंत में प्रत्येक घटक द्वारा उजागर किए गए पोर्ट की एक सूची है:
डॉकराइज़्ड एंड्रॉइड एक ओपन-सोर्स और मुफ्त सॉफ्टवेयर है जो MIT लाइसेंस के तहत जारी किया गया है।
यदि आप इस कोड को अपने शोध में उपयोगी पाते हैं, तो कृपया हमारे पेपर का हवाला देने पर विचार करें:
@inproceedings{Capone2022,
doi = {10.1109/icecet55527.2022.9872834},
url = {https://doi.org/10.1109/icecet55527.2022.9872834},
year = {2022},
month = jul,
publisher = {{IEEE}},
author = {Daniele Capone and Francesco Caturano and Angelo Delicato and Gaetano Perrone and Simon Pietro Romano},
title = {Dockerized Android: a container-based platform to build mobile Android scenarios for Cyber Ranges},
booktitle = {2022 International Conference on Electrical, Computer and Energy Technologies ({ICECET})}
}
यह प्रोजेक्ट नेपल्स के फेडेरिको II विश्वविद्यालय में कंप्यूटर इंजीनियरिंग में हमारी मास्टर थीसिस का प्रतिनिधित्व करता है। प्रोफेसर Simon Pietro Romano और इंजीनियर Francesco Caturano को विशेष धन्यवाद, जो इस कार्य के लिए प्रेरणा स्रोत हैं।
| एंड्रॉइड संस्करण | API | इमेज |
|---|
| 5.0.1 | 21 | secsi/dockerized-android-core-emulator-5.0.1 |
| 5.1.1 | 22 | secsi/dockerized-android-core-emulator-5.1.1 |
| 6.0 | 23 | secsi/dockerized-android-core-emulator-6.0 |
| 7.0 | 24 | secsi/dockerized-android-core-emulator-7.0 |
| 7.1.1 | 25 | secsi/dockerized-android-core-emulator-7.1.1 |
| 8.0 | 26 | secsi/dockerized-android-core-emulator-8.0 |
| 8.1 | 27 | secsi/dockerized-android-core-emulator-8.1 |
| 9.0 | 28 | secsi/dockerized-android-core-emulator-9.0 |
| 10.0 | 29 | secsi/dockerized-android-core-emulator-10.0 |
| 11.0 | 30 | secsi/dockerized-android-core-emulator-11.0 |
| - | - | secsi/dockerized-android-core-bare |
| - | - | secsi/docker-android-core-real-device |
| घटक | ENV नाम | डिफ़ॉल्ट मान | विवरण |
|---|
| कोर | TARGET_PORT | 6080 | websockify पोर्ट |
| कोर | CUSTOM_APP_DEFAULT_PORT | 4242 | Node.js बैकएंड पोर्ट |
| कोर | DEVICEINFO | अनसेट, लेकिन true की तरह व्यवहार करता है | डिवाइस जानकारी सुविधा को सक्षम/अक्षम करता है |
| कोर | TERMINAL | अनसेट, लेकिन true की तरह व्यवहार करता है | टर्मिनल सुविधा को सक्षम/अक्षम करता है |
| कोर | APK | अनसेट, लेकिन true की तरह व्यवहार करता है | APK इंस्टॉल सुविधा को सक्षम/अक्षम करता है |
| कोर | FORWARD | अनसेट, लेकिन true की तरह व्यवहार करता है | पोर्ट फ़ॉरवर्ड सुविधा को सक्षम/अक्षम करता है |
| कोर | SMS | अनसेट, लेकिन true की तरह व्यवहार करता है | SMS अनुकरण सुविधा को सक्षम/अक्षम करता है |
| कोर | REBOOT | अनसेट, लेकिन true की तरह व्यवहार करता है | रिबूट सुविधा को सक्षम/अक्षम करता है |
| कोर | INSTALL_ON_STARTUP | false | उस सुविधा को सक्षम/अक्षम करता है जो /root/dockerized-android/apk फ़ोल्डर में रखे गए सभी apk को इंस्टॉल करने की अनुमति देती है |
| कोर | ENABLE_UNKNOWN_SOURCES | false | अज्ञात स्रोतों से इंस्टॉल को सक्षम करता है |
| कोर | REAL_DEVICE_SERIAL | अनसेट | यदि एक से अधिक भौतिक डिवाइस जुड़े हैं तो यह मान उस डिवाइस के सीरियल पर सेट होना चाहिए जिसे नियंत्रित करना है अन्यथा अन्य सभी सुविधाएँ काम नहीं करेंगी |
| इंस्टेंस प्रबंधक | DEFAULT_PORT | 7373 | REST API का पोर्ट |
| घटक | पोर्ट # | विवरण |
|---|
| कोर | 5555 | ADB पोर्ट |
| कोर | 4242 | Node.js बैकएंड |
| कोर | 6080 | websockify (noVNC के लिए) |
| UI | 80 | फ्रंटएंड |
| इंस्टेंस प्रबंधक | 7373 | REST API |