অ্যাপ নিরাপত্তার সর্বোত্তম অনুশীলন

এই বিভাগে অ্যান্ড্রয়েড ডিভাইসে অ্যাপের নিরাপত্তা নিশ্চিত করার জন্য সুপারিশ রয়েছে।

সোর্স কোড পর্যালোচনা

সোর্স কোড পর্যালোচনা এই নথিতে চিহ্নিত সমস্যাগুলি সহ বিস্তৃত পরিসরের নিরাপত্তা সমস্যা সনাক্ত করতে পারে। অ্যান্ড্রয়েড ম্যানুয়াল এবং স্বয়ংক্রিয় সোর্স কোড পর্যালোচনা উভয়কেই জোরালোভাবে উৎসাহিত করে।

  • কভারেজ নিশ্চিত করার জন্য পর্যালোচনা পরিচালনা করার সময় ব্যাপক নিরাপত্তা নির্দেশিকা অনুসরণ করুন। ধারাবাহিক এবং সম্পূর্ণ পর্যালোচনা নিশ্চিত করতে প্রাসঙ্গিক অভ্যন্তরীণ বা বাহ্যিক মান ব্যবহার করুন।
  • Android SDK ব্যবহার করে সমস্ত অ্যাপ কোডে Android Studio linter এর মতো একটি লিন্টার চালান এবং যেকোনো চিহ্নিত সমস্যা সংশোধন করুন।
  • একটি স্বয়ংক্রিয় টুল ব্যবহার করে নেটিভ কোড বিশ্লেষণ করুন যা মেমরি ব্যবস্থাপনার সমস্যাগুলি সনাক্ত করতে পারে, যেমন বাফার ওভারফ্লো এবং অফ-বাই-ওয়ান ত্রুটি।
  • অ্যান্ড্রয়েড বিল্ড সিস্টেমটি অনেক LLVM স্যানিটাইজারকে সমর্থন করে, যেমন AddressSanitizer এবং UndefinedBehaviorSanitizer , যা মেমরি-সম্পর্কিত সমস্যাগুলির রানটাইম বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে। fuzzing এর সাথে মিলিত, libFuzzer এর মাধ্যমে অ্যান্ড্রয়েডে সমর্থিত, স্যানিটাইজারগুলি আরও তদন্তের প্রয়োজন এমন অস্বাভাবিক প্রান্তের কেসগুলি আবিষ্কার করতে পারে।
  • একজন জ্ঞানী নিরাপত্তা মূল্যায়নকারীর উচিত উচ্চ ঝুঁকি কোড পর্যালোচনা করা, যেমন ক্রিপ্টো, পেমেন্ট প্রক্রিয়াকরণ এবং PII প্রক্রিয়াকরণ।

স্বয়ংক্রিয় পরীক্ষা

স্বয়ংক্রিয় পরীক্ষা বিভিন্ন ধরণের নিরাপত্তা সমস্যা সনাক্ত করতে সাহায্য করতে পারে এবং নিয়মিতভাবে এটি করা উচিত।

  • সমস্যাগুলি প্রাথমিকভাবে সনাক্ত করতে এবং সংশোধনের সময় কমাতে ডেভেলপমেন্ট প্রক্রিয়া জুড়ে নিয়মিতভাবে CTS- এর সর্বশেষ সংস্করণটি চালান। আমাদের স্বয়ংক্রিয় বিল্ড প্রক্রিয়ায় ক্রমাগত ইন্টিগ্রেশনের অংশ হিসেবে Android CTS ব্যবহার করে, যা প্রতিদিন একাধিকবার বিল্ড করে।
  • ইন্টারফেসের স্বয়ংক্রিয় নিরাপত্তা পরীক্ষা, যার মধ্যে রয়েছে ত্রুটিপূর্ণ ইনপুট (ফাজ টেস্টিং) ব্যবহার করে পরীক্ষা করা। অ্যান্ড্রয়েডের বিল্ড সিস্টেম ফাজ টেস্ট লেখার জন্য libFuzzer সমর্থন করে।

দুর্বলতা স্ক্যানিং

