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