অ্যাপ্লিকেশন স্যান্ডবক্স

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

একটি কার্নেল-স্তরের অ্যাপ্লিকেশন স্যান্ডবক্স সেট আপ করতে Android UID ব্যবহার করে। কার্নেল প্রসেস লেভেলে অ্যাপ্লিকেশান এবং সিস্টেমের মধ্যে সিকিউরিটি এনফোর্স করে স্ট্যান্ডার্ড লিনাক্স সুবিধার মাধ্যমে যেমন ইউজার এবং গ্রুপ আইডি যেগুলি অ্যাপগুলিতে বরাদ্দ করা হয়। ডিফল্টরূপে, অ্যাপগুলি একে অপরের সাথে ইন্টারঅ্যাক্ট করতে পারে না এবং OS এ সীমিত অ্যাক্সেস থাকতে পারে। যদি অ্যাপ A দূষিত কিছু করার চেষ্টা করে, যেমন অ্যাপ্লিকেশন B-এর ডেটা পড়া বা অনুমতি ছাড়াই ফোন ডায়াল করা, তাহলে এটি করা থেকে বিরত থাকে কারণ এটির যথাযথ ডিফল্ট ব্যবহারকারীর অধিকার নেই৷ স্যান্ডবক্সটি সহজ, নিরীক্ষাযোগ্য এবং কয়েক দশক-পুরাতন ইউনিক্স-স্টাইল ব্যবহারকারীর প্রক্রিয়া এবং ফাইলের অনুমতিগুলির পৃথকীকরণের উপর ভিত্তি করে।

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

সুরক্ষা

সাধারণত, সঠিকভাবে কনফিগার করা ডিভাইসে অ্যাপ্লিকেশন স্যান্ডবক্স থেকে বেরিয়ে আসতে, একজনকে অবশ্যই লিনাক্স কার্নেলের নিরাপত্তার সাথে আপস করতে হবে। যাইহোক, অন্যান্য সুরক্ষা বৈশিষ্ট্যের মতো, অ্যাপ্লিকেশন স্যান্ডবক্স প্রয়োগকারী ব্যক্তিগত সুরক্ষাগুলি অরক্ষিত নয়, তাই OS বা অন্যান্য অ্যাপগুলির সাথে আপোষের দিকে নিয়ে যাওয়া একক দুর্বলতাগুলি প্রতিরোধ করার জন্য প্রতিরক্ষা-ইন-ডেপ্থ গুরুত্বপূর্ণ৷

অ্যাপ্লিকেশান স্যান্ডবক্স প্রয়োগ করতে Android বেশ কয়েকটি সুরক্ষার উপর নির্ভর করে৷ এই প্রয়োগগুলি সময়ের সাথে সাথে চালু করা হয়েছে এবং মূল UID-ভিত্তিক ডিসক্রিশনারি অ্যাক্সেস কন্ট্রোল (DAC) স্যান্ডবক্সকে উল্লেখযোগ্যভাবে শক্তিশালী করেছে। পূর্ববর্তী অ্যান্ড্রয়েড রিলিজে নিম্নলিখিত সুরক্ষাগুলি অন্তর্ভুক্ত ছিল:

  • অ্যান্ড্রয়েড 5.0-এ, SELinux সিস্টেম এবং অ্যাপের মধ্যে বাধ্যতামূলক অ্যাক্সেস কন্ট্রোল (MAC) বিচ্ছেদ প্রদান করেছে। যাইহোক, সমস্ত তৃতীয় পক্ষের অ্যাপ একই SELinux প্রসঙ্গে চলে তাই ইন্টার-অ্যাপ আইসোলেশন প্রাথমিকভাবে UID DAC দ্বারা প্রয়োগ করা হয়েছিল।
  • অ্যান্ড্রয়েড 6.0-এ, SELinux স্যান্ডবক্স প্রতি-ভৌত-ব্যবহারকারীর সীমানা জুড়ে অ্যাপগুলিকে বিচ্ছিন্ন করার জন্য প্রসারিত করা হয়েছিল। এছাড়াও, অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেটার জন্য আরও নিরাপদ ডিফল্ট সেট করে: targetSdkVersion >= 24 সহ অ্যাপগুলির জন্য, একটি অ্যাপের হোম ডির-এ ডিফল্ট DAC অনুমতি 751 থেকে 700 এ পরিবর্তিত হয়েছে। এটি ব্যক্তিগত অ্যাপ ডেটার জন্য নিরাপদ ডিফল্ট প্রদান করে (যদিও অ্যাপগুলি এই ডিফল্টগুলিকে ওভাররাইড করতে পারে) .
  • অ্যান্ড্রয়েড 8.0-এ, সমস্ত অ্যাপ একটি seccomp-bpf ফিল্টার দিয়ে চালানোর জন্য সেট করা হয়েছিল যা অ্যাপগুলিকে ব্যবহার করার অনুমতি দেওয়া syscalls সীমিত করে, এইভাবে অ্যাপ/কার্নেল সীমানাকে শক্তিশালী করে।
  • Android 9-এ targetSdkVersion >= 28 সহ সমস্ত অ-সুবিধাবিহীন অ্যাপগুলিকে অবশ্যই পৃথক SELinux স্যান্ডবক্সে চলতে হবে, প্রতি-অ্যাপের ভিত্তিতে MAC প্রদান করে। এই সুরক্ষা অ্যাপ বিচ্ছেদ উন্নত করে, নিরাপদ ডিফল্ট ওভাররাইডিং প্রতিরোধ করে এবং (সবচেয়ে উল্লেখযোগ্যভাবে) অ্যাপগুলিকে তাদের ডেটা বিশ্ব অ্যাক্সেসযোগ্য করতে বাধা দেয়।
  • অ্যান্ড্রয়েড 10 অ্যাপে /sdcard/DCIM-এর মতো পাথগুলিতে সরাসরি অ্যাক্সেস ছাড়াই ফাইল সিস্টেমের একটি সীমিত কাঁচা দৃশ্য রয়েছে। যাইহোক, অ্যাপ্লিকেশানগুলি তাদের প্যাকেজ-নির্দিষ্ট পাথগুলিতে সম্পূর্ণ অপ্রচলিত অ্যাক্সেস বজায় রাখে, যেমন Context.getExternalFilesDir() প্রযোজ্য পদ্ধতি দ্বারা ফিরে আসে।

