
Android adbd वायरलेस डिबगिंग TLS प्रमाणीकरण बायपास के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो अनधिप्रमाणित रिमोट शेल प्राप्त करने के लिए EC/RSA कुंजी प्रकार बेमेल का उपयोग करता है।
अस्वीकरण: यह प्रूफ ऑफ कॉन्सेप्ट (PoC) केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है। किसी भी डिवाइस या नेटवर्क के विरुद्ध परीक्षण करने से पहले हमेशा सुनिश्चित करें कि आपके पास स्पष्ट अनुमति है।
Android डिवाइस में वायरलेस डिबगिंग नामक एक सुविधा होती है, जो डेवलपर्स को USB केबल के बिना Wi-Fi पर डिवाइस से कनेक्ट करने की अनुमति देती है। इस कनेक्शन को सुरक्षित रखने के लिए, डिवाइस TLS एन्क्रिप्शन का उपयोग करता है और कनेक्ट होने वाले कंप्यूटर से क्रिप्टोग्राफ़िक कुंजी का उपयोग करके अपनी पहचान साबित करने की आवश्यकता होती है।
दोष कहाँ है?
जब कोई कंप्यूटर कनेक्ट होता है, तो Android डेमॉन (adbd) जाँचता है कि कंप्यूटर की कुंजी किसी पहले से अधिकृत कुंजी से मेल खाती है या नहीं। यह एक अंतर्निहित गणितीय फ़ंक्शन (EVP_PKEY_cmp) का उपयोग करके ऐसा करता है जो तीन में से एक संख्या लौटाता है:
1 का अर्थ है: "कुंजियाँ पूरी तरह से मेल खाती हैं।"0 का अर्थ है: "कुंजियाँ मेल नहीं खाती हैं।"-1 का अर्थ है: "त्रुटि: कुंजियाँ पूरी तरह से भिन्न प्रकार की हैं (जैसे, RSA कुंजी की EC कुंजी से तुलना करना)।"बग:
प्रोग्रामर ने एक सरल जाँच लिखी: if (result) { grant_access(); }।
प्रोग्रामिंग में, 1 और -1 दोनों को "True" माना जाता है। इसलिए, यदि कोई हमलावर जानबूझकर पूरी तरह से भिन्न प्रकार की कुंजी भेजता है (जैसे अपेक्षित RSA कुंजी के बजाय एक Elliptic Curve कुंजी), तो फ़ंक्शन -1 (एक त्रुटि) लौटाता है। बगयुक्त कोड -1 देखता है, मान लेता है कि इसका अर्थ "True" है, और फिर भी पूर्ण पहुँच प्रदान कर देता है।
परिणाम: एक ही Wi-Fi नेटवर्क पर मौजूद हमलावर प्रमाणीकरण को पूरी तरह से बायपास कर सकता है और मूल पेयरिंग कुंजियों की आवश्यकता के बिना, तथा उपयोगकर्ता को कोई अनुमोदन संकेत दिखाए बिना, डिवाइस पर रिमोट शेल प्राप्त कर सकता है।
इस एक्सप्लॉइट के काम करने के लिए, लक्षित Android डिवाइस को दो शर्तें पूरी करनी होंगी:
इस स्क्रिप्ट के लिए Python 3 और cryptography लाइब्रेरी की आवश्यकता होती है ताकि एफेमेरल प्रमाणपत्र तुरंत उत्पन्न किए जा सकें।
आप आवश्यक लाइब्रेरी को apt (Debian/Ubuntu/Kali पर) या pip का उपयोग करके इंस्टॉल कर सकते हैं:
apt का उपयोग करना (Linux के लिए अनुशंसित):
sudo apt update
sudo apt install python3-cryptography
pip का उपयोग करना (क्रॉस-प्लेटफ़ॉर्म):
pip3 install cryptography
USB डिबगिंग के विपरीत, Android वायरलेस डिबगिंग के लिए हर बार डिवाइस रीबूट होने या Wi-Fi नेटवर्क बदलने पर एक यादृच्छिक, उच्च-संख्या वाला पोर्ट असाइन करता है।
यदि आप वर्तमान पोर्ट नहीं जानते हैं, तो आप nmap का उपयोग करके इसे आसानी से स्कैन कर सकते हैं। वायरलेस डिबगिंग पोर्ट आमतौर पर 30000 और 50000 के बीच होते हैं।
निम्नलिखित कमांड चलाएँ, <hostname> को अपने लक्ष्य डिवाइस के IP पते से बदलें:
nmap -Pn -p T:30000-50000 <hostname>
आउटपुट को कैसे पढ़ें:
ऐसे पोर्ट की तलाश करें जो open के रूप में दिखाई दे। उदाहरण के लिए:
PORT STATE SERVICE
41234/tcp open unknown
इस उदाहरण में, 41234 वह पोर्ट है जिसका उपयोग आप अगले चरण में करेंगे।
एक बार जब आपके पास लक्ष्य होस्टनाम/IP और सही पोर्ट हो, तो आप एक्सप्लॉइट चला सकते हैं।
पूर्ण इंटरैक्टिव रिमोट शेल खोलने के लिए (SSH के समान):
python3 adb_bypass.py <hostname> <port>
उदाहरण:
python3 adb_bypass.py 192.168.1.50 41234
एक बार कनेक्ट होने के बाद, आपको shell उपयोगकर्ता प्रॉम्प्ट पर छोड़ दिया जाएगा। बाहर निकलने के लिए Ctrl+C दबाएँ।
यदि आप केवल एक विशिष्ट कमांड चलाना चाहते हैं और इंटरैक्टिव शेल में प्रवेश किए बिना आउटपुट देखना चाहते हैं, तो --cmd फ़्लैग का उपयोग करें:
python3 adb_bypass.py <hostname> <port> --cmd "id"
डिबगिंग या शोध उद्देश्यों के लिए अंतर्निहित नेटवर्क ट्रैफ़िक और हैंडशेक विवरण देखने के लिए, -v फ़्लैग जोड़ें:
python3 adb_bypass.py <hostname> <port> -v
CNXN और STLS पैकेट्स का आदान-प्रदान करती है।cryptography लाइब्रेरी का उपयोग करते हुए, स्क्रिप्ट मेमोरी में एक अस्थायी EC P-256 निजी कुंजी और एक स्व-हस्ताक्षरित X.509 प्रमाणपत्र उत्पन्न करती है।EVP_PKEY_cmp -1 लौटाता है, if (cmp) जाँच true हो जाती है, और डिवाइस कनेक्शन को अधिकृत के रूप में चिह्नित कर देता है।delayed_ack विंडो का उपयोग करके shell: स्ट्रीम खोलती है, जिसके परिणामस्वरूप एक अनधिकृत रिमोट शेल प्राप्त होता है।