দুর্বলতা স্ক্যানিং নিশ্চিত করতে সাহায্য করতে পারে যে আগে থেকে ইনস্টল করা অ্যাপগুলি জ্ঞাত নিরাপত্তা দুর্বলতা থেকে মুক্ত। উন্নত সনাক্তকরণ এই দুর্বলতাগুলি মোকাবেলা করার জন্য প্রয়োজনীয় সময় এবং খরচ কমাতে পারে এবং ব্যবহারকারী এবং ডিভাইসের ঝুঁকি প্রতিরোধ করতে পারে।

  • শিল্প-স্বীকৃত অ্যাপ দুর্বলতা স্ক্যানিং টুল ব্যবহার করে সমস্ত পূর্বে ইনস্টল করা অ্যাপ স্ক্যান করুন এবং সনাক্ত করা দুর্বলতাগুলি সমাধান করুন।

সম্ভাব্য ক্ষতিকারক অ্যাপ্লিকেশন

আপনার ডিভাইসে আগে থেকে ইনস্টল করা অ্যাপগুলি সম্ভাব্য ক্ষতিকারক অ্যাপ্লিকেশন (PHA) নয় তা নিশ্চিত করা গুরুত্বপূর্ণ। আপনার ডিভাইসে অন্তর্ভুক্ত সমস্ত অ্যাপের আচরণের জন্য আপনি দায়ী। ডিভাইস চালু করার আগে, দুর্বলতার জন্য সমস্ত আগে থেকে লোড করা অ্যাপ স্ক্যান করুন।

PHA সম্পর্কে আরও তথ্যের জন্য এবং প্লে স্টোরে Google কীভাবে তাদের বিরুদ্ধে লড়াই করছে , Google Play Protect ডেভেলপার ডকুমেন্টেশন দেখুন।

অ্যাপ ইনস্টলেশন এবং অনুমতি

আগে থেকে ইনস্টল করা অ্যাপগুলির জন্য অতিরিক্ত অনুমতি নিরাপত্তা ঝুঁকি তৈরি করতে পারে। আগে থেকে ইনস্টল করা অ্যাপগুলিকে ন্যূনতম প্রয়োজনীয় অনুমতির মধ্যে সীমাবদ্ধ রাখুন এবং নিশ্চিত করুন যে তাদের অপ্রয়োজনীয় অনুমতি বা সুবিধাগুলিতে অ্যাক্সেস নেই। অ্যাপের অনুমতিগুলি AndroidManifest.xml এ বর্ণিত হয়েছে।

  • আগে থেকে ইনস্টল করা অ্যাপগুলিকে অপ্রয়োজনীয় অনুমতি বা সুযোগ-সুবিধা দেবেন না। সিস্টেম সুবিধা সহ অ্যাপগুলি পুঙ্খানুপুঙ্খভাবে পর্যালোচনা করুন কারণ তাদের খুব সংবেদনশীল অনুমতি থাকতে পারে।
  • নিশ্চিত করুন যে অনুরোধ করা সমস্ত অনুমতি সেই নির্দিষ্ট অ্যাপের কার্যকারিতার জন্য প্রাসঙ্গিক এবং প্রয়োজনীয়।
  • INSTALL_PACKAGES অনুমতি ব্যবহার করে এমন সমস্ত প্রি-ইনস্টল করা অ্যাপের জন্য ব্যবহারকারীর তথ্য প্রকাশ নিশ্চিত করুন।
  • নিশ্চিত করুন যে ডেভেলপার চুক্তিবদ্ধভাবে UID 0 হিসেবে কোনও অ্যাপ ইনস্টল না করার জন্য বাধ্য।
  • ডেভেলপারের নেটওয়ার্কের মাধ্যমে ইনস্টল করা সমস্ত অ্যাপের ম্যানিফেস্টে ঘোষিত অনুমতিগুলি মূল্যায়ন করুন।
  • ডিভাইসে অ্যাপ পরিবেশন করার আগে নিশ্চিত করুন যে ডেভেলপার চুক্তিবদ্ধভাবে Google Safe Browsing API ব্যবহার করে অটো-আপডেটার এবং ইনস্টলার অ্যাপের সমস্ত ডাউনলোড URL স্ক্যান করতে বাধ্য।

অ্যাপ সাইনিং

