রপ্তানিকৃত উপাদানগুলিতে অনুমতি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ

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" />

একক-টাস্ক এন্ডপয়েন্ট

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

সম্পদ

,

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" />

একক-টাস্ক এন্ডপয়েন্ট

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

সম্পদ

,

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" />

একক-টাস্ক এন্ডপয়েন্ট

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

সম্পদ

,

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" />

একক-টাস্ক এন্ডপয়েন্ট

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

সম্পদ