OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন
ওভারভিউ
একটি অ্যান্ড্রয়েড অনুমতি হল একটি স্ট্রিং শনাক্তকারী যা অ্যাপ্লিকেশানের ম্যানিফেস্টে ঘোষিত সীমাবদ্ধ ডেটা বা অ্যাকশনগুলিতে অ্যাক্সেসের অনুরোধ করতে, যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা রানটাইমে প্রয়োগ করা হয়।
অ্যান্ড্রয়েড অনুমতির মাত্রা অনুমতির সাথে সম্পর্কিত সম্ভাব্য ঝুঁকি নির্দেশ করে:
- সাধারণ : স্বয়ংক্রিয়ভাবে ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে মঞ্জুরি, কম-ঝুঁকির অনুমতি
- বিপজ্জনক : উচ্চ-ঝুঁকির অনুমতি যা সংবেদনশীল ব্যবহারকারীর ডেটা অ্যাক্সেসের অনুমতি দিতে পারে, রানটাইমে স্পষ্ট ব্যবহারকারীর অনুমোদন প্রয়োজন
- স্বাক্ষর : শুধুমাত্র সেই অ্যাপ্লিকেশানগুলিকে মঞ্জুর করা হয় যেগুলি একই শংসাপত্র দিয়ে স্বাক্ষরিত অ্যাপের অনুমতি ঘোষণা করে, সাধারণত সিস্টেম অ্যাপ বা একই বিকাশকারীর অ্যাপগুলির মধ্যে ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয়
অনুমতি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের সাথে সম্পর্কিত দুর্বলতাগুলি ঘটে যখন একটি অ্যাপের উপাদান (যেমন কার্যকলাপ , রিসিভার , সামগ্রী প্রদানকারী , বা পরিষেবা ) নিম্নলিখিত সমস্ত মানদণ্ড পূরণ করে:
- উপাদানটি
Manifest
কোনোandroid:permission
এর সাথে যুক্ত নয়; - উপাদানটি একটি সংবেদনশীল কাজ সম্পাদন করে যার জন্য একটি অনুমতি বিদ্যমান যা ব্যবহারকারী ইতিমধ্যে অনুমোদন করেছেন;
- উপাদান রপ্তানি করা হয়;
- কম্পোনেন্ট কোনো ম্যানুয়াল (মেনিফেস্ট বা কোড-লেভেল) অনুমতি পরীক্ষা করে না;
যখন এটি ঘটবে, একটি দূষিত অ্যাপ দুর্বল উপাদানের বিশেষাধিকারের অপব্যবহার করে, ক্ষতিকারক অ্যাপের বিশেষাধিকারগুলিকে ক্ষতিকারক অ্যাপে প্রক্সি করে সংবেদনশীল ক্রিয়া সম্পাদন করতে পারে৷
প্রভাব
সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস পেতে বা সংবেদনশীল ক্রিয়া সম্পাদন করতে দুর্বল উপাদান রপ্তানি করা যেতে পারে। এই অবাঞ্ছিত আচরণের প্রভাব দুর্বল উপাদান এবং এর বিশেষাধিকারের প্রেক্ষাপটের উপর নির্ভর করে।
প্রশমন
সংবেদনশীল কাজের জন্য অনুমতি প্রয়োজন
সংবেদনশীল অনুমতি সহ একটি উপাদান রপ্তানি করার সময়, যেকোনো আগত অনুরোধের জন্য একই অনুমতি প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও আইডিই-তে রিসিভার এবং পরিষেবাগুলির জন্য লিন্ট চেক রয়েছে যাতে এই দুর্বলতা চিহ্নিত করা যায় এবং উপযুক্ত অনুমতিগুলির প্রয়োজনের সুপারিশ করা হয়।
নিম্নলিখিত উদাহরণগুলির মতো পরিষেবাটি বাস্তবায়ন করার সময় বিকাশকারীরা Manifest
ফাইলে বা কোড-লেভেলে ঘোষণা করে ইনকামিং অনুরোধগুলির জন্য অনুমতির প্রয়োজন হতে পারে৷
এক্সএমএল
<manifest ...>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application ...>
<service android:name=".MyExportService"
android:exported="true"
android:permission="android.permission.READ_CONTACTS" />
</application>
</manifest>
কোটলিন
class MyExportService : Service() {
private val binder = MyExportBinder()
override fun onBind(intent: Intent): IBinder? {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.")
// Permission is enforced, proceed with export logic
return binder
}
// Inner class for your Binder implementation
private inner class MyExportBinder : Binder() {
// Permission is enforced, proceed with export logic
}
}
জাভা
public class MyExportService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.");
return binder;
}
// Inner class for your Binder implementation
private class MyExportBinder extends Binder {
// Permission is enforced, proceed with export logic
}
}
উপাদান রপ্তানি করবেন না
একেবারে প্রয়োজনীয় না হলে সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস সহ উপাদানগুলি রপ্তানি করা এড়িয়ে চলুন। আপনি Manifest
ফাইলে আপনার কম্পোনেন্টের জন্য android:exported
false
সেট করে এটি অর্জন করতে পারেন। API স্তর 31 এবং তার পরে, এই বৈশিষ্ট্যটি ডিফল্টরূপে false
সেট করা আছে।
এক্সএমএল
<activity
android:name=".MyActivity"
android:exported="false"/>
স্বাক্ষর-ভিত্তিক অনুমতি প্রয়োগ করুন
আপনার নিয়ন্ত্রণ বা মালিকানাধীন দুটি অ্যাপের মধ্যে ডেটা ভাগ করার সময়, স্বাক্ষর-ভিত্তিক অনুমতিগুলি ব্যবহার করুন৷ এই অনুমতিগুলির জন্য ব্যবহারকারীর নিশ্চিতকরণের প্রয়োজন নেই এবং পরিবর্তে, পরীক্ষা করে দেখুন যে ডেটা অ্যাক্সেস করা অ্যাপগুলি একই সাইনিং কী ব্যবহার করে সাইন করা হয়েছে। এই সেটআপটি আরও সুগমিত, নিরাপদ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে। আপনি যদি কাস্টম অনুমতি ঘোষণা করেন তাহলে সংশ্লিষ্ট নিরাপত্তা নির্দেশিকা বিবেচনা করুন।
এক্সএমএল
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<permission android:name="my_custom_permission_name"
android:protectionLevel="signature" />
একক-টাস্ক এন্ডপয়েন্ট
সেপারেশন অফ কনসার্ন ডিজাইন নীতি অনুসরণ করে আপনার অ্যাপটি বাস্তবায়ন করুন। প্রতিটি এন্ডপয়েন্ট শুধুমাত্র নির্দিষ্ট সুবিধা সহ নির্দিষ্ট কাজের একটি ছোট সেট সঞ্চালন করা উচিত। এই ভাল ডিজাইনের অনুশীলনটি বিকাশকারীকে প্রতিটি শেষ পয়েন্টের জন্য দানাদার অনুমতি প্রয়োগ করার অনুমতি দেয়। উদাহরণস্বরূপ, একটি একক শেষ বিন্দু তৈরি করা এড়িয়ে চলুন যা ক্যালেন্ডার এবং পরিচিতি উভয়ই পরিবেশন করে।
সম্পদ
- ওভারসিউরড ব্লগ থেকে অ্যাপ সুরক্ষিত উপাদানগুলিতে অ্যান্ড্রয়েড অ্যাক্সেস
- বিষয়বস্তু প্রদানকারীর সর্বোত্তম অভ্যাস
- রানটাইম (বিপজ্জনক) অনুমতি
- উদ্বেগ নকশা নীতি বিচ্ছেদ
- অ্যান্ড্রয়েড অনুমতি ডকুমেন্টেশন
- অ্যান্ড্রয়েড ব্রডকাস্ট রিসিভার নিরাপত্তা টিপস
- অ্যান্ড্রয়েড পরিষেবার নিরাপত্তা টিপস
- Android 12 (API 31) রপ্তানি করা ডিফল্ট সেট "false" এ
- লিন্ট চেক: এক্সপোর্ট করা পছন্দের কার্যকলাপ রপ্তানি করা উচিত নয়
- লিন্ট চেক: রপ্তানিকৃত রিসিভারের অনুমতির প্রয়োজন হয় না
- লিন্ট চেক: রপ্তানি করা পরিষেবার অনুমতির প্রয়োজন হয় না
OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন
ওভারভিউ
একটি অ্যান্ড্রয়েড অনুমতি হল একটি স্ট্রিং শনাক্তকারী যা অ্যাপ্লিকেশানের ম্যানিফেস্টে ঘোষিত সীমাবদ্ধ ডেটা বা অ্যাকশনগুলিতে অ্যাক্সেসের অনুরোধ করতে, যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা রানটাইমে প্রয়োগ করা হয়।
অ্যান্ড্রয়েড অনুমতির মাত্রা অনুমতির সাথে সম্পর্কিত সম্ভাব্য ঝুঁকি নির্দেশ করে:
- সাধারণ : স্বয়ংক্রিয়ভাবে ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে মঞ্জুরি, কম-ঝুঁকির অনুমতি
- বিপজ্জনক : উচ্চ-ঝুঁকির অনুমতি যা সংবেদনশীল ব্যবহারকারীর ডেটা অ্যাক্সেসের অনুমতি দিতে পারে, রানটাইমে স্পষ্ট ব্যবহারকারীর অনুমোদন প্রয়োজন
- স্বাক্ষর : শুধুমাত্র সেই অ্যাপ্লিকেশানগুলিকে মঞ্জুর করা হয় যেগুলি একই শংসাপত্র দিয়ে স্বাক্ষরিত অ্যাপের অনুমতি ঘোষণা করে, সাধারণত সিস্টেম অ্যাপ বা একই বিকাশকারীর অ্যাপগুলির মধ্যে ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয়
অনুমতি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের সাথে সম্পর্কিত দুর্বলতাগুলি ঘটে যখন একটি অ্যাপের উপাদান (যেমন কার্যকলাপ , রিসিভার , সামগ্রী প্রদানকারী , বা পরিষেবা ) নিম্নলিখিত সমস্ত মানদণ্ড পূরণ করে:
- উপাদানটি
Manifest
কোনোandroid:permission
এর সাথে যুক্ত নয়; - উপাদানটি একটি সংবেদনশীল কাজ সম্পাদন করে যার জন্য একটি অনুমতি বিদ্যমান যা ব্যবহারকারী ইতিমধ্যে অনুমোদন করেছেন;
- উপাদান রপ্তানি করা হয়;
- কম্পোনেন্ট কোনো ম্যানুয়াল (মেনিফেস্ট বা কোড-লেভেল) অনুমতি পরীক্ষা করে না;
যখন এটি ঘটবে, একটি দূষিত অ্যাপ দুর্বল উপাদানের বিশেষাধিকারের অপব্যবহার করে, ক্ষতিকারক অ্যাপের বিশেষাধিকারগুলিকে ক্ষতিকারক অ্যাপে প্রক্সি করে সংবেদনশীল ক্রিয়া সম্পাদন করতে পারে৷
প্রভাব
সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস পেতে বা সংবেদনশীল ক্রিয়া সম্পাদন করতে দুর্বল উপাদান রপ্তানি করা যেতে পারে। এই অবাঞ্ছিত আচরণের প্রভাব দুর্বল উপাদান এবং এর বিশেষাধিকারের প্রেক্ষাপটের উপর নির্ভর করে।
প্রশমন
সংবেদনশীল কাজের জন্য অনুমতি প্রয়োজন
সংবেদনশীল অনুমতি সহ একটি উপাদান রপ্তানি করার সময়, যেকোনো আগত অনুরোধের জন্য একই অনুমতি প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও আইডিই-তে রিসিভার এবং পরিষেবাগুলির জন্য লিন্ট চেক রয়েছে যাতে এই দুর্বলতা চিহ্নিত করা যায় এবং উপযুক্ত অনুমতিগুলির প্রয়োজনের সুপারিশ করা হয়।
নিম্নলিখিত উদাহরণগুলির মতো পরিষেবাটি বাস্তবায়ন করার সময় বিকাশকারীরা Manifest
ফাইলে বা কোড-লেভেলে ঘোষণা করে ইনকামিং অনুরোধগুলির জন্য অনুমতির প্রয়োজন হতে পারে৷
এক্সএমএল
<manifest ...>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application ...>
<service android:name=".MyExportService"
android:exported="true"
android:permission="android.permission.READ_CONTACTS" />
</application>
</manifest>
কোটলিন
class MyExportService : Service() {
private val binder = MyExportBinder()
override fun onBind(intent: Intent): IBinder? {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.")
// Permission is enforced, proceed with export logic
return binder
}
// Inner class for your Binder implementation
private inner class MyExportBinder : Binder() {
// Permission is enforced, proceed with export logic
}
}
জাভা
public class MyExportService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.");
return binder;
}
// Inner class for your Binder implementation
private class MyExportBinder extends Binder {
// Permission is enforced, proceed with export logic
}
}
উপাদান রপ্তানি করবেন না
একেবারে প্রয়োজনীয় না হলে সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস সহ উপাদানগুলি রপ্তানি করা এড়িয়ে চলুন। আপনি Manifest
ফাইলে আপনার কম্পোনেন্টের জন্য android:exported
false
সেট করে এটি অর্জন করতে পারেন। API স্তর 31 এবং তার পরে, এই বৈশিষ্ট্যটি ডিফল্টরূপে false
সেট করা আছে।
এক্সএমএল
<activity
android:name=".MyActivity"
android:exported="false"/>
স্বাক্ষর-ভিত্তিক অনুমতি প্রয়োগ করুন
আপনার নিয়ন্ত্রণ বা মালিকানাধীন দুটি অ্যাপের মধ্যে ডেটা ভাগ করার সময়, স্বাক্ষর-ভিত্তিক অনুমতিগুলি ব্যবহার করুন৷ এই অনুমতিগুলির জন্য ব্যবহারকারীর নিশ্চিতকরণের প্রয়োজন নেই এবং পরিবর্তে, পরীক্ষা করে দেখুন যে ডেটা অ্যাক্সেস করা অ্যাপগুলি একই সাইনিং কী ব্যবহার করে সাইন করা হয়েছে। এই সেটআপটি আরও সুগমিত, নিরাপদ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে। আপনি যদি কাস্টম অনুমতি ঘোষণা করেন তাহলে সংশ্লিষ্ট নিরাপত্তা নির্দেশিকা বিবেচনা করুন।
এক্সএমএল
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<permission android:name="my_custom_permission_name"
android:protectionLevel="signature" />
একক-টাস্ক এন্ডপয়েন্ট
সেপারেশন অফ কনসার্ন ডিজাইন নীতি অনুসরণ করে আপনার অ্যাপটি বাস্তবায়ন করুন। প্রতিটি এন্ডপয়েন্ট শুধুমাত্র নির্দিষ্ট সুবিধা সহ নির্দিষ্ট কাজের একটি ছোট সেট সঞ্চালন করা উচিত। এই ভাল ডিজাইনের অনুশীলনটি বিকাশকারীকে প্রতিটি শেষ পয়েন্টের জন্য দানাদার অনুমতি প্রয়োগ করার অনুমতি দেয়। উদাহরণস্বরূপ, একটি একক শেষ বিন্দু তৈরি করা এড়িয়ে চলুন যা ক্যালেন্ডার এবং পরিচিতি উভয়ই পরিবেশন করে।
সম্পদ
- ওভারসিউরড ব্লগ থেকে অ্যাপ সুরক্ষিত উপাদানগুলিতে অ্যান্ড্রয়েড অ্যাক্সেস
- বিষয়বস্তু প্রদানকারীর সর্বোত্তম অভ্যাস
- রানটাইম (বিপজ্জনক) অনুমতি
- উদ্বেগ নকশা নীতি বিচ্ছেদ
- অ্যান্ড্রয়েড অনুমতি ডকুমেন্টেশন
- অ্যান্ড্রয়েড ব্রডকাস্ট রিসিভার নিরাপত্তা টিপস
- অ্যান্ড্রয়েড পরিষেবার নিরাপত্তা টিপস
- Android 12 (API 31) রপ্তানি করা ডিফল্ট সেট "false" এ
- লিন্ট চেক: এক্সপোর্ট করা পছন্দের কার্যকলাপ রপ্তানি করা উচিত নয়
- লিন্ট চেক: রপ্তানিকৃত রিসিভারের অনুমতির প্রয়োজন হয় না
- লিন্ট চেক: রপ্তানি করা পরিষেবার অনুমতির প্রয়োজন হয় না
OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন
ওভারভিউ
একটি অ্যান্ড্রয়েড অনুমতি হল একটি স্ট্রিং শনাক্তকারী যা অ্যাপ্লিকেশানের ম্যানিফেস্টে ঘোষিত সীমাবদ্ধ ডেটা বা অ্যাকশনগুলিতে অ্যাক্সেসের অনুরোধ করতে, যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা রানটাইমে প্রয়োগ করা হয়।
অ্যান্ড্রয়েড অনুমতির মাত্রা অনুমতির সাথে সম্পর্কিত সম্ভাব্য ঝুঁকি নির্দেশ করে:
- সাধারণ : স্বয়ংক্রিয়ভাবে ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে মঞ্জুরি, কম-ঝুঁকির অনুমতি
- বিপজ্জনক : উচ্চ-ঝুঁকির অনুমতি যা সংবেদনশীল ব্যবহারকারীর ডেটা অ্যাক্সেসের অনুমতি দিতে পারে, রানটাইমে স্পষ্ট ব্যবহারকারীর অনুমোদন প্রয়োজন
- স্বাক্ষর : শুধুমাত্র সেই অ্যাপ্লিকেশানগুলিকে মঞ্জুর করা হয় যেগুলি একই শংসাপত্র দিয়ে স্বাক্ষরিত অ্যাপের অনুমতি ঘোষণা করে, সাধারণত সিস্টেম অ্যাপ বা একই বিকাশকারীর অ্যাপগুলির মধ্যে ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয়
অনুমতি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের সাথে সম্পর্কিত দুর্বলতাগুলি ঘটে যখন একটি অ্যাপের উপাদান (যেমন কার্যকলাপ , রিসিভার , সামগ্রী প্রদানকারী , বা পরিষেবা ) নিম্নলিখিত সমস্ত মানদণ্ড পূরণ করে:
- উপাদানটি
Manifest
কোনোandroid:permission
এর সাথে যুক্ত নয়; - উপাদানটি একটি সংবেদনশীল কাজ সম্পাদন করে যার জন্য একটি অনুমতি বিদ্যমান যা ব্যবহারকারী ইতিমধ্যে অনুমোদন করেছেন;
- উপাদান রপ্তানি করা হয়;
- কম্পোনেন্ট কোনো ম্যানুয়াল (মেনিফেস্ট বা কোড-লেভেল) অনুমতি পরীক্ষা করে না;
যখন এটি ঘটবে, একটি দূষিত অ্যাপ দুর্বল উপাদানের বিশেষাধিকারের অপব্যবহার করে, ক্ষতিকারক অ্যাপের বিশেষাধিকারগুলিকে ক্ষতিকারক অ্যাপে প্রক্সি করে সংবেদনশীল ক্রিয়া সম্পাদন করতে পারে৷
প্রভাব
সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস পেতে বা সংবেদনশীল ক্রিয়া সম্পাদন করতে দুর্বল উপাদান রপ্তানি করা যেতে পারে। এই অবাঞ্ছিত আচরণের প্রভাব দুর্বল উপাদান এবং এর বিশেষাধিকারের প্রেক্ষাপটের উপর নির্ভর করে।
প্রশমন
সংবেদনশীল কাজের জন্য অনুমতি প্রয়োজন
সংবেদনশীল অনুমতি সহ একটি উপাদান রপ্তানি করার সময়, যেকোনো আগত অনুরোধের জন্য একই অনুমতি প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও আইডিই-তে রিসিভার এবং পরিষেবাগুলির জন্য লিন্ট চেক রয়েছে যাতে এই দুর্বলতা চিহ্নিত করা যায় এবং উপযুক্ত অনুমতিগুলির প্রয়োজনের সুপারিশ করা হয়।
নিম্নলিখিত উদাহরণগুলির মতো পরিষেবাটি বাস্তবায়ন করার সময় বিকাশকারীরা Manifest
ফাইলে বা কোড-লেভেলে ঘোষণা করে ইনকামিং অনুরোধগুলির জন্য অনুমতির প্রয়োজন হতে পারে৷
এক্সএমএল
<manifest ...>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application ...>
<service android:name=".MyExportService"
android:exported="true"
android:permission="android.permission.READ_CONTACTS" />
</application>
</manifest>
কোটলিন
class MyExportService : Service() {
private val binder = MyExportBinder()
override fun onBind(intent: Intent): IBinder? {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.")
// Permission is enforced, proceed with export logic
return binder
}
// Inner class for your Binder implementation
private inner class MyExportBinder : Binder() {
// Permission is enforced, proceed with export logic
}
}
জাভা
public class MyExportService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.");
return binder;
}
// Inner class for your Binder implementation
private class MyExportBinder extends Binder {
// Permission is enforced, proceed with export logic
}
}
উপাদান রপ্তানি করবেন না
একেবারে প্রয়োজনীয় না হলে সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস সহ উপাদানগুলি রপ্তানি করা এড়িয়ে চলুন। আপনি Manifest
ফাইলে আপনার কম্পোনেন্টের জন্য android:exported
false
সেট করে এটি অর্জন করতে পারেন। API স্তর 31 এবং তার পরে, এই বৈশিষ্ট্যটি ডিফল্টরূপে false
সেট করা আছে।
এক্সএমএল
<activity
android:name=".MyActivity"
android:exported="false"/>
স্বাক্ষর-ভিত্তিক অনুমতি প্রয়োগ করুন
আপনার নিয়ন্ত্রণ বা মালিকানাধীন দুটি অ্যাপের মধ্যে ডেটা ভাগ করার সময়, স্বাক্ষর-ভিত্তিক অনুমতিগুলি ব্যবহার করুন৷ এই অনুমতিগুলির জন্য ব্যবহারকারীর নিশ্চিতকরণের প্রয়োজন নেই এবং পরিবর্তে, পরীক্ষা করে দেখুন যে ডেটা অ্যাক্সেস করা অ্যাপগুলি একই সাইনিং কী ব্যবহার করে সাইন করা হয়েছে। এই সেটআপটি আরও সুগমিত, নিরাপদ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে। আপনি যদি কাস্টম অনুমতি ঘোষণা করেন তাহলে সংশ্লিষ্ট নিরাপত্তা নির্দেশিকা বিবেচনা করুন।
এক্সএমএল
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<permission android:name="my_custom_permission_name"
android:protectionLevel="signature" />
একক-টাস্ক এন্ডপয়েন্ট
সেপারেশন অফ কনসার্ন ডিজাইন নীতি অনুসরণ করে আপনার অ্যাপটি বাস্তবায়ন করুন। প্রতিটি এন্ডপয়েন্ট শুধুমাত্র নির্দিষ্ট সুবিধা সহ নির্দিষ্ট কাজের একটি ছোট সেট সঞ্চালন করা উচিত। এই ভাল ডিজাইনের অনুশীলনটি বিকাশকারীকে প্রতিটি শেষ পয়েন্টের জন্য দানাদার অনুমতি প্রয়োগ করার অনুমতি দেয়। উদাহরণস্বরূপ, একটি একক শেষ বিন্দু তৈরি করা এড়িয়ে চলুন যা ক্যালেন্ডার এবং পরিচিতি উভয়ই পরিবেশন করে।
সম্পদ
- ওভারসিউরড ব্লগ থেকে অ্যাপ সুরক্ষিত উপাদানগুলিতে অ্যান্ড্রয়েড অ্যাক্সেস
- বিষয়বস্তু প্রদানকারীর সর্বোত্তম অভ্যাস
- রানটাইম (বিপজ্জনক) অনুমতি
- উদ্বেগ নকশা নীতি বিচ্ছেদ
- অ্যান্ড্রয়েড অনুমতি ডকুমেন্টেশন
- অ্যান্ড্রয়েড ব্রডকাস্ট রিসিভার নিরাপত্তা টিপস
- অ্যান্ড্রয়েড পরিষেবার নিরাপত্তা টিপস
- Android 12 (API 31) রপ্তানি করা ডিফল্ট সেট "false" এ
- লিন্ট চেক: এক্সপোর্ট করা পছন্দের কার্যকলাপ রপ্তানি করা উচিত নয়
- লিন্ট চেক: রপ্তানিকৃত রিসিভারের অনুমতির প্রয়োজন হয় না
- লিন্ট চেক: রপ্তানি করা পরিষেবার অনুমতির প্রয়োজন হয় না
OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন
ওভারভিউ
একটি অ্যান্ড্রয়েড অনুমতি হল একটি স্ট্রিং শনাক্তকারী যা অ্যাপ্লিকেশানের ম্যানিফেস্টে ঘোষিত সীমাবদ্ধ ডেটা বা অ্যাকশনগুলিতে অ্যাক্সেসের অনুরোধ করতে, যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা রানটাইমে প্রয়োগ করা হয়।
অ্যান্ড্রয়েড অনুমতির মাত্রা অনুমতির সাথে সম্পর্কিত সম্ভাব্য ঝুঁকি নির্দেশ করে:
- সাধারণ : স্বয়ংক্রিয়ভাবে ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে মঞ্জুরি, কম-ঝুঁকির অনুমতি
- বিপজ্জনক : উচ্চ-ঝুঁকির অনুমতি যা সংবেদনশীল ব্যবহারকারীর ডেটা অ্যাক্সেসের অনুমতি দিতে পারে, রানটাইমে স্পষ্ট ব্যবহারকারীর অনুমোদন প্রয়োজন
- স্বাক্ষর : শুধুমাত্র সেই অ্যাপ্লিকেশানগুলিকে মঞ্জুর করা হয় যেগুলি একই শংসাপত্র দিয়ে স্বাক্ষরিত অ্যাপের অনুমতি ঘোষণা করে, সাধারণত সিস্টেম অ্যাপ বা একই বিকাশকারীর অ্যাপগুলির মধ্যে ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয়
অনুমতি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের সাথে সম্পর্কিত দুর্বলতাগুলি ঘটে যখন একটি অ্যাপের উপাদান (যেমন কার্যকলাপ , রিসিভার , সামগ্রী প্রদানকারী , বা পরিষেবা ) নিম্নলিখিত সমস্ত মানদণ্ড পূরণ করে:
- উপাদানটি
Manifest
কোনোandroid:permission
এর সাথে যুক্ত নয়; - উপাদানটি একটি সংবেদনশীল কাজ সম্পাদন করে যার জন্য একটি অনুমতি বিদ্যমান যা ব্যবহারকারী ইতিমধ্যে অনুমোদন করেছেন;
- উপাদান রপ্তানি করা হয়;
- কম্পোনেন্ট কোনো ম্যানুয়াল (মেনিফেস্ট বা কোড-লেভেল) অনুমতি পরীক্ষা করে না;
যখন এটি ঘটবে, একটি দূষিত অ্যাপ দুর্বল উপাদানের বিশেষাধিকারের অপব্যবহার করে, ক্ষতিকারক অ্যাপের বিশেষাধিকারগুলিকে ক্ষতিকারক অ্যাপে প্রক্সি করে সংবেদনশীল ক্রিয়া সম্পাদন করতে পারে৷
প্রভাব
সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস পেতে বা সংবেদনশীল ক্রিয়া সম্পাদন করতে দুর্বল উপাদান রপ্তানি করা যেতে পারে। এই অবাঞ্ছিত আচরণের প্রভাব দুর্বল উপাদান এবং এর বিশেষাধিকারের প্রেক্ষাপটের উপর নির্ভর করে।
প্রশমন
সংবেদনশীল কাজের জন্য অনুমতি প্রয়োজন
সংবেদনশীল অনুমতি সহ একটি উপাদান রপ্তানি করার সময়, যেকোনো আগত অনুরোধের জন্য একই অনুমতি প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও আইডিই-তে রিসিভার এবং পরিষেবাগুলির জন্য লিন্ট চেক রয়েছে যাতে এই দুর্বলতা চিহ্নিত করা যায় এবং উপযুক্ত অনুমতিগুলির প্রয়োজনের সুপারিশ করা হয়।
নিম্নলিখিত উদাহরণগুলির মতো পরিষেবাটি বাস্তবায়ন করার সময় বিকাশকারীরা Manifest
ফাইলে বা কোড-লেভেলে ঘোষণা করে ইনকামিং অনুরোধগুলির জন্য অনুমতির প্রয়োজন হতে পারে৷
এক্সএমএল
<manifest ...>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application ...>
<service android:name=".MyExportService"
android:exported="true"
android:permission="android.permission.READ_CONTACTS" />
</application>
</manifest>
কোটলিন
class MyExportService : Service() {
private val binder = MyExportBinder()
override fun onBind(intent: Intent): IBinder? {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.")
// Permission is enforced, proceed with export logic
return binder
}
// Inner class for your Binder implementation
private inner class MyExportBinder : Binder() {
// Permission is enforced, proceed with export logic
}
}
জাভা
public class MyExportService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Enforce calling app has the required permission
enforceCallingPermission(Manifest.permission.READ_CONTACTS, "Calling app doesn't have READ_CONTACTS permission.");
return binder;
}
// Inner class for your Binder implementation
private class MyExportBinder extends Binder {
// Permission is enforced, proceed with export logic
}
}
উপাদান রপ্তানি করবেন না
একেবারে প্রয়োজনীয় না হলে সংবেদনশীল সংস্থানগুলিতে অ্যাক্সেস সহ উপাদানগুলি রপ্তানি করা এড়িয়ে চলুন। আপনি Manifest
ফাইলে আপনার কম্পোনেন্টের জন্য android:exported
false
সেট করে এটি অর্জন করতে পারেন। API স্তর 31 এবং তার পরে, এই বৈশিষ্ট্যটি ডিফল্টরূপে false
সেট করা আছে।
এক্সএমএল
<activity
android:name=".MyActivity"
android:exported="false"/>
স্বাক্ষর-ভিত্তিক অনুমতি প্রয়োগ করুন
আপনার নিয়ন্ত্রণ বা মালিকানাধীন দুটি অ্যাপের মধ্যে ডেটা ভাগ করার সময়, স্বাক্ষর-ভিত্তিক অনুমতিগুলি ব্যবহার করুন৷ এই অনুমতিগুলির জন্য ব্যবহারকারীর নিশ্চিতকরণের প্রয়োজন নেই এবং পরিবর্তে, পরীক্ষা করে দেখুন যে ডেটা অ্যাক্সেস করা অ্যাপগুলি একই সাইনিং কী ব্যবহার করে সাইন করা হয়েছে। এই সেটআপটি আরও সুগমিত, নিরাপদ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে। আপনি যদি কাস্টম অনুমতি ঘোষণা করেন তাহলে সংশ্লিষ্ট নিরাপত্তা নির্দেশিকা বিবেচনা করুন।
এক্সএমএল
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<permission android:name="my_custom_permission_name"
android:protectionLevel="signature" />
একক-টাস্ক এন্ডপয়েন্ট
সেপারেশন অফ কনসার্ন ডিজাইন নীতি অনুসরণ করে আপনার অ্যাপটি বাস্তবায়ন করুন। প্রতিটি এন্ডপয়েন্ট শুধুমাত্র নির্দিষ্ট সুবিধা সহ নির্দিষ্ট কাজের একটি ছোট সেট সঞ্চালন করা উচিত। এই ভাল ডিজাইনের অনুশীলনটি বিকাশকারীকে প্রতিটি শেষ পয়েন্টের জন্য দানাদার অনুমতি প্রয়োগ করার অনুমতি দেয়। উদাহরণস্বরূপ, একটি একক শেষ বিন্দু তৈরি করা এড়িয়ে চলুন যা ক্যালেন্ডার এবং পরিচিতি উভয়ই পরিবেশন করে।
সম্পদ
- ওভারসিউরড ব্লগ থেকে অ্যাপ সুরক্ষিত উপাদানগুলিতে অ্যান্ড্রয়েড অ্যাক্সেস
- বিষয়বস্তু প্রদানকারীর সর্বোত্তম অভ্যাস
- রানটাইম (বিপজ্জনক) অনুমতি
- উদ্বেগ নকশা নীতি বিচ্ছেদ
- অ্যান্ড্রয়েড অনুমতি ডকুমেন্টেশন
- অ্যান্ড্রয়েড ব্রডকাস্ট রিসিভার নিরাপত্তা টিপস
- অ্যান্ড্রয়েড পরিষেবার নিরাপত্তা টিপস
- Android 12 (API 31) রপ্তানি করা ডিফল্ট সেট "false" এ
- লিন্ট চেক: এক্সপোর্ট করা পছন্দের কার্যকলাপ রপ্তানি করা উচিত নয়
- লিন্ট চেক: রপ্তানিকৃত রিসিভারের অনুমতির প্রয়োজন হয় না
- লিন্ট চেক: রপ্তানি করা পরিষেবার অনুমতির প্রয়োজন হয় না