অ্যাপ স্বাক্ষর ডিভাইসের নিরাপত্তায় গুরুত্বপূর্ণ ভূমিকা পালন করে এবং অনুমতি পরীক্ষা এবং সফ্টওয়্যার আপডেটের জন্য ব্যবহৃত হয়। অ্যাপ স্বাক্ষর করার জন্য ব্যবহার করার জন্য একটি কী নির্বাচন করার সময়, এটি বিবেচনা করা গুরুত্বপূর্ণ যে একটি অ্যাপ শুধুমাত্র একটি ডিভাইসে উপলব্ধ নাকি একাধিক ডিভাইসে সাধারণ।

  • নিশ্চিত করুন যে অ্যাপগুলি এমন কোনও কী দিয়ে স্বাক্ষরিত নয় যা সর্বজনীনভাবে পরিচিত, যেমন AOSP ডেভেলপার কী।
  • নিশ্চিত করুন যে অ্যাপগুলিতে সাইন ইন করার জন্য ব্যবহৃত কীগুলি সংবেদনশীল কীগুলি পরিচালনার জন্য শিল্প-মানক অনুশীলনের সাথে সামঞ্জস্যপূর্ণভাবে পরিচালিত হয়, যার মধ্যে একটি হার্ডওয়্যার সুরক্ষা মডিউল (HSM) অন্তর্ভুক্ত যা সীমিত, নিরীক্ষণযোগ্য অ্যাক্সেস প্রদান করে।
  • নিশ্চিত করুন যে অ্যাপগুলি প্ল্যাটফর্ম কী দিয়ে স্বাক্ষরিত নয়। এটি করার ফলে একটি অ্যাপ প্ল্যাটফর্ম স্বাক্ষর অনুমতিগুলিতে অ্যাক্সেস পায়, যা খুবই শক্তিশালী এবং শুধুমাত্র অপারেটিং সিস্টেমের উপাদানগুলির দ্বারা ব্যবহারের জন্য তৈরি। সিস্টেম অ্যাপগুলির বিশেষাধিকারপ্রাপ্ত অনুমতি ব্যবহার করা উচিত।
  • একই প্যাকেজ নামের অ্যাপগুলি যেন ভিন্ন কী দিয়ে সাইন না করা হয় তা নিশ্চিত করুন। বিভিন্ন ডিভাইসের জন্য অ্যাপ তৈরি করার সময়, বিশেষ করে প্ল্যাটফর্ম কী ব্যবহার করার সময় এটি প্রায়শই ঘটে। যদি অ্যাপটি ডিভাইস-স্বতন্ত্র হয়, তাহলে বিভিন্ন ডিভাইসে একই কী ব্যবহার করুন। যদি অ্যাপটি ডিভাইস-নির্দিষ্ট হয়, তাহলে প্রতিটি ডিভাইস এবং কী-এর জন্য অনন্য প্যাকেজ নাম তৈরি করুন।

অ্যাপ এবং প্রক্রিয়াগুলি আলাদা করুন

সঠিকভাবে ব্যবহার করলে অ্যান্ড্রয়েড স্যান্ডবক্সিং মডেল অ্যাপ এবং প্রক্রিয়াগুলির চারপাশে অতিরিক্ত সুরক্ষা প্রদান করে।

মূল প্রক্রিয়াগুলি বিচ্ছিন্ন করুন

রুট প্রসেসগুলি হল প্রিভিলেজ এসকেলেশন আক্রমণের সবচেয়ে ঘন ঘন লক্ষ্যবস্তু; রুট প্রসেসের সংখ্যা হ্রাস করলে প্রিভিলেজ এসকেলেশনের ঝুঁকি হ্রাস পায়।

  • ডিভাইসগুলিতে রুট হিসেবে ন্যূনতম প্রয়োজনীয় কোড চালানো নিশ্চিত করুন। সম্ভব হলে, রুট প্রসেসের পরিবর্তে একটি নিয়মিত অ্যান্ড্রয়েড প্রসেস ব্যবহার করুন। যদি কোনও ডিভাইসে কোনও প্রসেস রুট হিসেবে চালানোর প্রয়োজন হয়, তাহলে AOSP ফিচার রিকোয়েস্টে প্রক্রিয়াটি নথিভুক্ত করুন যাতে এটি সর্বজনীনভাবে পর্যালোচনা করা যায়।
  • যেখানে সম্ভব, রুট কোডকে অবিশ্বস্ত ডেটা থেকে আলাদা করে ইন্টারপ্রসেস কমিউনিকেশন (IPC) এর মাধ্যমে অ্যাক্সেস করা উচিত। উদাহরণস্বরূপ, রুট কার্যকারিতাকে বাইন্ডারের মাধ্যমে অ্যাক্সেসযোগ্য একটি ছোট পরিষেবাতে কমিয়ে দিন এবং স্বাক্ষর অনুমতি সহ পরিষেবাটিকে এমন একটি অ্যাপের কাছে প্রকাশ করুন যেখানে নেটওয়ার্ক ট্র্যাফিক পরিচালনা করার জন্য কম বা কোনও সুবিধা নেই।
  • রুট প্রসেসগুলি নেটওয়ার্ক সকেটে শোনা উচিত নয়।
  • রুট প্রসেসগুলিতে জাভা ভিএমের মতো সাধারণ-উদ্দেশ্য রানটাইম অন্তর্ভুক্ত করা উচিত নয়।

