এই বিভাগে অ্যান্ড্রয়েড ডিভাইসে অ্যাপের নিরাপত্তা নিশ্চিত করার জন্য সুপারিশসমূহ রয়েছে।
সোর্স কোড পর্যালোচনা
সোর্স কোড পর্যালোচনার মাধ্যমে এই নথিতে চিহ্নিত সমস্যাগুলোসহ বিস্তৃত পরিসরের নিরাপত্তা সমস্যা শনাক্ত করা যায়। অ্যান্ড্রয়েড ম্যানুয়াল এবং স্বয়ংক্রিয় উভয় প্রকার সোর্স কোড পর্যালোচনাকেই দৃঢ়ভাবে উৎসাহিত করে।
- পর্যালোচনা পরিচালনার সময় এর আওতা নিশ্চিত করতে বিস্তারিত নিরাপত্তা নির্দেশিকা অনুসরণ করুন। পর্যালোচনাগুলোর মধ্যে সামঞ্জস্য ও পূর্ণতা নিশ্চিত করতে প্রাসঙ্গিক অভ্যন্তরীণ বা বাহ্যিক মানদণ্ড ব্যবহার করুন।
- অ্যান্ড্রয়েড এসডিকে ব্যবহার করে তৈরি অ্যাপের সমস্ত কোডে অ্যান্ড্রয়েড স্টুডিও লিন্টারের মতো একটি লিন্টার চালান এবং চিহ্নিত যেকোনো সমস্যা সমাধান করুন।
- একটি স্বয়ংক্রিয় টুল ব্যবহার করে নেটিভ কোড বিশ্লেষণ করুন যা বাফার ওভারফ্লো এবং অফ-বাই-ওয়ান ত্রুটির মতো মেমরি ব্যবস্থাপনার সমস্যাগুলি সনাক্ত করতে পারে।
- অ্যান্ড্রয়েড বিল্ড সিস্টেম AddressSanitizer এবং UndefinedBehaviorSanitizer- এর মতো অনেক LLVM স্যানিটাইজার সমর্থন করে, যা মেমরি-সম্পর্কিত সমস্যার রানটাইম বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে। অ্যান্ড্রয়েডে libFuzzer- এর মাধ্যমে সমর্থিত ফাজিং-এর সাথে মিলিত হয়ে, স্যানিটাইজারগুলো এমন অস্বাভাবিক এজ কেসগুলো উদ্ঘাটন করতে পারে যেগুলোর জন্য আরও তদন্তের প্রয়োজন হয়।
- একজন অভিজ্ঞ নিরাপত্তা মূল্যায়নকারীর ক্রিপ্টো, পেমেন্ট প্রসেসিং এবং পিআইআই প্রসেসিং-এর মতো উচ্চ ঝুঁকিপূর্ণ কোড পর্যালোচনা করা উচিত।
স্বয়ংক্রিয় পরীক্ষা
স্বয়ংক্রিয় পরীক্ষা বিভিন্ন ধরনের নিরাপত্তা সমস্যা শনাক্ত করতে সাহায্য করতে পারে এবং এটি নিয়মিতভাবে করা উচিত।
- সমস্যাগুলো আগেভাগে শনাক্ত করতে এবং সমাধানের সময় কমাতে, ডেভেলপমেন্ট প্রক্রিয়া জুড়ে নিয়মিতভাবে CTS- এর সর্বশেষ সংস্করণটি চালান। অ্যান্ড্রয়েড আমাদের স্বয়ংক্রিয় বিল্ড প্রক্রিয়ায় কন্টিনিউয়াস ইন্টিগ্রেশনের অংশ হিসেবে CTS ব্যবহার করে, যা দিনে একাধিকবার বিল্ড সম্পন্ন করে।
- ইন্টারফেসের নিরাপত্তা পরীক্ষা স্বয়ংক্রিয় করুন, যার মধ্যে ত্রুটিপূর্ণ ইনপুট দিয়ে পরীক্ষাও (ফাজ টেস্টিং) অন্তর্ভুক্ত। ফাজ টেস্ট লেখার জন্য অ্যান্ড্রয়েডের বিল্ড সিস্টেম libFuzzer সমর্থন করে।
দুর্বলতা স্ক্যানিং
দুর্বলতা স্ক্যানিং আগে থেকে ইনস্টল করা অ্যাপগুলো পরিচিত নিরাপত্তা দুর্বলতা থেকে মুক্ত কিনা তা নিশ্চিত করতে সাহায্য করে। উন্নত শনাক্তকরণ এই দুর্বলতাগুলো মোকাবিলা করার জন্য প্রয়োজনীয় সময় ও খরচ কমাতে পারে এবং ব্যবহারকারী ও ডিভাইসের ঝুঁকি প্রতিরোধ করতে পারে।
- শিল্পক্ষেত্রে স্বীকৃত কোনো অ্যাপ দুর্বলতা স্ক্যানিং টুল ব্যবহার করে আগে থেকে ইনস্টল করা সমস্ত অ্যাপ স্ক্যান করুন এবং শনাক্ত হওয়া দুর্বলতাগুলো সমাধান করুন।
সম্ভাব্য ক্ষতিকারক অ্যাপ্লিকেশন
এটা নিশ্চিত করা জরুরি যে আপনার ডিভাইসে আগে থেকে ইনস্টল করা অ্যাপগুলো সম্ভাব্য ক্ষতিকারক অ্যাপ্লিকেশন (PHA) নয়। আপনার ডিভাইসে থাকা সমস্ত অ্যাপের কার্যকলাপের জন্য আপনিই দায়ী। ডিভাইস চালু করার আগে, দুর্বলতার জন্য আগে থেকে লোড করা সমস্ত অ্যাপ স্ক্যান করুন।
পিএইচএ (PHA) এবং প্লে স্টোরে গুগল কীভাবে এর মোকাবিলা করছে সে সম্পর্কে আরও তথ্যের জন্য গুগল প্লে প্রোটেক্ট ডেভেলপার ডকুমেন্টেশন দেখুন।
অ্যাপ ইনস্টলেশন এবং অনুমতি
আগে থেকে ইনস্টল করা অ্যাপের জন্য অতিরিক্ত অনুমতি নিরাপত্তা ঝুঁকি তৈরি করতে পারে। আগে থেকে ইনস্টল করা অ্যাপগুলোকে ন্যূনতম প্রয়োজনীয় অনুমতির মধ্যে সীমাবদ্ধ রাখুন এবং নিশ্চিত করুন যেন তাদের অপ্রয়োজনীয় অনুমতি বা বিশেষাধিকারের অ্যাক্সেস না থাকে। অ্যাপের অনুমতিগুলো AndroidManifest.xml ফাইলে বর্ণনা করা থাকে।
- আগে থেকে ইনস্টল করা অ্যাপগুলোকে অপ্রয়োজনীয় অনুমতি বা বিশেষাধিকার দেবেন না। সিস্টেম বিশেষাধিকার সম্পন্ন অ্যাপগুলো পুঙ্খানুপুঙ্খভাবে পর্যালোচনা করুন, কারণ সেগুলোতে অত্যন্ত সংবেদনশীল অনুমতি থাকতে পারে।
- নিশ্চিত করুন যে অনুরোধ করা সমস্ত অনুমতি সেই নির্দিষ্ট অ্যাপটির কার্যকারিতার জন্য প্রাসঙ্গিক এবং প্রয়োজনীয়।
-
INSTALL_PACKAGESপারমিশন ব্যবহার করে এমন সমস্ত প্রি-ইনস্টল করা অ্যাপের জন্য ব্যবহারকারীর কাছে তথ্য প্রকাশ নিশ্চিত করুন। - নিশ্চিত করুন যে ডেভেলপার চুক্তি অনুযায়ী UID 0 হিসেবে কোনো অ্যাপ ইনস্টল না করতে বাধ্য।
- ডেভেলপারের নেটওয়ার্কের মাধ্যমে ইনস্টল করা হবে এমন সমস্ত অ্যাপের ম্যানিফেস্টে ঘোষিত অনুমতিগুলো মূল্যায়ন করুন।
- নিশ্চিত করুন যে, ডিভাইসে অ্যাপ সরবরাহ করার আগে ডেভেলপার চুক্তিবদ্ধভাবে অটো-আপডেটার এবং ইনস্টলার অ্যাপের সমস্ত ডাউনলোড ইউআরএল গুগল সেফ ব্রাউজিং এপিআই (Google Safe Browsing API) দিয়ে স্ক্যান করতে বাধ্য।
অ্যাপ সাইনিং
ডিভাইসের সুরক্ষায় অ্যাপ সিগনেচার একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং এটি অনুমতি যাচাই ও সফটওয়্যার আপডেটের জন্য ব্যবহৃত হয়। অ্যাপ সাইন করার জন্য কী (key) নির্বাচন করার সময়, অ্যাপটি শুধুমাত্র একটি ডিভাইসে উপলব্ধ নাকি একাধিক ডিভাইসে ব্যবহৃত হয়, তা বিবেচনা করা জরুরি।
- নিশ্চিত করুন যে অ্যাপগুলো এমন কোনো কী দিয়ে স্বাক্ষরিত নয় যা সর্বজনবিদিত, যেমন AOSP ডেভেলপার কী।
- নিশ্চিত করুন যে অ্যাপ সাইন করতে ব্যবহৃত কীগুলি সংবেদনশীল কী পরিচালনার জন্য শিল্প-মানসম্মত পদ্ধতির সাথে সামঞ্জস্যপূর্ণভাবে পরিচালিত হয়, যার মধ্যে একটি হার্ডওয়্যার সিকিউরিটি মডিউল (HSM) অন্তর্ভুক্ত, যা সীমিত ও নিরীক্ষণযোগ্য অ্যাক্সেস প্রদান করে।
- নিশ্চিত করুন যে অ্যাপগুলো প্ল্যাটফর্ম কী দিয়ে স্বাক্ষরিত নয়। এমনটা করলে একটি অ্যাপ প্ল্যাটফর্ম সিগনেচার পারমিশন পেয়ে যায়, যা অত্যন্ত শক্তিশালী এবং শুধুমাত্র অপারেটিং সিস্টেমের উপাদানগুলোর ব্যবহারের জন্য উদ্দিষ্ট। সিস্টেম অ্যাপগুলোর বিশেষাধিকারপ্রাপ্ত পারমিশন ব্যবহার করা উচিত।
- নিশ্চিত করুন যে একই প্যাকেজ নামের অ্যাপগুলো ভিন্ন ভিন্ন কী দিয়ে সাইন করা না হয়। বিভিন্ন ডিভাইসের জন্য অ্যাপ তৈরি করার সময়, বিশেষ করে প্ল্যাটফর্ম কী ব্যবহার করার ক্ষেত্রে, প্রায়শই এমনটা ঘটে থাকে। অ্যাপটি যদি ডিভাইস-নিরপেক্ষ হয়, তবে সব ডিভাইসে একই কী ব্যবহার করুন। আর অ্যাপটি যদি ডিভাইস-নির্দিষ্ট হয়, তবে প্রতিটি ডিভাইস ও কী-এর জন্য আলাদা প্যাকেজ নাম তৈরি করুন।
অ্যাপ এবং প্রসেসগুলিকে আলাদা করুন
সঠিকভাবে ব্যবহার করা হলে অ্যান্ড্রয়েড স্যান্ডবক্সিং মডেল অ্যাপ এবং প্রসেসগুলোকে অতিরিক্ত নিরাপত্তা প্রদান করে।
মূল প্রক্রিয়াগুলিকে বিচ্ছিন্ন করুন
প্রিভিলেজ এসকেলেশন অ্যাটাকের সবচেয়ে সাধারণ লক্ষ্যবস্তু হলো রুট প্রসেস; রুট প্রসেসের সংখ্যা কমালে প্রিভিলেজ এসকেলেশনের ঝুঁকি কমে।
- ডিভাইসগুলো যেন রুট হিসেবে ন্যূনতম প্রয়োজনীয় কোড চালায়, তা নিশ্চিত করুন। যেখানে সম্ভব, রুট প্রসেসের পরিবর্তে একটি সাধারণ অ্যান্ড্রয়েড প্রসেস ব্যবহার করুন। যদি কোনো ডিভাইসে কোনো প্রসেসকে রুট হিসেবে চালাতেই হয়, তবে প্রসেসটিকে একটি AOSP ফিচার রিকোয়েস্টে নথিভুক্ত করুন, যাতে এটি সর্বসাধারণের পর্যালোচনার জন্য উন্মুক্ত থাকে।
- যেখানে সম্ভব, রুট কোডকে অবিশ্বস্ত ডেটা থেকে বিচ্ছিন্ন রাখা উচিত এবং ইন্টারপ্রসেস কমিউনিকেশন (IPC)-এর মাধ্যমে অ্যাক্সেস করা উচিত। উদাহরণস্বরূপ, রুট কার্যকারিতাকে একটি ছোট সার্ভিসে সীমাবদ্ধ করুন যা বাইন্ডার (Binder)-এর মাধ্যমে অ্যাক্সেসযোগ্য, এবং নেটওয়ার্ক ট্র্যাফিক পরিচালনা করার জন্য কম বা কোনো সুবিধা নেই এমন একটি অ্যাপের কাছে সিগনেচার পারমিশনসহ সার্ভিসটি উন্মুক্ত করুন।
- রুট প্রসেসগুলো নেটওয়ার্ক সকেটে লিসেন করতে পারবে না।
- রুট প্রসেসে কোনো সাধারণ-উদ্দেশ্যমূলক রানটাইম, যেমন জাভা ভিএম, অন্তর্ভুক্ত থাকা যাবে না।
সিস্টেম অ্যাপগুলিকে আলাদা করুন
সাধারণত, আগে থেকে ইনস্টল করা অ্যাপগুলোর সিস্টেমের শেয়ার করা ইউনিক আইডেন্টিফায়ার (UID) ব্যবহার করে চলা উচিত নয়। যদি কোনো অ্যাপের জন্য সিস্টেম বা অন্য কোনো বিশেষ সুবিধাপ্রাপ্ত সার্ভিসের (যেমন, ফোন) শেয়ার করা UID ব্যবহার করা অপরিহার্য হয়, তবে অ্যাপটির এমন কোনো সার্ভিস, ব্রডকাস্ট রিসিভার বা কন্টেন্ট প্রোভাইডার এক্সপোর্ট করা উচিত নয়, যা ব্যবহারকারীদের দ্বারা ইনস্টল করা থার্ড-পার্টি অ্যাপগুলো অ্যাক্সেস করতে পারে।
- ডিভাইসগুলো যেন সিস্টেম হিসেবে ন্যূনতম প্রয়োজনীয় কোড চালায়, তা নিশ্চিত করুন। যেখানে সম্ভব, সিস্টেম UID পুনরায় ব্যবহার না করে নিজস্ব UID সহ একটি অ্যান্ড্রয়েড প্রসেস ব্যবহার করুন।
- যেখানে সম্ভব, সিস্টেম কোডকে অবিশ্বস্ত ডেটা থেকে বিচ্ছিন্ন রাখা উচিত এবং শুধুমাত্র অন্যান্য বিশ্বস্ত প্রসেসগুলোর কাছেই আইপিসি (IPC) প্রকাশ করা উচিত।
- সিস্টেম প্রসেসগুলো কোনো নেটওয়ার্ক সকেটে লিসেন করতে পারবে না। এটি CTS-এর একটি আবশ্যিক শর্ত।
প্রক্রিয়াগুলিকে বিচ্ছিন্ন করুন
অ্যান্ড্রয়েড অ্যাপ্লিকেশন স্যান্ডবক্স অ্যাপগুলোকে সিস্টেমের অন্যান্য প্রসেস, যার মধ্যে রুট প্রসেস এবং ডিবাগারও অন্তর্ভুক্ত, থেকে বিচ্ছিন্ন থাকার একটি প্রত্যাশা প্রদান করে। অ্যাপ এবং ব্যবহারকারী কর্তৃক বিশেষভাবে ডিবাগিং সক্ষম করা না হলে, কোনো অ্যাপেরই এই প্রত্যাশা লঙ্ঘন করা উচিত নয়।
- নথিভুক্ত অ্যান্ড্রয়েড ডিবাগিং পদ্ধতি ব্যবহার করা না হলে, রুট প্রসেস যেন স্বতন্ত্র অ্যাপ ডেটা ফোল্ডারের ভেতরের ডেটা অ্যাক্সেস না করে, তা নিশ্চিত করুন।
- অ্যান্ড্রয়েড ডিবাগিংয়ের কোনো নথিভুক্ত পদ্ধতি ব্যবহার করা না হলে, রুট প্রসেস যেন অ্যাপের মেমরি অ্যাক্সেস না করে তা নিশ্চিত করুন।
- ডিভাইসগুলোতে এমন কোনো অ্যাপ যেন না থাকে যা অন্য অ্যাপ বা প্রসেসের ডেটা বা মেমরি অ্যাক্সেস করে, তা নিশ্চিত করুন।