OWASP বিভাগ: MASVS-CODE: কোডের কোয়ালিটি
এক নজরে
Android অ্যাপ্লিকেশন নির্দিষ্ট কার্যকারিতার জন্য C এবং C++ এর মতো ভাষায় লেখা নেটিভ কোডের সুবিধা নিতে পারে। তবে, কোনও অ্যাপ্লিকেশন এই নেটিভ কোডের সাথে ইন্টার্যাক্ট করার জন্য Java Native Interface (JNI) ব্যবহার করলে, এটি সম্ভাব্যভাবে বাফার ওভারফ্লো এবং নেটিভ কোড ইমপ্লিমেন্টেশনে উপস্থিত থাকতে পারে এমন অন্যান্য সমস্যার মতো দুর্বলতার মুখোমুখি হতে পারে।
প্রভাব
পারফর্ম্যান্স অপ্টিমাইজেশন এবং অস্পষ্টকরণের মতো খুব ইতিবাচক প্রভাব থাকা সত্ত্বেও, Android অ্যাপ্লিকেশনে নেটিভ কোড ব্যবহার করলে নিরাপত্তার উপর নেতিবাচক প্রভাব পড়তে পারে। C/C++-এর মতো নেটিভ কোড ল্যাঙ্গুয়েজে Java/Kotlin-এর মতো মেমরি নিরাপত্তা ফিচার নেই, তাই বাফার ওভারফ্লো, ইউজ-আফটার-ফ্রি এরর এবং অন্যান্য মেমরি করাপশন সংক্রান্ত সমস্যার মতো দুর্বলতা থেকে যায় – যার ফলে ক্র্যাশ বা আর্বিট্রারি কোড এক্সিকিউশন হয়। এছাড়াও, নেটিভ কোড কম্পোনেন্টে কোনও দুর্বলতা থাকলে, এটি সম্ভাব্যভাবে সম্পূর্ণ অ্যাপ্লিকেশনকে আপোস করতে পারে, এমনকি বাকি অংশ জাভাতে নিরাপদে লেখা থাকলেও।
মিটিগেশন
ডেভেলপমেন্ট ও কোডিং সংক্রান্ত নির্দেশিকা
- সুরক্ষিত কোডিং সংক্রান্ত নির্দেশিকা: C/C++ প্রোজেক্টের জন্য, বাফার ওভারফ্লো, ইন্টিজার ওভারফ্লো এবং ফর্ম্যাট স্ট্রিং অ্যাটাকের মতো দুর্বলতা কমাতে, প্রতিষ্ঠিত সুরক্ষিত কোডিং স্ট্যান্ডার্ড (যেমন, CERT, OWASP) মেনে চলুন। Abseil-এর মতো লাইব্রেরিকে অগ্রাধিকার দিন যা কোয়ালিটি ও নিরাপত্তার জন্য পরিচিত। সম্ভব হলে, Rust-এর মতো মেমরি-সেফ ভাষা ব্যবহার করার কথা বিবেচনা করুন, যা C/C++-এর মতো পারফর্ম্যান্স প্রদান করে।
- ইনপুট যাচাইকরণ: ইনজেকশন অ্যাটাক ও অন্যান্য দুর্বলতা প্রতিরোধ করতে, ব্যবহারকারীর ইনপুট, নেটওয়ার্ক ডেটা ও ফাইল সহ এক্সটার্নাল সোর্স থেকে পাওয়া সব ইনপুট ডেটা কঠোরভাবে যাচাই করুন।
কম্পাইলেশন বিকল্প আরও সুরক্ষিত করুন
ELF ফর্ম্যাট ব্যবহার করে এমন নেটিভ লাইব্রেরিগুলিকে স্ট্যাক প্রোটেকশন (Canary), রিলোকেশন রিড-ওনলি (RELRO), ডেটা এক্সিকিউশন প্রিভেনশন (NX) এবং পজিশন-ইন্ডিপেন্ডেন্ট এক্সিকিউটেবল (PIE)-এর মতো প্রোটেক্টিভ মেকানিজম অ্যাক্টিভেট করে বিভিন্ন ধরনের দুর্বলতার বিরুদ্ধে সুরক্ষিত করা যেতে পারে। সুবিধাজনকভাবে, Android NDK কম্পাইলেশন বিকল্প আগে থেকেই ডিফল্ট হিসেবে এইসব সুরক্ষা চালু করে।
বাইনারির মধ্যে এইসব নিরাপত্তা মেকানিজমের প্রয়োগ যাচাই করতে, আপনি hardening-check বা pwntools-এর মতো টুল ব্যবহার করতে পারেন।
Bash
$ 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
Index-এর মতো রিসোর্স আপনাকে সুপরিচিত ও নির্ভরযোগ্য লাইব্রেরি শনাক্ত করতে সাহায্য করতে পারে। লাইব্রেরিগুলি
লেটেস্ট ভার্সনে আপডেট করা আছে কিনা তা নিশ্চিত করুন এবং Exploit-DB-এর মতো ডেটাবেস থেকে রিসোর্স ব্যবহার করে
সেগুলির সাথে সম্পর্কিত কোনও পরিচিত দুর্বলতা
সক্রিয়ভাবে সার্চ করুন। [library_name] vulnerability বা [library_name] CVE-এর মতো কীওয়ার্ড ব্যবহার করে
ওয়েব সার্চ করলে গুরুত্বপূর্ণ নিরাপত্তা সংক্রান্ত
তথ্য প্রকাশ পেতে পারে।
রিসোর্স
- CWE-111: অসুরক্ষিত JNI-এর সরাসরি ব্যবহার
- এক্সপ্লয়েট ডেটাবেস
- নিরাপত্তা আরও জোরদার করার ফিচারের জন্য বাইনারি চেক করুন
- pwntools-এর সাহায্যে বাইনারি নিরাপত্তা সেটিংস চেক করা
- Linux বাইনারি নিরাপত্তা হার্ডেনিং
- রিলোকেশন রিড-ওনলি (RELRO) ব্যবহার করে ELF বাইনারি হার্ডেনিং করা
- OWASP বাইনারি প্রোটেকশন মেকানিজম
- SEI CERT কোডিং স্ট্যান্ডার্ড
- OWASP ডেভেলপার নির্দেশিকা
- Google Play SDK Index
- Android NDK
- Android Rust-এর ভূমিকা
- Abseil (C++ Common Libraries)
- লিঙ্কার PIE এনফোর্স করে