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