नेटिव कोड का इस्तेमाल

OWASP कैटगरी: MASVS-CODE: कोड क्वालिटी

खास जानकारी

Android ऐप्लिकेशन, कुछ खास सुविधाओं के लिए C और C++ जैसी भाषाओं में लिखे गए नेटिव कोड का फ़ायदा ले सकते हैं. हालांकि, जब कोई ऐप्लिकेशन इस नेटिव कोड के साथ इंटरैक्ट करने के लिए, Java नेटिव इंटरफ़ेस (JNI) का इस्तेमाल करता है, तो वह बफ़र ओवरफ़्लो जैसी कमजोरियों और नेटिव कोड लागू करने से जुड़ी अन्य समस्याओं के संपर्क में आ सकता है.

असर

परफ़ॉर्मेंस को ऑप्टिमाइज़ करने और कोड को छिपाने जैसे बहुत अच्छे असर के बावजूद, Android ऐप्लिकेशन में नेटिव कोड का इस्तेमाल करने से सुरक्षा पर बुरा असर पड़ सकता है. C/C++ जैसी नेटिव कोड लैंग्वेज में, Java/Kotlin की मेमोरी सुरक्षा सुविधाएं मौजूद नहीं हैं. इस वजह से, बफ़र ओवरफ़्लो, इस्तेमाल के बाद होने वाली गड़बड़ियों, और मेमोरी में गड़बड़ी से जुड़ी अन्य समस्याओं का सामना करना पड़ सकता है. इन समस्याओं की वजह से, ये क्रैश या आर्बिट्रेरी कोड एक्ज़ीक्यूट करते हैं. इसके अलावा, अगर नेटिव कोड कॉम्पोनेंट में जोखिम की आशंका मौजूद है, तो इससे पूरे ऐप्लिकेशन के साथ छेड़छाड़ हो सकती है. भले ही, बाकी का हिस्सा Java में सुरक्षित तरीके से क्यों न लिखा गया हो.

जोखिम कम करने के तरीके

डेवलपमेंट और कोडिंग के बारे में दिशा-निर्देश

  • सुरक्षित कोडिंग के दिशा-निर्देश: C/C++ प्रोजेक्ट के लिए, लागू किए गए सुरक्षित कोडिंग मानकों का पालन करें (उदाहरण के लिए, CERT, OWASP) का इस्तेमाल करें. इससे बफ़र ओवरफ़्लो, पूर्णांक ओवरफ़्लो, और फ़ॉर्मैट स्ट्रिंग अटैक जैसी जोखिम की आशंकाओं को कम करने में मदद मिलती है. Abseil जैसी लाइब्रेरी को प्राथमिकता दें, जो क्वालिटी और सुरक्षा के लिए जानी जाती हैं. जब भी मुमकिन हो, Rust जैसी मेमोरी-सेफ़ भाषाओं का इस्तेमाल करें. ये भाषाएं C/C++ जैसी परफ़ॉर्मेंस देती हैं.
  • इनपुट की पुष्टि करना: बाहरी सोर्स से मिले सभी इनपुट डेटा की पुष्टि करना. इसमें उपयोगकर्ता का इनपुट, नेटवर्क डेटा, और फ़ाइलें शामिल हैं. इससे इंजेक्शन अटैक और अन्य जोखिमों से बचा जा सकता है.

कंपाइल करने के विकल्पों को बेहतर बनाना

ईएलएफ़ फ़ॉर्मैट का इस्तेमाल करने वाली नेटिव लाइब्रेरी को जोखिम की कई आशंकाओं से मज़बूत बनाया जा सकता है. इसके लिए, स्टैक प्रोटेक्शन (कैनरी), रीलोकेशन रीड-ओनली (आरईएलआरओ), डेटा एक्ज़ीक्यूशन प्रिवेंशन (एनएक्स), और पोज़ीशन-इंडिपेंडेंट एक्ज़ीक्यूटेबल (पीआईई) जैसे सुरक्षा के तरीके चालू किए जा सकते हैं. आसानी से, Android एनडीके (NDK) के कंपाइलेशन विकल्प में ये सभी सुरक्षा सुविधाएं डिफ़ॉल्ट रूप से चालू होती हैं.

किसी बाइनरी में सुरक्षा के इन तरीकों के लागू होने की पुष्टि करने के लिए, hardening-check या pwntools जैसे टूल का इस्तेमाल किया जा सकता है.

बैश

$ pwn checksec --file path/to/libnativecode.so
    Arch:     aarch64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled

पुष्टि करना कि तीसरे पक्ष की लाइब्रेरी में कोई जोखिम न हो

तीसरे पक्ष की लाइब्रेरी चुनते समय, उन लाइब्रेरी का इस्तेमाल करें जिनकी डेवलपर कम्यूनिटी में अच्छी ख्याति हो. Google Play SDK इंडेक्स जैसे संसाधन, जानी-मानी और भरोसेमंद लाइब्रेरी की पहचान करने में आपकी मदद कर सकते हैं. पक्का करें कि आपने लाइब्रेरी को नए वर्शन में अपडेट किया हो. साथ ही, Exploit-DB के डेटाबेस जैसे संसाधनों का इस्तेमाल करके, उनसे जुड़ी किसी भी कमज़ोरी को पहले से खोजें. [library_name] vulnerability या [library_name] CVE जैसे कीवर्ड का इस्तेमाल करके वेब पर खोज करने पर, सुरक्षा से जुड़ी अहम जानकारी दिख सकती है.

संसाधन