সিস্টেম অ্যাপগুলি বিচ্ছিন্ন করুন

সাধারণভাবে, আগে থেকে ইনস্টল করা অ্যাপগুলি শেয়ার্ড সিস্টেম ইউনিক আইডেন্টিফায়ার (UID) দিয়ে চালানো উচিত নয়। যদি কোনও অ্যাপের সিস্টেমের শেয়ার্ড UID বা অন্য কোনও সুবিধাপ্রাপ্ত পরিষেবা (যেমন, ফোন) ব্যবহার করা প্রয়োজন হয়, তাহলে অ্যাপটি এমন কোনও পরিষেবা, ব্রডকাস্ট রিসিভার বা কন্টেন্ট প্রোভাইডার রপ্তানি করবে না যা ব্যবহারকারীদের দ্বারা ইনস্টল করা তৃতীয় পক্ষের অ্যাপ দ্বারা অ্যাক্সেস করা যেতে পারে।

  • ডিভাইসগুলিতে সিস্টেম হিসেবে ন্যূনতম প্রয়োজনীয় কোড চালানো নিশ্চিত করুন। যেখানে সম্ভব, সিস্টেম UID পুনঃব্যবহার করার পরিবর্তে নিজস্ব UID সহ একটি Android প্রক্রিয়া ব্যবহার করুন।
  • যেখানে সম্ভব, সিস্টেম কোডকে অবিশ্বস্ত ডেটা থেকে আলাদা করা উচিত এবং IPC শুধুমাত্র অন্যান্য বিশ্বস্ত প্রক্রিয়াগুলিতে প্রকাশ করা উচিত।
  • সিস্টেম প্রসেসগুলি নেটওয়ার্ক সকেটে শোনা উচিত নয়। এটি একটি CTS প্রয়োজনীয়তা।

প্রক্রিয়াগুলি বিচ্ছিন্ন করুন

অ্যান্ড্রয়েড অ্যাপ্লিকেশন স্যান্ডবক্স অ্যাপগুলিকে সিস্টেমের অন্যান্য প্রক্রিয়া, যেমন রুট প্রসেস এবং ডিবাগার থেকে বিচ্ছিন্ন থাকার প্রত্যাশা প্রদান করে। অ্যাপ এবং ব্যবহারকারীর দ্বারা ডিবাগিং নির্দিষ্টভাবে সক্ষম না করা হলে, কোনও অ্যাপই সেই প্রত্যাশা লঙ্ঘন করবে না।

  • নিশ্চিত করুন যে রুট প্রসেসগুলি পৃথক অ্যাপ ডেটা ফোল্ডারের মধ্যে ডেটা অ্যাক্সেস না করে, যদি না একটি নথিভুক্ত অ্যান্ড্রয়েড ডিবাগিং পদ্ধতি ব্যবহার করা হয়।
  • নিশ্চিত করুন যে রুট প্রসেসগুলি অ্যাপের মেমরি অ্যাক্সেস করছে না, যদি না একটি নথিভুক্ত অ্যান্ড্রয়েড ডিবাগিং পদ্ধতি ব্যবহার করা হয়।
  • নিশ্চিত করুন যে ডিভাইসগুলিতে এমন কোনও অ্যাপ নেই যা অন্য অ্যাপ বা প্রক্রিয়ার ডেটা বা মেমরি অ্যাক্সেস করে।