ফাইল শেয়ার করার জন্য নির্দেশিকা

বিশ্বের অ্যাক্সেসযোগ্য হিসাবে অ্যাপ ডেটা সেট করা একটি দুর্বল নিরাপত্তা অনুশীলন। অ্যাক্সেস প্রত্যেকের জন্য মঞ্জুর করা হয়েছে এবং শুধুমাত্র অভিপ্রেত প্রাপক(দের) অ্যাক্সেস সীমাবদ্ধ করা সম্ভব নয়। এই অনুশীলনটি তথ্য প্রকাশের ফাঁস এবং বিভ্রান্ত ডেপুটি দুর্বলতার দিকে পরিচালিত করেছে এবং এটি ম্যালওয়্যারের জন্য একটি প্রিয় লক্ষ্য যা সংবেদনশীল ডেটা (যেমন ইমেল ক্লায়েন্ট) সহ অ্যাপগুলিকে লক্ষ্য করে। Android 9 এবং উচ্চতর সংস্করণে, targetSdkVersion>=28 সহ অ্যাপগুলির জন্য এইভাবে ফাইলগুলি ভাগ করা স্পষ্টভাবে অনুমোদিত নয়।

অ্যাপ ডেটা বিশ্ব-অ্যাক্সেসযোগ্য করার পরিবর্তে, ফাইলগুলি ভাগ করার সময় নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করুন:

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

স্টোরেজ রানটাইম অনুমতি মিডিয়াস্টোরের মাধ্যমে দৃঢ়ভাবে টাইপ করা সংগ্রহগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করে। PDF এবং MediaStore.Downloads ক্লাসের মতো দুর্বলভাবে টাইপ করা ফাইলগুলি অ্যাক্সেস করার জন্য, অ্যাপগুলিকে অবশ্যই ACTION_OPEN_DOCUMENT ইন্টেন্টের মতো ইন্টেন্ট ব্যবহার করতে হবে৷

Android 10 আচরণ সক্ষম করতে, requestLegacyExternalStorage ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করুন এবং অ্যাপ অনুমতির সর্বোত্তম অনুশীলনগুলি অনুসরণ করুন।

  • ম্যানিফেস্ট পতাকা ডিফল্ট মানটি Android 9 (এবং নিম্নতর) লক্ষ্য করা অ্যাপগুলির জন্য true
  • অ্যান্ড্রয়েড 10 টার্গেট করা অ্যাপ্লিকেশানগুলির জন্য ডিফল্ট মানটি মিথ্যা৷ Android 10 টার্গেট করা অ্যাপ্লিকেশানগুলিতে অস্থায়ীভাবে ফিল্টার করা স্টোরেজ ভিউ থেকে অপ্ট আউট করতে, ম্যানিফেস্ট পতাকার মানটিকে true সেট করুন৷
  • সীমাবদ্ধ অনুমতি ব্যবহার করে, ইনস্টলার নন-স্যান্ডবক্স স্টোরেজের জন্য অনুমোদিত অ্যাপগুলিকে সাদা তালিকাভুক্ত করে। সাদা তালিকাভুক্ত নয় এমন অ্যাপ স্যান্ডবক্স করা হয়।